我正在寻求解决这个问题的帮助,我希望有人能给我帮助。错误如下:
致命错误: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个月了,现在我正在进行一些测试,它显示了这条消息,我在它真的是空的和新的时候测试了它,并且工作正常。
因此,任何帮助将不胜感激。
谢谢你。
此错误十分之九是 Magento 告诉您它无法加载 WSDL 文件。 Magento 正在告诉您这一点。 不是您的本地客户端代码在抱怨。
Magento 使用 PHP
SoapServer
对象来创建其 SOAP API。 SoapServer
对象也需要访问 WSDL。 尝试从您的服务器命令行运行以下命令
curl http://example.com/index.php/api/?wsdl
如果我是对的,以上将会超时/失败。
由于 DNS 中的一些怪癖,服务器无法通过其域名访问自身的情况非常常见。 如果是这种情况,最快的解决方法是向服务器的主机文件添加一个条目。 (如果这些都没有意义,请与您的服务器管理员联系)
好吧,在我测试了所有对我有用的东西之后,我不知道为什么,但它有效,是在两台单独的机器上执行此操作。我尝试这样做是因为我在某处读到过它,然后我就这么做了,我的 Magento 和 Web 服务现在工作得很好。每当我尝试在本地执行此操作时,它都会发出相同的错误。
我希望这可以帮助将来的人,他们不必因为这个问题而把头撞在墙上。
谢谢大家的回答和评论。
艾伦·斯托姆(Alan Storm)在这里赚钱!
确保检查您的服务器主机文件,并且它包含域和 www.domain 的条目。如果您正在进行服务器重写,这一点尤其重要。