我有以下代码:
$telnums = array(10, 20, 30);
$obj = new StdClass();
$obj->telnums = new StdClass();
foreach ($telnums as $telnum) {
$obj->telnums = $telnum;
}
call_user_func(array($this->client, 'createDomain'), new SoapVar($obj, SOAP_ENC_OBJECT));
$ this->客户端是SoapClient类的一个实例。
它会产生以下请求:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="...">
<SOAP-ENV:Body>
<ns1:createDomain>
<createDomainRequest>
<telnums>30</telnums>
</createDomainRequest>
</ns1:createDomain>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
但我需要
<createDomainRequest>
<telnums>10</telnums>
<telnums>20</telnums>
<telnums>30</telnums>
</createDomainRequest>
我怎么能做到这一点?
P.S。:带有Suhosin-Patch 0.9.6.2(cli)的PHP 5.2.6-3ubuntu4.5(内置:2010年1月6日22:25:33)
提前致谢!
答案 0 :(得分:14)
我最近陷入了类似的情况,我发现这种模式通常都有效。
$obj = new StdClass();
foreach ($telnums as $telnum) {
$obj->telnums[] = $telnum;
}
这样做的原因是因为它非常接近模拟WSDL规定的相同数据结构
答案 1 :(得分:8)
正确的答案应该是:
$options = array(
'createDomainRequest' => array(
'telnums' => array(
'10',
'20',
'30'
)
)
);
:)
答案 2 :(得分:1)
找到一个有效的解决方案是一个痛苦的臀部,但最终并没有那么难。使用SoapParam是非常容易和简洁的:
$soapClient = new SoapClient($wsdl);
$soapClient->__call('createDomain', array(
new SoapParam('10', 'telnums'),
new SoapParam('20', 'telnums'),
new SoapParam('30', 'telnums'),
));
答案 3 :(得分:0)
以下是我使用的代码格式:
$wsdl = 'https://your.api/path?wsdl';
$client = new SoapClient($wsdl);
$multipleSearchValues = [1, 2, 3, 4];
$queryData = ['yourFieldName' => $multipleSearchValues];
$results = $client->YourApiMethod($queryData);
print_r($results);
答案 4 :(得分:-1)
通过扩展SoapClient修改它并覆盖__doRequest()方法,我在这里修改请求:http://www.php.net/manual/en/soapclient.dorequest.php#57995
对我来说看起来很糟糕,但它现在“就在这里”。
答案 5 :(得分:-1)
$telnums=array(10, 20, 30);
$createDomainRequest=array('createDomainRequest' => array(
'telnums' => $telnums)
);