PHP SoapFault未在细节子元素中传递属性
我调用的Web服务返回SoapFault,其中xml嵌入在PHP SoapFault未在细节子元素中传递属性,php,soap,soapfault,Php,Soap,Soapfault,我调用的Web服务返回SoapFault,其中xml嵌入在元素中-这是它在SoapUI中的外观: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body> <soapenv:Fault> <faultcode>soapenv:Server</faultcode> <f
元素中-这是它在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>`
是否有方法获取具有属性值的
交换错误对象?或者从detail
获取XML/string并解析它?错误消息是在WSDL中定义的,所以我想它的结构应该在客户端是已知的。php响应中不返回名称空间属性。它们仅用于定义响应对象的类型
如果您想轻松一天,可以使用WSDL-to-php生成器,比如项目。它将简化您构造请求的过程,简化您接收响应的过程,最终简化您对任何错误的处理。php响应中不会返回名称空间属性。它们仅用于定义响应对象的类型
如果您想轻松一天,可以使用WSDL-to-php生成器,比如项目。这会让你轻松构建请求,让你轻松接收响应,最后,它将简化您对任何错误的处理。不幸的是,我无法控制服务器在响应中忽略了什么-我只需要确定结果数据属性之一的值,以实现故障处理的特殊情况。不幸的是,我无法控制服务器在响应中忽略了什么-我只需要确定结果数据属性之一,用于实现故障处理的特殊情况。
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) ""
}