尝试使用 Magento 的 API 时出现 Soap 错误

问题描述 投票:0回答:3

我正在寻求解决这个问题的帮助,我希望有人能给我帮助。错误如下:

致命错误:SOAP-错误:解析 WSDL:无法从“http://example.com/index.php/api/?wsdl”加载:无法加载外部实体“http://example.com/index” .php/api/?wsdl”中 /var/www/presentacion/app/code/local/Pengo/Extension/Model/Something.php 第 28 行

我用来连接它的代码是这样的:

$this->_soap = new SoapClient(http://example.com/index.php/api/?wsdl);

并且有地方说是错误。

我一直在 Google、PHP 论坛、StackOverflow 和 Magento 本身中搜索,但我没有在任何地方找到解决方案。

我所看到的是,WSDL 永远不会像错误所述那样被解析或加载,并且没有任何功能。

我尝试像这样连接:

$options['location'] = http://example.com/index.php/api/?wsdl;
$options['uri'] = 'urn:Magento';
$this->_soap = new SoapClient(null, $options);

像这样,它不会像其他错误一样调度任何错误,但没有可以使用的函数,就像在其他情况下它不会加载和解析 WSDL。

我有点沮丧,因为我已经开发了这个大约1个月了,现在我正在进行一些测试,它显示了这条消息,我在它真的是空的和新的时候测试了它,并且工作正常。

因此,任何帮助将不胜感激。

谢谢你。

php magento soap wsdl magento-soap-api
3个回答
12
投票

此错误十分之九是 Magento 告诉您它无法加载 WSDL 文件。 Magento 正在告诉您这一点。 不是您的本地客户端代码在抱怨。

Magento 使用 PHP

SoapServer
对象来创建其 SOAP API。
SoapServer
对象也需要访问 WSDL。 尝试从您的服务器命令行运行以下命令

curl http://example.com/index.php/api/?wsdl

如果我是对的,以上将会超时/失败。

由于 DNS 中的一些怪癖,服务器无法通过其域名访问自身的情况非常常见。 如果是这种情况,最快的解决方法是向服务器的主机文件添加一个条目。 (如果这些都没有意义,请与您的服务器管理员联系)


0
投票

好吧,在我测试了所有对我有用的东西之后,我不知道为什么,但它有效,是在两台单独的机器上执行此操作。我尝试这样做是因为我在某处读到过它,然后我就这么做了,我的 Magento 和 Web 服务现在工作得很好。每当我尝试在本地执行此操作时,它都会发出相同的错误。

我希望这可以帮助将来的人,他们不必因为这个问题而把头撞在墙上。

谢谢大家的回答和评论。


0
投票

艾伦·斯托姆(Alan Storm)在这里赚钱!

确保检查您的服务器主机文件,并且它包含域和 www.domain 的条目。如果您正在进行服务器重写,这一点尤其重要。

© www.soinside.com 2019 - 2024. All rights reserved.