由于“无法加载外部实体”,无法连接到Magento SOAP API v2

时间:2011-06-23 13:17:49

标签: php soap magento wsdl

我无法使用PHP连接到Magento SOAP API v2。发生的错误是:

PHP致命错误:未捕获的SoapFault异常:[WSDL] SOAP-ERROR:解析WSDL:无法从“http://www.example.com/index.php/api/v2_soap/index/wsdl/1/”加载:无法加载外部实体“http://www.example.com/index.php/api/v2_soap/index/wsdl/1/”< /强>

看起来,正在加载WSDL,但它不包含外部SOAP文件。


PHP连接代码:

$client = new SoapClient('http://www.example.com/api/v2_soap?wsdl=1');
$session = $client->login('username', 'password');

从v2_soap剪辑?wsdl = 1个文件:

<service name="MagentoService">
    <port name="Mage_Api_Model_Server_V2_HandlerPort" binding="typens:Mage_Api_Model_Server_V2_HandlerBinding">
        <soap:address location="http://www.example.com/index.php/api/v2_soap/index/"/>
    </port>
</service>

Magento版本为1.5.1.0

8 个答案:

答案 0 :(得分:7)

此问题是由服务器无法从本地计算机访问该文件引起的。因此可能的原因可能是DNS服务器或/ etc / hosts,但它实际上是一个.htaccess文件阻止除了我们的开发计算机之外的任何主机。这导致403 Forbidden错误,导致SOAP错误等等。

答案 1 :(得分:3)

我最近在面向公众的开发服务器上遇到过类似的问题。问题是我使用.htaccess文件来防止未经授权使用该网站,我忘了将服务器自己的IP地址添加到列表中。一旦我添加它,它就解决了问题。

确保您没有任何禁止访问内容的规则。

答案 2 :(得分:1)

确保php.ini启用SSL。 将其添加到您的文件中: 延长= php_openssl.dll

我遇到了这个问题,这就是修复它的原因。

答案 3 :(得分:1)

tl; dr:检查API用户名和API密钥。

不幸的是,SOAP给你一个通用的错误信息,这可能意味着许多事情。

一个可能的候选者是路由问题,即服务器尝试向自己发送请求但它失败,可能是因为它使用自己的公共IP地址来执行此操作,但由于原因,这不起作用。

要查看服务器上是否是这种情况,请登录(例如使用SSH)并尝试ping主机名。如果ping工作,路由几乎肯定不是问题。如果ping失败,请尝试将主机名添加到主机文件(通常为/ etc / hosts)中,IP地址为127.0.0.1(如果您使用的是IPv6,则为:: 1)。

另一个可能的原因,也就是我最近经历的一个原因,就是您没有提供正确的API用户名和API密钥。 SOAP - 至少,Magento实现它的方式 - 似乎没有“访问被拒绝”或“登录失败”响应。 因此,在浏览器中测试API函数毫无希望。 http://www.example.com/api/v2_soap?wsdl=1在浏览器中工作,因为WSDL没有受密码保护。但是端点本身是,所以http://www.example.com/index.php/api/v2_soap/index/ *会失败。

还有一种可能性,您最近是否更改了商店的域名,而没有刷新“webservices配置文件”缓存?

答案 4 :(得分:0)

您是否在共享主机帐户?您的提供商可能阻止访问该端口。

答案 5 :(得分:0)

此错误也可能与您的服务器设置使用的SSL密码有关。当前推荐的密码套件(请注意,这些密码需要及时更新)为ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS

显然,您应该按照建议的程序更新相关的操作系统及其SSL密码。

如果您的服务器正在运行Plesk控制面板,版本11以后,则会有一个特定的修复:

  1. 将'openssl'软件包升级到1.0及更高版本。

  2. 启用nginx:

    /usr/local/psa/admin/bin/nginxmng --enable

  3. 为nginx创建自定义域模板:

    mkdir -p /usr/local/psa/admin/conf/templates/custom/domain/

    cp /usr/local/psa/admin/conf/templates/default/domain/nginxDomainVirtualHost.php /usr/local/psa/admin/conf/templates/custom/domain

  4. 编辑刚刚复制的文件:

    vi /usr/local/psa/admin/conf/templates/custom/domain/nginxDomainVirtualHost.php

    查找行<?php if ($OPT['ssl']): ?>并在以下后立即插入以下内容:

    ssl_protocols TLSv1.1 TLSv1.2; ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;

    保存文件。

  5. 重新配置虚拟主机。

    /usr/local/psa/admin/bin/httpdmng --reconfigure-all

  6. 信用:Odin直接记录了此修复程序:http://kb.odin.com/en/120083

答案 6 :(得分:0)

转到 Admin Dash board&gt; “系统”&gt;配置&gt;网络&gt;搜索引擎优化&gt;使用Web服务器重写“将其设置为否”

对我而言,这是修复。

答案 7 :(得分:0)

我想贡献以下内容,具体取决于服务器和Magento配置,此简单的解决方案可以工作。是将index.php添加到URL

  

$ client =新   SoapClient('https://www.TU-domain.com/index.php/api/v2_soap/?wsdl');