我对PHP SOAP完全陌生。在为我的问题进行了一些研发之后,我得到了一些stackoverflow的链接,但没有得到完美的解决方案。
这是我的问题:
我正在创建一个SOAP客户端,该客户端将执行一个名为GetPassword
的方法,如果凭据正确,它将返回一个带有响应代码'100'的加密密码。如果凭据错误,则会收到响应代码“ 101”和响应状态。
这是我的代码(出于安全考虑,我正在隐藏凭据):
$url= "http://bsestarmfdemo.bseindia.com/StarMFFileUploadService/StarMFFileUploadService.svc?wsdl";
$method = "GetPassword";
$error=0;
$client = new SoapClient($url, array('soap_version' => SOAP_1_2 , 'SoapAction'=>'http://tempuri.org/IStarMFFileUploadService/GetPassword'));
$actionHeader= array();
$actionHeader[] = new SoapHeader('http://www.w3.org/2005/08/addressing',
'Action',
'http://tempuri.org/IStarMFFileUploadService/GetPassword');
$actionHeader[] = new SoapHeader('http://www.w3.org/2005/08/addressing',
'To',
'http://bsestarmfdemo.bseindia.com/StarMFFileUploadService/StarMFFileUploadService.svc/Basic');
$client->__setSoapHeaders($actionHeader);
$param = array('MemberId' => 'XXXXX', 'Password' => 'XXXXXXX', 'UserId' => 'XXXXXXX');
try{
$info = $client->__call($method, array($param));
}
catch (SoapFault $fault) {
$error = 1;
}
if($error==1) {
$xml=$fault;
}else{
$xml = $info;
}
echo($xml);
几天前,我收到了此错误,并且由于参数不匹配而发生了错误。但是这次我认为参数是正确的。可能是我在犯一些小错误。.请帮助我发现错误。
如果需要任何输入,请在评论中让我知道,我会更新。
请注意:我已经使用SoapUI软件测试了wsdl URL,并且返回的效果非常好。
答案 0 :(得分:0)
问题出在参数上。只需分析方法GetPassword
的结构,发现它仅使用一个名为'Param'的参数(它是一个对象)和inside the Param object it is taking the values of MemberId', 'Password' , 'UserId'.
因此,只需要更改一行代码即可。
使用
$param =array ('Param' => array('MemberId' => 'XXXXX', 'Password' => 'XXXXXXX', 'UserId' => 'XXXXXXX') );
代替
$param = array('MemberId' => 'XXXXX', 'Password' => 'XXXXXXX', 'UserId' => 'XXXXXXX');
,此问题已解决。