PHP SOAP 客户端在调用方法时出错 "SoapFault exception: [s:Receiver] Object reference not set to an instance of an object"
PHP SOAP Client giving error at the time of calling a method "SoapFault exception: [s:Receiver] Object reference not set to an instance of an object"
我对 PHP SOAP 完全陌生。在为我的问题做了一些研发之后,我得到了一些 Whosebug 的链接,但没有得到完美的解决方案。
这是我的问题:
我正在创建一个 SOAP 客户端,它将执行一个名为 GetPassword
的方法,如果凭据正确,它将 return 一个响应代码为“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,它 return 完美。
问题出在参数上。刚刚分析了MethodGetPassword
的结构,发现它只有一个参数'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');
问题已解决。
我对 PHP SOAP 完全陌生。在为我的问题做了一些研发之后,我得到了一些 Whosebug 的链接,但没有得到完美的解决方案。
这是我的问题:
我正在创建一个 SOAP 客户端,它将执行一个名为 GetPassword
的方法,如果凭据正确,它将 return 一个响应代码为“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,它 return 完美。
问题出在参数上。刚刚分析了MethodGetPassword
的结构,发现它只有一个参数'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');
问题已解决。