我使用PHP SoapClient的使用他們的WSDL將請求發送到第三方。當我發送包含所有必需數據的請求時,我有工作功能。但是,如果缺少一個必填字段(或其他一些小錯誤),我在catch中獲得的所有內容都是帶有消息「內部服務器錯誤」的SoapFault。爲了說清楚,我對請求的服務器端進行了零控制。PHP SoapClient的返回null時,服務器會返回一個錯誤響應
使用了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 - > __ getLastResponse()獲得並看到預期的數據。然而,當錯誤返回時,如果我var_dump()它的響應是''或'NULL'。
展望了SoapUI接近我可以看到他們的反應頭:
狀態HTTP/1.1 500內部服務器錯誤
我的假設是,SoapClient的是看到這一點,只是立即拋出基於異常http錯誤。有沒有人有類似的經歷這樣的問題?如果是這樣,有沒有辦法告訴SoapClient返回完整的響應?
如果這是不可能的,沒有人知道,如果有我可以覆蓋保存原始響應文本拋出異常之前的功能?我之前有一個問題,那就是成功的XML響應被包裝在元數據中。通過重寫__doRequest()並手動清除元數據,我得到SoapClient來停止拋出異常。這對我當前的問題不起作用,因爲響應在那裏也是空白的。