PHP SOAP客户端在调用方法“ SoapFault异常:[s:Receiver]对象引用未设置为对象的实例”时给出错误

时间:2018-07-17 12:13:30

标签: php soap soap-client

我对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,并且返回的效果非常好。

1 个答案:

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

,此问题已解决。