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');

问题已解决。