4

我的客户正在使用 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

谢谢你。

4

5 回答 5

3

由于 Magento 服务器与自身通信的问题,Magento 的 SOAP API 经常失败。

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

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

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

然后检查wsdl.xml文件。因为您是从 Web 服务器执行此操作,所以您可能会得到与从本地浏览器执行它时不同的结果。

于 2012-08-30T17:17:15.793 回答
0

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

于 2012-09-03T12:40:59.820 回答
0

“我对此有记忆。对我有用的是将主机名放在服务器上的 /etc/hosts 中,再加上 127.0.0.1 上的 www 别名但是,在这种情况下,服务器位于建筑物中而不是某些 ISP 位置,并且局域网上有 Windows 计算机。Windows 用户下载了大量的木马病毒色情内容,这些内容一直在向网络发送垃圾邮件,因此真正的问题出在网络上的 Windows 计算机上,而不是服务器或 Magento 上。在对 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\app\code\core\Mage\Adminhtml\Block\Api\Tab\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') {
于 2012-12-30T10:04:29.867 回答
0

就我而言,问题是启用了 Mod_Security 规则“PHP Easter Egg Access”。规则 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 复活节彩蛋访问规则的更多信息: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://< 到您的 magento 商店
的网址 >/index.php/api/v2_soap/index/wsdl/1/ xml 很好,但是如果您在服务器上运行上述 php 脚本,给出了错误。

于 2013-06-19T06:28:16.800 回答
0

这个错误最常出现在我身上,而忽略了 Magento SOAP url 中给出的域的 www。Url 必须与 Magento 配置中指定的基本 url 匹配。

于 2016-08-23T22:51:14.983 回答