Soapclient将请求主体的数据传递给__soapCall

时间:2017-08-24 00:11:39

标签: php soap soap-client

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

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

我使用的代码:

$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名称空间内。

我在理解通话文档方面做得并不好,所以任何帮助都是值得赞赏的。

2 个答案:

答案 0 :(得分:0)

可能最好不要使用$soap->__soapCall(),因为它实际上是一个“低级API”,只有当你处于“非WSDL模式”时才有用:

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

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

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

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

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

答案 1 :(得分:0)

尝试

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

应该可以