【问题标题】:PHP Soap - How to remove xsi:type= from XML tagPHP Soap - 如何从 XML 标记中删除 xsi:type=
【发布时间】: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。 另外我怀疑这样做的性能有点慢,但我没有注意到。

【问题讨论】:

    标签: php soap


    【解决方案1】:

    尝试简单的 XML 解析,并根据需要创建新请求。

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

    就像从那里得到它,把它放在这个里面..然后发送!..

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    • 1970-01-01
    • 2011-12-01
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多