Magento肥皂错误 - 标签定义第2行中数据的过早结束

时间:2012-08-30 14:39:03

标签: api magento soap wsdl

我的客户正在使用Unleashedsoftware.com连接到Magento商店。但它给出了这个错误。

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body>
        <SOAP-ENV:Fault>
            <faultcode>WSDL</faultcode>
            <faultstring>
                SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://www.domain.com/index.php/api/v2_soap/index/wsdl/1/' : Premature end of data in tag definitions line 2
            </faultstring>
        </SOAP-ENV:Fault>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

浏览时http://www.domain.com/index.php/api/v2_soap/index/ Firebug给了我“500内部服务错误”。

当我浏览http://www.domain.com/index.php/api/v2_soap/index/wsdl/1/时,我收到了有效的XML数据。

我检查了服务器日志文件,看起来像是:

[Thu Aug 30 22:22:25 2012] [warn] [client 92.92.92.92] mod_fcgid: stderr:  in /home/doaminuser/public_html/lib/Zend/Soap/Server.php on line 762

我一直在寻找几天,今天我试图将整个网站复制到另一个测试服务器,它似乎正在工作!所以这似乎是一个服务器问题。

拜托,任何人都知道这可能是什么问题?

有没有更好的方法来调试此问题,任何示例代码或调试提示。

Magento版本是1.6.2

谢谢。

5 个答案:

答案 0 :(得分:2)

很多时候Magento的SOAP API由于Magento服务器与自身通信的问题而失败。

也就是说,PHP的SOAP实现要求SOAP服务器本身通过http获取WSDL文件,而本地网络配置问题阻碍了Magento获取自己的WSDL。

您可以通过SSH连接到Magento服务器并运行以下命令来调试它

curl -l 'http://www.example.com/index.php/api/v2_soap/index/wsdl/1/' > /tmp/wsdl.xml

然后检查wsdl.xml文件。由于您是从网络服务器执行此操作,因此您可能会获得与从本地浏览器执行此操作时不同的结果。

答案 1 :(得分:0)

调用URL时遇到了类似的问题 http://www.store.com/index.php/api/v2_soap/?wsdl
一段时间后,我在apache错误日志中收到消息500 - Internal Server ErrorPremature end of script headers消息 经过一整天的研究,我发现,Apache模块的Timeout - 指令(在Linux环境中的httpd.conf中配置)设置为“20”,导致服务器发送500错误后20秒问题是,在我的情况下,Magento系统需要更长的时间来“爬行”所有wsdl.xml文件,以便构建WSDL输出(如果您使用的是Magento SOAPv2)。 也许你应该查看你的超时指令......希望有所帮助。

答案 2 :(得分:0)

  

“我对此有记忆。对我有用的是放置主机名   在服务器上的/ etc / hosts中加上127.0.0.1上的www别名但是,   在这种情况下,服务器在建筑物而不是在某些建筑物中   ISP位置和局域网上有Windows计算机。 Windows用户了   下载了大量的木马病毒色情内容   整个时间都在向网络发送垃圾邮件,所以真正的问题在于   网络上的Windows计算机,而不是服务器或Magento。   在fdking PC之后,问题就解决了。“

谢谢你我在magento 1.6和Windows Server 2008上一直苦苦挣扎2天,将这一行添加到主机文件(C:\Windows\System32\drivers\etc)为我解决了这个问题:

127.0.0.1   www.Domain.com

还记得要修复你的magento soap(角色),因为除非你修复这个文件,否则角色资源不会保存在1.6中:

  

MagentoRoot \应用\代码\核心\法师\ Adminhtml \块\阿比\标签\ Rolesedit.php

替换这个:

if (array_key_exists(strtolower($item->getResource_id()), $resources) && $item->getPermission() == 'allow') {

用这个:

if (array_key_exists(strtolower($item->getResource_id()), $resources) && $item->getApiPermission() == 'allow') {

答案 3 :(得分:0)

就我而言,问题是Mod_Security规则&#34; PHP Easter Egg Access&#34;已启用。 规则ID:380800

一旦禁用,api访问就可以了。

指标位于Apache日志文件中:

Jun 19 09:15:52 httpd[1024961]: [error] [client xyz.xyz.xyz.xyz] ModSecurity: [file "/usr/local/apache/conf/modsec/99_asl_jitp.conf"] [line "116"] [id "380800"] [rev "1"] [msg "Atomicorp.com WAF Rules - Virtual Just In Time Patch: PHP Easter Egg Access"] [data "phpe9568f35-d428-11d2-a769-00aa001acf42"] [severity "CRITICAL"] Access denied with code 403 (phase 2). Pattern match "php(?:e9568f3[56]-d428-11d2-a769-00aa001acf42|b8b5f2a0-3c92-11d3-a3a9-4c7b08c10000)" at REQUEST_URI. [hostname "www.yoursever.com"]...

Magento版本:1.7.0.2
PHP版本:5.3.26

有关PHP Easter Egg Access规则的更多信息: http://www.atomicorp.com/forums/viewtopic.php?f=3&t=5057
http://www.0php.com/php_easter_egg.php

对于那些想要快速测试脚本来复制问题的人(在尝试说服您的托管服务提供商说他们的问题是最终的时候很有用),请使用:

<?php
   $server = new SoapServer("http://<url to your magento shop>/index.php/api/v2_soap/index/wsdl/1/");
?>

这是/lib/Zend/Soap/Server.php中触发错误的行。

在我的情况下,如果你浏览过:
HTTP://&LT;你的magento商店的网址&gt; /index.php/api/v2_soap/index/wsdl/1/
xml很好,但是如果你在服务器上运行上面的php脚本,则会给出错误。

答案 4 :(得分:0)

这个错误最常出现在我身上,同时省略了Magento SOAP url中给出的域名。 Url必须匹配Magento配置中指定的基本URL。