Sla*_*hin 8 php soap soap-client
我有以下代码:
$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));
Run Code Online (Sandbox Code Playgroud)
$ this-> client是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>
Run Code Online (Sandbox Code Playgroud)
但是我需要
<createDomainRequest>
<telnums>10</telnums>
<telnums>20</telnums>
<telnums>30</telnums>
</createDomainRequest>
Run Code Online (Sandbox Code Playgroud)
我怎么能做到这一点?
PS:PHP 5.2.6-3ubuntu4.5与Suhosin-Patch 0.9.6.2(cli)(内置:2010年1月6日22:25:33)
提前致谢!
小智 15
我最近陷入了类似的情况,我发现这种模式通常可以解决问题.
$obj = new StdClass();
foreach ($telnums as $telnum) {
$obj->telnums[] = $telnum;
}
Run Code Online (Sandbox Code Playgroud)
这样做的原因是它密切模拟了WSDL规定的相同数据结构
正确的答案应该是:
$options = array(
'createDomainRequest' => array(
'telnums' => array(
'10',
'20',
'30'
)
)
);
Run Code Online (Sandbox Code Playgroud)
:)
Sla*_*hin -1
通过扩展 SoapClient 并覆盖 __doRequest() 方法修复了它,我在其中修改请求,如下所述: http: //www.php.net/manual/en/soapclient.dorequest.php#57995
对我来说看起来很糟糕,但它“就在此时此地”有效。
| 归档时间: |
|
| 查看次数: |
12983 次 |
| 最近记录: |