我們有以下情形:PHP皁 - 邏輯,服務器,和其他很多問題
- 設置Web服務 - WSDL和所有的,應該是監聽客戶端發送數據,接收它,做一些事情,如果一切正常,則發送回覆爲'OK';如果事件發生,'假'
- 客戶端運行腳本,該腳本生成肥皂/ xml請求位,創建肥皂客戶端併發送請求到wsdl。
- 客戶端獲取的結果表明數據未由Web服務處理 - 爲false。而Web服務根本沒有收到任何數據。
我沒有訪問Web服務 - 這是別人的。生成的請求正文(整體等)正在生成正確 - 當我通過soapUI發送它的工作,但不是通過我的PHP肥皂客戶端。
我嘗試使用內置的肥皂與SoapClient
,__doRequest
,__call
(一種嘗試一切的),但沒有任何反應 - 仍然得到'false'
結果。我嘗試重寫NuSoap以使用Soap 1.2,但仍然只有'false'
的結果返回true。
所以,我想知道是否有人能回答我以下的問題:
在服務器上,我需要一些專門安裝才能正常使用SOAP 1.2工作?
當客戶端必須將數據發送到Web服務的函數時,我是否使用__doRequest或__call?或者是其他東西?
根據我的php.ini服務器的header_accept值沒有使用soap 1.2所需的應用程序/ soap + xml - 這可能是問題,如果是的話 - 回到問題1,或者如何可以我將該類型添加到header_accept?
編輯:
$client = new SoapClient(
"the_wsdl_url_correct_for_sure.wsdl",
array(
'soap_version' => SOAP_1_2,
'trace' => 1,
)
);
$result = $client->__doRequest(
$the_var_i_use_to_store_the_soap_xml_thingie_that_works_through_soapUI_so_it_is_correct, $location,
$the_function_I_try_to_call,
"1.2"
);
對於$location
我的動作(我想打電話,從第一個參數發送數據的功能)的命名空間。而對於動作/功能我試着用行動只是名字,因爲它在命名空間中的已定義,當我試圖使用帶有「full_namespace /動作」
我應該使用__doRequest
或__call
的完整路徑將數據發送到WSDL?
EDIT2:
我發送的請求是:
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:soapenc="http://www.w3.org/2003/05/soap-encoding" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<env:Header/>
<env:Body>
<ns2:FunctionName xmlns:ns2="namespace_of_the_service">
<arg0>
<data1>Some data</data1>
</arg0>
</ns2:FunctionName>
</env:Body>
</env:Envelope>
更多從這個問題可以在我以前的帖子閱讀: PHP Soap Client - sending the wrong headers "soapenv:VersionMismatch"
可以有很多原因。我可以給出的最佳建議:獲取最新的PHP版本。對於初學者,使用內置的SoapClient類,它支持SOAP 1.2。你很可能提供了錯誤的論點。您是否處於WSDL模式?哪裏是你的代碼(棒SoapClient的一個示例代碼在這裏,如果你問我)? – hakre
不幸的是,我沒有訪問服務器 - 無法自行重新配置它:/而且我確實使用了內置的Soap,但它一直給我提供關於Soap的不匹配版本的錯誤,從中我得出結論:根本不支持1.2 ...或者一路上正在死亡。我將在我的主帖中添加我的soapClient代碼和請求。 – Iv3
如果您收到具體的錯誤消息,請將其添加到您的問題中。還啓用SoapClient類的調試模式,並逐字查看SOAP請求和響應。您可能還想將這兩個添加到您的問題中。 – hakre