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

Php 尝试使用Magento的API时出现Soap错误,php,magento,soap,wsdl,Php,Magento,Soap,Wsdl,我正在寻找帮助解决这个问题,我希望有人能给我帮助。错误如下: 致命错误:SOAP-error:分析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-error:分析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);
$options['location'] = http://example.com/index.php/api/?wsdl;
$options['uri'] = 'urn:Magento';
$this->_soap = new SoapClient(null, $options);
这就是它说的错误所在

我一直在谷歌、PHP论坛、StackOverflow和Magento本身中搜索,但我在任何地方都找不到解决方案

我所看到的是,WSDL从未像错误所说的那样被解析或加载,它的任何功能都没有

我试着这样连接:

$this->_soap = new SoapClient(http://example.com/index.php/api/?wsdl);
$options['location'] = http://example.com/index.php/api/?wsdl;
$options['uri'] = 'urn:Magento';
$this->_soap = new SoapClient(null, $options);
这样,它不会像其他方法一样发送任何错误,但是没有可使用的函数,比如在另一种情况下,它不会加载和解析WSDL

我有点沮丧,因为我已经开发了一个月,现在我做了一些测试,它显示了这个信息,我测试了它,当它真的是空的和新的,它工作得很好

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


谢谢。

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

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

curl http://example.com/index.php/api/?wsdl
如果我是对的,上述操作将超时/失败


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

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

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

curl http://example.com/index.php/api/?wsdl
如果我是对的,上述操作将超时/失败


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

在我测试了所有的东西之后,唯一对我有效的一个,我不知道为什么,但它有效,是在两台独立的机器上进行的。我试着这么做是因为我在某个地方读到了,我就这么做了,我的Magento和Web服务现在运行得非常好。每当我尝试在本地执行此操作时,它都会发送相同的错误

我希望这能帮助将来的人,他们不必因为这个问题而头痛


谢谢大家的回答和评论。

在我测试了所有的东西之后,唯一一个对我有效的,我不知道为什么,但它有效,是在两台不同的机器上进行的。我试着这么做是因为我在某个地方读到了,我就这么做了,我的Magento和Web服务现在运行得非常好。每当我尝试在本地执行此操作时,它都会发送相同的错误

我希望这能帮助将来的人,他们不必因为这个问题而头痛


谢谢大家的回答和评论。

艾伦·斯托姆在这里的钱是对的


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

Alan Storm在这里很赚钱



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

您是否尝试在浏览器中加载带有URL()的WSDL?它是有效的WSDL吗?你可以使用像
soapui
这样的工具来检查WSDL是否有效,是否定义了它的所有部分。是的,WSDL是有效的,这就是它的古怪之处。如果你能帮助我,那就太好了错误告诉你出了什么问题。如果需要调试HTTP请求,请考虑添加事件并跟踪发生的情况。您可以为此使用上下文选项和回调,SOAP客户端支持这一点。@您喜欢什么?我对SOAP和webservices这类东西很陌生。您是否尝试过在浏览器中加载带有URL()的WSDL?它是有效的WSDL吗?你可以使用像
soapui
这样的工具来检查WSDL是否有效,是否定义了它的所有部分。是的,WSDL是有效的,这就是它的古怪之处。如果你能帮助我,那就太好了错误告诉你出了什么问题。如果需要调试HTTP请求,请考虑添加事件并跟踪发生的情况。您可以为此使用上下文选项和回调,SOAP客户端支持这一点。@您喜欢什么?我对SOAP和webservicesHi很陌生,谢谢Alan,在这种情况下,测试是本地的,所以我认为DNS没有问题,我将尝试命令行中的代码并告诉您发生了什么。谢谢更新:我已经尝试了curl,它完美地展示了WSDL,你知道是什么导致了这一点吗?你好,我想知道你是否找到了一些解决方法。谢谢不,我不是在找。很明显,您的特定配置有问题,远程用户无法成功调试。好的,但是您知道我可以从哪里开始查找,或者我可以做什么吗@AlanStorm你认为这是因为它都是本地的,没有另一台机器@AlanStorm?嗨