我从客户端连接到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函数。这需要token参数和一个"对象"(基本上是一个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)"answers"application(object)"调用AddApplication函数。
/*** AddApplication ***/
try{
$result = $client->AddApplication(array("token" => $token, "application" => $std));
}catch(SoapFault $ex){
abort();
}
如果一切顺利,数据将存储在外部服务器上,您将收到"成功"消息。即使没有进入SoapFault,也有可能收到"失败"。一定要记录"$result"answers"$ex",因为SOAP服务可以返回"Fail",但try-catch将其视为格式良好的结果。
最后要做的是关闭会话(并销毁令牌)
/*** CloseSession ***/
try{
$app = $client->CloseSession($token);
}catch(SoapFault $ex){
abort();
}
如果有任何问题,请不要犹豫,在这里问他们,我很乐意帮助你,因为我有这样的问题想办法解决。