PHP Soap - 如何从XML标记中删除xsi:type =

时间:2011-09-22 18:53:20

标签: php soap

我发送的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);

真的有两个问题:

1)如何从请求中删除“xsi:type”? (如果我在我的SoapUI请求中添加xsi:输入,我会收到“400 Bad Request”

2)而不是“api_orderId”我需要发送“api:orderId”,但我不能用冒号命名对象,所以我必须以某种方式将名称和值作为数组传递?

感谢您的帮助,谢谢。

修改

我无法找出发送这些请求的任何其他方式,我基本上最终按照Mr.K建议的那样做了。 我写了一个自定义类来扩展SoapClient。然后覆盖__doRequest方法以发送我自己的自定义SOAP请求。

唯一的缺点是SOAP不再向我返回一个对象数组,因此我还必须解析SOAP响应的XML。 另外我怀疑这样做的表现有点慢,但我没有注意到它。

1 个答案:

答案 0 :(得分:0)

尝试使用Simple XML解析,并根据需要创建新请求。

从原始请求中读取标记值,使用解析将这些值分配给新的XML对象。您可以创建XML消息字符串并将其作为XML对象加载到PHP中。

就像从那里得到它,把它放在这里......并发送!..