我正在使用PHP SoapClient使用他们的WSDL向第三方发送请求。当我发送包含所有必需数据的请求时,我有工作功能。但是,如果缺少必填字段(或其他一些小错误),我收回的是一个SoapFault,其中包含“内部服务器错误”消息。为了说清楚,我无法控制请求的服务器端。
使用具有相同请求的SoapUI,我得到以下响应。
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<s:Fault>
<faultcode>s:Client</faultcode>
<faultstring xml:lang="en-US">Request validation failed.</faultstring>
<detail>
<RequestValidationFault xmlns="http://schemas.datacontract.org/2004/07/OCCM.Phoenix.EWF.Shared.Modules.ERM.Common.BusinessEntities.Exceptions" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Domain>Request validation</Domain>
<Message>Request validation failed.</Message>
<ValidationResult xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<a:string>Patient: Last name is required.</a:string>
</ValidationResult>
</RequestValidationFault>
</detail>
</s:Fault>
</s:Body>
</s:Envelope>
这正是我需要能够告诉用户我的系统的用户进入并输入/修复所需的数据。在这种情况下,患者姓氏。
我启用了例外和跟踪,当成功请求时,我可以使用$ obj-&gt; __ getLastResponse()并查看预期的数据。但是,当出现错误时,响应是&#39;或者&#39; NULL&#39;如果我var_dump()它。
仔细观察SoapUI我可以看到响应有标题:
我的假设是SoapClient看到了这一点,并立即根据http错误抛出异常。有没有人对这样的问题有类似的经历?如果是这样,有没有办法告诉SoapClient返回完整的响应?
如果不可能,有人知道是否有函数我可以覆盖以在抛出异常之前保存原始响应文本?我之前遇到过一个问题,即成功的XML响应包含在元数据中。通过重写__doRequest()并手动剥离元数据,我得到了SoapClient来停止抛出异常。这对我当前的问题不起作用,因为那里的反应也是空白。
答案 0 :(得分:0)
我无法使用SoapClient找到解决方案。当出现错误时,我最终使用curl重新发送请求。然后我手动解析实际的响应。