我试图让SoapRequest工作,并且这些要求似乎与标准的PHP soap客户端无关。
我已经简化了代码,但问题仍然很明显:
我这样做:
$client = new SoapClient('http://example.com?WSDL', array('trace' => 1));
$client->MakeRequest([
'root' => [
'attribute' => 'value',
'node' => [...]
]
]);
哪个结束了op这样的请求
<ns1:root attributes="value">
<ns1:node>...</ns1:node>
</ns1:root>
但我真正需要的是请求看起来像这样。
<ns1:root attributes="value">
<node>...</node>
</ns1:root>
我已经尝试了很多不同的解决方案,使用SoapVar
来处理数据结构的不同部分,但我从来没有得到我想要的结果,或者我的问题是属性转换为节点或根命名空间(来自WSDL定义)被添加到子节点,这使得我与第三方服务集成失败。
是否有任何技巧或库可以帮助我,所以我可以避免手动构建XML并将其发送到服务。
答案 0 :(得分:0)
我担心唯一的方法是使用SoapVar
编码创建具有足够名称空间定义的SOAP_ENC_OBJECT
:
new \SoapVar($val, SOAP_ENC_OBJECT, null, null, $nodeName, $namespace);
在你的递归函数中调用它。 AFAIR,它是实现儿童名称空间插入的唯一解决方案。