dongwenyou4298 2018-08-25 19:20
浏览 126
已采纳

如何使用PHP从XML创建SOAP请求

I am trying to create SOAP request, but it gives me error: An exception occurred whilst trying to authenticate you. String reference not set to an instance of a String. Parameter name: s My code is:

$wsdl   = "https://securedwebapp.com/api/service.asmx?WSDL"; 
$trace = true;
$exceptions = false;
$debug = true;

$client = new SoapClient($wsdl,
      array(
        'trace' => $trace,
        'exceptions' => $exceptions,
        'debug' => $debug,
      ));


    $xml = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:kas="KashFlow">
   <soapenv:Header/>
   <soapenv:Body>
      <kas:GetInvoice>
         <kas:UserName>xxx</kas:UserName>
         <kas:Password>xxx</kas:Password>
         <kas:InvoiceNumber>184576</kas:InvoiceNumber>
      </kas:GetInvoice>
   </soapenv:Body>
</soapenv:Envelope>';
//var_dump($xml);

    $args = array(new SoapVar($xml, XSD_ANYXML)); 
    $res  = $client->__soapCall('GetInvoice', $args);
var_dump($res);
echo "<hr>Last Request";
echo "<pre>", htmlspecialchars($client->__getLastRequest()), "</pre>";

Does anyone know how to solve? The request works fine if I use:

$wsdl = 'https://securedwebapp.com/api/service.asmx?WSDL';
$trace = true;
$exceptions = false;
$debug = true;

$client = new SoapClient($wsdl,
      array(
        'trace' => $trace,
        'exceptions' => $exceptions,
        'debug' => $debug,
      ));


$params = array(
   'InvoiceNumber' =>'81217',
    'UserName' => 'xxx', 
    'Password' => 'xxx'
);

$resp = $client->GetInvoice($params);


print_r($resp);

This is request with simple parameters, but in real situation I have complex XML request, that I do not know how to form as php object. That is why I would send it as XML as I am trying to do at first place.

  • 写回答

1条回答 默认 最新

  • dougu5950 2018-08-27 12:03
    关注

    Nowadays, it is strongly advised to use a WSDL to PHP generator in order to avoid encountering this sort of issues.

    I recomend using the PackageGenerator project which allows to generate a PHP SDK based on the WSDL. The generated PHP SDK contains all that is necessary to construct the request, send the request and handle the response only using an OOP approach.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵