我的客户正在使用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
谢谢。
答案 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 Error
和Premature 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。