Soapclient 将请求正文的数据传递到 __soapCall
Soapclient passing the data for the body of request into __soapCall
我正在与来自 PHP 的 SOAP 网络服务集成 - 当使用 __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 命名空间中。
我不太擅长理解调用的文档,因此不胜感激。
可能最好不要使用 $soap->__soapCall()
,因为那确实是一个 "low level API",并且只有在 "non-WSDL mode":
时才有用
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']);
尝试
$data['keyname1'][0] = $value;
$data['keyname2'][1] = 'testingtesting';
它应该有效
我正在与来自 PHP 的 SOAP 网络服务集成 - 当使用 __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 命名空间中。
我不太擅长理解调用的文档,因此不胜感激。
可能最好不要使用 $soap->__soapCall()
,因为那确实是一个 "low level API",并且只有在 "non-WSDL mode":
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']);
尝试
$data['keyname1'][0] = $value;
$data['keyname2'][1] = 'testingtesting';
它应该有效