Php SOAP-ERROR客户端:解析带有身份验证错误的WSDL

Php SOAP-ERROR客户端:解析带有身份验证错误的WSDL,php,ssl,wsdl,basic-authentication,soap-client,Php,Ssl,Wsdl,Basic Authentication,Soap Client,我尝试编写使用ASP.NETWebService的PHP客户端Soap,并使用身份验证进行保护。 我的php代码是: <?php ini_set("soap.wsdl_cache_enabled", "0"); try { $client = new SoapClient("https://www.webservicexxx.com:60443/service.asmx?WSDL", array('location' => 'https://webservicexxxco

我尝试编写使用ASP.NETWebService的PHP客户端Soap,并使用身份验证进行保护。 我的php代码是:

<?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;
}?>
知道我在ubuntu服务器上的php.ini上设置了启用此扩展:

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;       
} 
为什么我无法从第一个Web服务获得响应

为什么我无法从第一个Web服务获得响应

因为它无法加载外部实体

https://www.webservicexx.com:60443/service.asmx?WSDL
确保通过PHP的
SoapClient
可以访问WSDL,这样您就不会再有问题了

编辑:根据您的注释,WSDL URL需要HTTP身份验证。PHP的
SoapClient
只支持soap端点的这种身份验证,而不支持WSDL http请求。这就是为什么您看到它失败的错误。这与:

解决方案是请求您自己的WSDL文件,并将SoapClient指向它的副本。有关更多信息,请参阅链接问题。

我使用


Web服务
https://www.webservicexx.com:60443/service.asmx?WSDL
可通过任何导航器访问,它需要登录名和密码才能访问wsdl文件。我不知道我是否必须配置我的服务器,或者联系网络服务供应商??使用navigator,我想你是指你的互联网浏览器,对吗?如果它需要用户名和密码,则意味着它使用HTTP身份验证(基本身份验证)。请看哪一个可能是您现在遇到的下一个问题。在使用基本身份验证方法时,我仍然收到一个错误“加载外部实体失败”,我以前尝试过它。你认为我必须在ubuntu服务器上配置一些东西吗?或者我必须联系web服务的供应商?我尝试使用以下方法解决我的问题:和!我仍然有同样的问题,问题不在于web服务的供应商。问题是PHP的
SoapClient
无法加载具有基本身份验证的WSDL。只有先将WSDL保存到磁盘,然后通过
SoapClient
能够加载的WSDL URI提供它,问题才能得到解决。用户注释101503显示了一种方法。我可以想象还有其他方法可以做到这一点,但它们与前面概述的方法类似,因此我不知道您缺少哪些信息。只需将url复制并粘贴到浏览器中的wsdl,查看您是否看到了wsdl。通过这样做,您可以确保没有连接问题https://www.webservicexx.com:60443/service.asmx?WSDL可通过internet浏览器访问,并且需要身份验证。
https://www.webservicexx.com:60443/service.asmx?WSDL
$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);