【问题标题】:PHP SoapClient fails to include function-params in XML properlyPHP SoapClient 无法在 XML 中正确包含函数参数
【发布时间】:2012-05-23 15:47:11
【问题描述】:

我尝试向名为 GetPeriodicValues 的 .NET WSDL 函数发出请求。该函数需要一些参数,问题是 SoapClient 创建了一个不正确的 XML。

这个 PHP 代码...

$client = new SoapClient(self::URL , array('trace' => 1,  'encoding' => 'UTF-8', 'soap_version' => SOAP_1_1));
$params = array('name' => 'myname', 'address' => 'myaddress');
$result = $client->__soapCall('GetPeriodicValues', array('parameters' => $params), array());

...生成以下请求-XML(我已经排除了一些不相关的内容):

<SOAP-ENV:Body>
   <ns1:RequestOf_GetPeriodicValuesParameters/>
</SOAP-ENV:Body>

但我希望它会创建这个

<SOAP-ENV:Body>
   <ns1:RequestOf_GetPeriodicValuesParameters>
      <ns1:name>myname</ns1:name>
      <ns1:address>myaddress</ns1:address>
   </ns1:RequestOf_GetPeriodicValuesParameters>
</SOAP-ENV:Body>

我应该如何在函数调用中包含参数?

【问题讨论】:

  • 试试这个$result = $client-&gt;__soapCall('GetPeriodicValues', $params);。甚至这个$result = $client-&gt;GetPeriodicValues('myname', 'myaddress') 也可以工作。
  • 您的两个建议都会生成&lt;ns1:RequestOf_GetPeriodicValuesParameters/&gt;&lt;param1&gt;myaddress&lt;/param1&gt;。不幸的是,这不是我需要的。我需要标签的名称是 nameaddress 并且它们也应该在标签 &lt;ns1:RequestOf_GetPeriodicValuesParameters&gt; 内,而不是在它之后。有谁知道我的期望是错误的,还是 SoapClient 中有错误?

标签: php xml soap-client


【解决方案1】:

问题解决了。我学到的是 XML 输出依赖于 WSDL,在我的例子中,它希望我将参数放在一个带有键“Params”的数组中。但是,查看 WSDL 返回的 XML,我没有发现这样的信息,而是看起来应该使用关键的“参数”。我不确定,但服务可能有问题。

【讨论】:

    猜你喜欢
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多