Webservice我的调用返回SoapFault,其中xml嵌入在<detail>
元素中 - 这就是它在SoapUI中的样子:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<soapenv:Fault>
<faultcode>soapenv:Server</faultcode>
<faultstring>some error msg</faultstring>
<detail>
<e:exchange-error xmlns:e="http://mycompany.com/faults">
<e:message-data id="00001" type="005"/>
<e:result-data date="2017-02-13 15:44:33" code="1401" ref="2457798154426512"/>
</e:exchange-error>
</detail>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>`
似乎PHP实现没有传递xml节点的属性,它只返回值(在本例中为空):
try {
$resp = $this->_soap->__soapCall("myMethod", ['param-data' => $req->get()]);
var_dump($response);
} catch (\SoapFault $e) {
if (empty($e->detail->{'exchange-error'}->{'result-data'})) {
echo "it's empty :(\n";
var_dump($e->detail->{'exchange-error'});
}
}
$ php -f foobar.php
it's empty :(
object(stdClass)#7 (4) {
["message-data"]=>
string(0) ""
["result-data"]=>
string(0) ""
}
有没有办法通过属性值获取exchange-error
对象?或者只是从detail
获取XML /字符串并解析它?故障消息是在WSDL中定义的,所以我猜它的结构应该在客户端知道。
答案 0 :(得分:0)
php响应中不返回命名空间属性。它们仅用于定义它的响应对象类型。
如果您想轻松一天,请使用WSDL到php生成器,例如PackageGenerator项目。它将使您轻松构建请求,它将使您轻松收到响应,最后它将使您轻松处理任何错误。