2012-11-02 70 views
2

我試圖編寫我的PHP客戶端SOAP,它使用ASP.Net webservice,通過身份驗證進行安全保護。 我的PHP代碼:SOAP-ERROR客戶端:解析帶有身份驗證錯誤的WSDL

<?php 
ini_set("soap.wsdl_cache_enabled", "0"); 
try { 
    $client = new SoapClient("https://www.webservicexxx.com:60443/service.asmx?WSDL", array('location' => 'https://webservicexxxcom:60443/service.asmx', 
      'login' => "myLogin", 'password' => "myPAssword")); 
} catch (SoapFault $e) { 
    echo $e; 
}?> 

我收到此錯誤信息:

SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://www.webservicexxx.com:60443/service.asmx?WSDL' : failed to load external entity "https://www.webservicexx.com:60443/service.asmx?WSDL" in /var/www/webservice2/soap-client.php:5 Stack trace: #0 /var/www/webservice2/soap-client.php(5): SoapClient->SoapClient('https://www.web...', Array) #1 {main} 

知道我設置啓用我的php.ini這個擴展Ubuntu的服務器上:

extension = php_openssl.dll 
extension = php_soap.dll 
extension = php_curl.dll 

當我嘗試解析另一個PHP web服務在同一臺服務器上的驗證它的工作原理:

try { 
    $client = new SoapClient("https://xx.xx.xx.xx:443/webservice1/notificationManager.wsdl", array('location' => 'http://xx.xx.xx.xx./webservice1/soap-server.php', 
      'login' => "myLogin", 'password' => "myPass")); 
} catch (SoapFault $exception) { 
    echo $exception;  
} 

爲什麼我無法從第一個webservice獲得響應?

+0

只是複製和粘貼網址到瀏覽器中的WSDL來看看,如果你看到的WSDL。這樣做確實不是連接問題。 – slash28cu

+0

wsdl文件'https://www.webservicexx.com:60443/service.asmx?WSDL'可通過互聯網瀏覽器訪問,並且需要認證。 –

回答

0

爲什麼我無法從第一個webservice獲得響應?

,因爲它沒有加載外部實體

https://www.webservicexx.com:60443/service.asmx?WSDL 

確保WSDL是PHP的SoapClient訪問和訪問,並且你不應該有問題的任何更長的時間。

編輯:根據您的意見,WSDL URL需要HTTP認證。 PHP的SoapClient確實只支持soap端點的這種認證,但支持而不支持和WSDL http請求。這就是爲什麼你看到它失敗的錯誤。這涉及到:

的解決方案是要求WSDL文件自己並指向SoapClient的到它的一個副本。有關更多信息,請參閱鏈接的問題。

+0

可以通過任何導航器訪問Web服務'https://www.webservicexx.com:60443/service.asmx?WSDL',它需要登錄名和密碼才能訪問wsdl文件。我不知道我是否必須配置我的服務器,或聯繫Web服務的供應商? –

+0

隨着導航儀,我想你的意思是你的互聯網瀏覽器,對吧?如果它要求用戶名和密碼,這意味着它使用HTTP身份驗證(*基本身份驗證*)。請參閱[使用基本身份驗證的WSDL到PHP](http://stackoverflow.com/q/10219463/367456),這可能是您現在的下一個問題。 – hakre

+0

當我使用基本驗證方法時,我仍然收到一個錯誤「未能加載外部實體」,我之前嘗試過。你認爲我必須在Ubuntu服務器上配置一些東西?或者我必須聯繫網絡服務的供應商? –

1

我使用nusoap解決了這個問題。

$params = array(
    "param" => "value" 
); 

$soap_client = new nusoap_client($wsdl_url, true); 
$soap_client->setCredentials(USER_SERVICE, PASS_SERVICE, 'basic'); 
$soap_client->soap_defencoding = 'UTF-8'; //Fix encode erro, if you need 
$soap_return = $soap_client->call("method_name", $params);