我无法使用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
。
答案 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以后,则会有一个特定的修复:
将'openssl'软件包升级到1.0及更高版本。
启用nginx:
/usr/local/psa/admin/bin/nginxmng --enable
为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
编辑刚刚复制的文件:
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;
保存文件。
重新配置虚拟主机。
/usr/local/psa/admin/bin/httpdmng --reconfigure-all
信用: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');