【问题标题】:Soapclient passing the data for the body of request into __soapCallSoapclient 将请求正文的数据传递到 __soapCall
【发布时间】:2017-08-24 00:11:39
【问题描述】:

我正在与 PHP 的 SOAP 网络服务集成 - 当使用 __soapcall 调用方法并在关联数组中传递数据数组时。

我做错了,因为第一个参数根本没有出现 - 第二个参数出现在 XML 中的标记名称为“param1”。

我正在使用的代码:

$soap = new SoapClient($apiURL, array('trace' => 1));
$value = 'ABCDEFG';

$data = array();
$data['keyname1'] = $value;             
$data['keyname2'] = 'testingtesting';               

$response = $soap->__soapCall('CheckAddress', $data);

但是发送到服务器的请求一起省略了 keyname1,并且在仅标记为 param1 的标签中将值设置为 keyname2:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://example.com/ws/">
<SOAP-ENV:Body>
<ns1:CheckAddress/><param1>testingtesting</param1>

实际上,参数也应该放在 CheckAddress 命名空间内。

我在理解电话文档方面做得不是很好,因此感谢您的帮助。

【问题讨论】:

    标签: php soap soap-client


    【解决方案1】:

    最好不要使用$soap-&gt;__soapCall(),因为这确实是一个“低级 API”,并且仅在您处于“非 WSDL 模式”时才有用:

    https://php.net/manual/en/soapclient.soapcall.php

    为什么不尝试在$soap 对象上调用CheckAddress() 方法,例如

    $response = $soap->CheckAddress($value1, $value2, $value3);
    $response = $soap->CheckAddress($data);
    

    如果你的第一个参数使用键控数组,你应该可以这样做:

    $response = $soap->CheckAddress(['name' => 'value']);
    

    【讨论】:

      【解决方案2】:

      试试

      $data['keyname1'][0] = $value;             
      $data['keyname2'][1] = 'testingtesting';   
      

      它应该可以工作

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-16
        • 1970-01-01
        相关资源
        最近更新 更多