PHP和SOAP集成
我从客户端连接到SOAP服务器,并试图发回表单信息。PHP和SOAP集成
连接有效,但我不知道如何发回数据。我已收到文档( - >http://s000.tinyupload.com/?file_id=89258359616332514672),并被卡在功能AddApplication
这是我迄今为止编写的PHP代码。目前还没有形式整合,只有虚拟数据。
<?
$client = new SoapClient(
'https://wstest.hrweb.be/TvBastards/TvBastards/Job.svc?singleWsdl',
array(
'soap_version' => SOAP_1_1
)
);
$params = array(
'username' => 'XXX',
'password' => 'XXX',
'environmentKey' => 'XXX',
);
//Open session
try{
$token = $client->OpenSession($params);
}catch(SoapFault $ex){
echo "<pre>";
print_r($ex->detail->ExceptionDetail);
echo "</pre>";
}
//Add Application
try{
$resp = $client->AddApplication($params, ___THE_XML_SHOULD_BE_HERE___); // I have no idea how I can implement a XML file over here, and make this part work
}catch(SoapFault $ex){
echo "<pre>";
print_r($ex->detail->ExceptionDetail);
echo "</pre>";
}
//Close session
try{
$app = $client->CloseSession($token);
}catch(SoapFault $ex){
echo "<pre>";
print_r($ex);
echo "</pre>";
}`
我现在收到的错误是:
End element 'Body' from namespace 'http://schemas.xmlsoap.org/soap/envelope/' expected. Found element 'param1' from namespace ''. Line 2, position 156.
这是可以理解的,因为我不提供任何XML。
我收到我的令牌,因此OpenSession
完美工作。如上所述,我完全停留在AddApplication
函数中。这是我第一次遇到一个SOAP服务,因此我非常赞赏每一个可能的解释。
修复它,并希望它可以帮助其他人。我会尝试将其分成几个步骤。
define('SIM_LOGIN', 'LOGIN NAME HERE');
define('SIM_PASSWORD', 'LOGIN PASSWORD HERE');
define('ENV_KEY', 'ENVIRONMENT KEY HERE');
/*** login parameters ***/
$params = array(
'username' => SIM_LOGIN,
'password' => SIM_PASSWORD,
'environmentKey' => ENV_KEY,
);
/*** Set up client ***/
$client = new SoapClient(
__SOAP URL HERE__,
array(
'soap_version' => SOAP_1_1
)
);
设置参数并连接到客户端后,我们可以开始调用SOAP服务中的函数。每个SOAP服务都会有所不同,因此函数名称和参数可能会有所不同。在下面的例子中,我需要打开一个会话来检索一个令牌。此令牌用于所有其他功能,因此此功能是必需的。如果失败,我会调用“abort()”函数。
try{
$token = $client->OpenSession($params);
}catch(SoapFault $ex){
abort();
}
如果接收到令牌,则调用AddApplication函数。这需要令牌参数和一个“对象”(基本上是一个STDClass)。
我创建我的所有数据的stdClass的:
/*** Create stdClass with requested data ***/
$std = new stdClass();
$std->Firstname = $firstname;
$std->Lastname = $lastname;
$std->Birthdate = $birthdate;
$std->Phone = $phone;
$std->Email = $email;
一定要检查名称或资本的驼峰规则,因为这使所有的差异。
现在我们调用带有参数“token(string)”和“application(object)”的AddApplication函数。
/*** AddApplication ***/
try{
$result = $client->AddApplication(array("token" => $token, "application" => $std));
}catch(SoapFault $ex){
abort();
}
如果一切顺利,数据存储在外部服务器上,并且您收到“成功”消息。即使没有进入SoapFault,您也有可能会收到“失败”。一定要记录“$ result”和“$ ex”,因为SOAP服务可以返回“失败”,但try-catch将此视为良好结果。
最后要做的就是关闭会话(和破坏令牌)
/*** CloseSession ***/
try{
$app = $client->CloseSession($token);
}catch(SoapFault $ex){
abort();
}
如果有任何疑问,请不要犹豫,在这里问他们,我会很乐意帮助像我这样的问题搞清楚这一点。