2016-09-25 65 views
1

我對PHP不太瞭解,但大約一個月前,我編寫了一個腳本來從SOAP Web服務中將事件數據顯示在數字標牌上。它已經工作了幾個星期,但最近爆發了。PHP:SoapClient不再按預期工作

下面是相關的PHP代碼...

$WSDL_URL = 'http://anprodca.active.com/uofg/servlet/ActiveNetWS?wsdl'; 

$params = array(
    "ws_system_user" => $credentials, 
    "resource_ids" => array(intval($facilityID)), 
    "dates" => $date, 
    "include_linked_resources" => 0, 
    "returning_render_customer_id" => 0 
); 

$soap = new SoapClient($WSDL_URL); 
$response = $soap->wsGetResourceBookings($params); 

...與含有userNamepassword,和keepAlive值在陣列$credentials

當我得到它時,我收到以下異常消息:looks like we got no XML document。我已經在stackoverflow上看到類似的帖子,關於由於麻煩的隱形字符造成的格式錯誤的響應問題,但這不是這裏的情況。來自__getLastResponse()的響應似乎是來自某種重定向的HTML?


我能仍然得到使用SOAPUI期望的結果。下面是它從WSDL URL產生的請求一起傳遞的XML的例子:

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://ANWebServices/"> 
    <SOAP-ENV:Body> 
     <ns1:wsGetResourceBookings> 
      <ws_system_user> 
       <keepAlive>false</keepAlive> 
       <password>password</password> 
       <userName>username</userName> 
      </ws_system_user> 
      <resource_ids> 
       <entries>27</entries> 
      </resource_ids> 
      <dates>09/25/2016</dates> 
      <include_linked_resources>0</include_linked_resources> 
      <returning_render_customer_id>0</returning_render_customer_id> 
     </ns1:wsGetResourceBookings> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

使用跟蹤選項和__getLastRequest()與SoapClient的,我得到了下面的XML,當經過這也工作得很好SOAPUI ...

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:anw="http://ANWebServices/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://ANWebServices/"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <anw:wsGetResourceBookings> 
     <ws_system_user> 
       <keepAlive>false</keepAlive> 
      <password>password</password> 
      <userName>username</userName> 
     </ws_system_user> 
     <resource_ids> 
      <entries>27</entries> 
     </resource_ids> 
     <dates>09/25/2016</dates> 
     <include_linked_resources>0</include_linked_resources> 
     <returning_render_customer_id>0</returning_render_customer_id> 
     </anw:wsGetResourceBookings> 
    </soapenv:Body> 
</soapenv:Envelope> 

我認爲WSDL文件已經改變,但沒有改變。 沒有任何服務器端發生過變化,它仍然使用相同配置的PHP版本,等等。我嘗試禁用WSDL緩存以及NuSoap庫無濟於事。我似乎無法弄清楚爲什麼我不能使用SoapClient獲得正確的響應。任何有識之士將不勝感激,謝謝!

+0

*「從__getLastResponse()的反應似乎是HTML從某種重定向」 * ...如果服務是給你一個突然的重定向我不知道你期望這裏的人幫助你。與運行它的人交談。也許他們已經限制了你稱之爲的IP地址,也許他們已經完全做了其他事情。 –

+0

「如果服務突然給你一個重定向,我不確定你期望這裏的人能幫助你」......我想知道爲什麼我可以使用SOAPUI得到有效的XML響應,但不能SoapClient/PHP 「也許他們已經限制了你所稱的IP地址......」然後它不適用於SOAPUI – jkwill87

+0

SOAPUI是一個客戶端應用程序 - 如果他們已經對你的服務器的IP地址(不清楚你是否從其他地方嘗試了SoapClient),它對它沒有任何影響。 –

回答

1

我能夠自己解決這個問題 - 只是發佈這個以防萬一有人遇到類似的問題。

他們的WSDL文件指定了錯誤的端點URL。我只需要使用__setLocation()明確指定它。現在我的PHP看起來是這樣的:

... 
$soap = new SoapClient($WSDL_URL); 
$soap->__setLocation($WSDL_URL); 
$response = $soap->wsGetResourceBookings($params); 
... 

1號線修復

+0

您可以將其標記爲已回答。 – Rao