【发布时间】:2011-09-22 18:53:19
【问题描述】:
我正在发送如下所示的 SOAP 请求:
<SOAP-ENV:Body>
<api:GetOrder xsi:type="SOAP-ENC:Struct">
<api_orderId xsi:type="xsd:int">1234</api_orderId>
</api:GetOrder>
</SOAP-ENV:Body>
但需要看起来像这样(SoapUI 生成):
<soapenv:Body>
<api:GetOrder>
<api:orderId>1234</api:orderId>
</api:GetOrder>
</soapenv:Body>
我的 PHP 代码:
$client = $this->getConnection();
$soap_options = array('soapaction' => $config->getValue('soapaction_url') . 'GetOrder');
$obj = new stdClass();
$obj->api_orderId = 59698;
$results = $client->__soapCall('GetOrder', array(new SoapParam($obj, "api:GetOrder")), $soap_options);
真的有2个问题:
1) 如何从请求中删除“xsi:type”? (如果我将 xsi:type 添加到我的 SoapUI 请求中,我会收到“400 Bad Request”
2) 我需要发送“api:orderId”而不是“api_orderId”,但是我不能用冒号命名对象,所以我必须以某种方式将名称和值作为数组传递吗?
感谢任何帮助,谢谢。
编辑:
我想不出任何其他方式来发送这些请求,我基本上按照 Mr.K 下面的建议做了。 我编写了一个自定义类来扩展 SoapClient。然后覆盖 __doRequest 方法以发送我自己的自定义 SOAP 请求。
唯一的缺点是 SOAP 不再返回对象数组,因此我还必须解析 SOAP 响应的 XML。 另外我怀疑这样做的性能有点慢,但我没有注意到。
【问题讨论】: