9

我有以下代码:

$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->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>

但是我需要

            <createDomainRequest>
                <telnums>10</telnums>
                <telnums>20</telnums>
                <telnums>30</telnums>
            </createDomainRequest>

我怎样才能做到这一点?

PS: PHP 5.2.6-3ubuntu4.5 和 Suhosin-Patch 0.9.6.2 (cli) (build: Jan 6 2010 22:25:33)

提前致谢!

4

6 回答 6

15

我最近遇到了类似的情况,我发现这种模式通常可以解决问题。

$obj = new StdClass();
foreach ($telnums as $telnum) {
    $obj->telnums[] = $telnum;
}

之所以可行,是因为它与您的 WSDL 规定的数据结构非常相似

于 2014-10-02T20:34:52.113 回答
8

正确答案应该是:

$options = array(
  'createDomainRequest' => array(
    'telnums' => array(
      '10',
      '20',
      '30'
    )
  )
);

:)

于 2011-06-03T01:22:29.933 回答
1

找到一个可行的解决方案是一件很痛苦的事,但最终并不难。使用 SoapParam 甚至出奇的简单和整洁:

$soapClient = new SoapClient($wsdl);
$soapClient->__call('createDomain', array(
    new SoapParam('10', 'telnums'),
    new SoapParam('20', 'telnums'),
    new SoapParam('30', 'telnums'),
));
于 2015-01-05T15:54:51.743 回答
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);
于 2017-08-14T16:48:30.173 回答
-1

通过扩展 SoapClient 并覆盖 __doRequest() 方法修复它,我在此处修改请求:http ://www.php.net/manual/en/soapclient.dorequest.php#57995

对我来说看起来很糟糕,但它“就在这里,现在”有效。

于 2010-09-02T11:26:59.287 回答
-1
$telnums=array(10, 20, 30);
$createDomainRequest=array('createDomainRequest' => array(
  'telnums' => $telnums)
);
于 2017-05-17T11:30:45.633 回答