错误 WSDL:SOAP 错误:解析 WSDL:无法从 加载



我的问题很常见。我在stackoverflow上几乎读了所有关于这个问题的话题,但仍然不能做任何工作。我的代码是:

ini_set("soap.wsdl_cache", "0");
ini_set("soap.wsdl_cache_enabled", "0");
$proxy = new SoapClient('http://Myhostname/api/soap?wsdl');

我有这个错误:

Error WSDL: SOAP-ERROR: Parsing WSDL: Couldn't load from 
'http://Myhostname/api/soap?wsdl' : failed to load external entity 
"http://Myhostname/api/soap?wsdl"

在浏览器中URL

http://Myhostname/api/soap?wsdl

效果很好(返回XML响应)

我尝试这段代码看看PHP是否可以到达这个URL:

if (file_get_contents('http://Myhostname/api/soap?wsdl') === false) {
    echo "ERROR: file_get_contents <br/>";
}

它显示我的错误" error: file_get_contents",所以它不工作。在论坛上,我看到要解决这个问题,我必须将主机名添加到操作系统"hosts"文件中。于是我就这么做了。在hosts文件中,我添加了这一行127.0.0.1 Myhostname

但它仍然不起作用。然后我将代码中的URL改为

http://localhost/Myhostname/api/soap?wsdl

但是它也不工作

我试了另一个我在网上找到的解决方案。对一些人来说,这是有效的。在我的URL中,我更改了'?'字符到'。'。所以新URL变成了

http://localhost/Myhostname/api/soap.wsdl

,但它也不起作用。

我看到了官方的SOAP文档!并尝试以不同的方式创建SoapClient对象(使用'proxy_host'和'proxy_port'等选项)。但这并没有帮助我。

这是我尝试解决这个问题的第二天,但是我不能。我正在做实习,我没有很多经验,所以可能我没有尝试我找到正确的解决方案。也许有人能帮忙。我很乐意。

检查步骤

有一个ping到Myhostname。它会给出ip。使用ip代替,并查看

检查服务是否开启S0AP, php_openssl, openssl, curl

希望你能得到:)

我有类似的问题,我解决了它从。htaccess文件取消注释-MultiViews,后来从Apache配置的本地网站。

我的工作Apache配置是:

<Directory /var/www/>
        Options Indexes FollowSymLinks -MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
</Directory>

你也可以试试url:

http://localhost/Myhostname/api.php?type=soap&wsdl

如果使用社区版

代替$proxy = new SoapClient('http://Myhostname/api/soap?wsdl');
try $proxy = new SoapClient(WSDLFILENAME);
其中WSDLFILENAME是WSDL文件的操作系统名称。这还有一个额外的好处,即减少了客户机-服务器之间的往返。

我在本地主机上尝试了SOAP Web Services,它工作得很好。Magento无法响应请求的原因是它无法验证站点上启用的SSL Certificates

我的解决方法是允许自签名SSL verification:

$opts = [
    'http' =>
     [
         'header' => "Authorization: Bearer ".$token
        ],
'ssl' => [
    'allow_self_signed' => true , 
    'verify_peer' => false, 
    'verify_peer_name' => false]
];
$context = stream_context_create($opts);

我希望它有帮助。div;)

最新更新