Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Api Magento Soap错误-标记定义行2中的数据过早结束_Api_Magento_Soap_Wsdl - Fatal编程技术网

Api Magento Soap错误-标记定义行2中的数据过早结束

Api Magento Soap错误-标记定义行2中的数据过早结束,api,magento,soap,wsdl,Api,Magento,Soap,Wsdl,我的客户正在使用unreleasedsoftware.com连接到Magento商店。但它给出了这个错误 <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <SOAP-ENV:Fault> <faultcode>WSDL</faultcode>

我的客户正在使用unreleasedsoftware.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>
我已经搜索了几天了,今天我尝试将整个站点复制到另一个测试服务器上,它似乎正在工作!所以这似乎是一个服务器问题

拜托,有人知道会有什么问题吗

有没有更好的方法来调试这个问题,有没有示例代码或调试提示

Magento版本是1.6.2


谢谢。

由于您的Magento服务器自身存在通信问题,Magento的SOAP API经常出现故障

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

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

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

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

我在调用URL时遇到类似问题
http://www.store.com/index.php/api/v2_soap/?wsdl

过了一段时间,我在apache错误日志中收到了消息
500-内部服务器错误
脚本头过早结束
消息。
经过一整天的研究,我发现Apache模块(在Linux环境下的httpd.conf中配置)的
Timeout
-指令被设置为“20”,这导致服务器在20秒后发送500个错误。问题是,在我的例子中,Magento系统需要更长的时间来“爬网”所有wsdl.xml文件以构建wsdl输出(如果您使用的是Magento SOAPv2)。 也许你应该检查一下你的超时指令,希望对你有所帮助


“我对此记忆犹新。对我来说,成功的是把主机名 但是,在服务器上的/etc/hosts中加上127.0.0.1上的www别名, 在本例中,服务器位于建筑物中,而不是某些建筑物中 ISPPlace和局域网上都有Windows计算机,Windows用户也有 下载了大量的特洛伊木马病毒色情物品,花费了 一直在网络上发垃圾邮件,所以真正的问题是 网络上的Windows计算机,不带服务器或Magento。 在设计了个人电脑后,问题就解决了。”

谢谢,我在magento 1.6和Windows Server 2008上为此苦苦挣扎了两天,将这一行添加到主机文件(
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') {

在我的例子中,问题是启用了Mod_安全规则“PHP复活节彩蛋访问”。 规则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复活节彩蛋访问规则的更多信息:

对于那些希望使用快速测试脚本来复制问题的人(在试图说服您的托管提供商这是他们自己的问题时很有用),请使用:


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

在我的情况下,如果您浏览到:
http:///index.php/api/v2\u soap/index/wsdl/1/

xml很好,但如果您在服务器上运行上述php脚本,则会出现错误。

我在忽略Magento SOAP url中给出的域的www时,最常出现此错误。Url必须与Magento配置中指定的基本Url匹配。

我对此有记忆。对我来说,有效的方法是将主机名放在服务器上的/etc/hosts中,再加上127.0.0.1上的www别名。然而,在这种情况下,服务器位于大楼中,而不是某个ISP位置,局域网上有Windows计算机。Windows用户下载了大量特洛伊木马病毒色情内容,这些内容一直在网络上进行垃圾邮件处理,因此真正的问题在于网络上的Windows计算机,而不是服务器或Magento。在设计了电脑后,问题就解决了。谢谢艾伦。该站点托管在共享服务器上,未启用shell访问。正在等待主机为我启用它。一旦我尝试了这些步骤,我将立即更新您。别想那件事@ewebs如果你知道PHP的curl函数,你也可以通过上传一个带有等效curl命令的PHP文件来实现这一点。@AlanStorm我不喜欢执行建议的命令。我尝试使用shell_exec,它已被禁用。我打了个类似的东西。似乎没有完全检索xml。请查看源代码。下面是我使用的代码:$ch=curl_init();curl_setopt($ch,CURLOPT_URL,”);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);$output=curl_exec($ch);curl_close($ch);print('.print_r($output,true)。');这个答案帮助我意识到我的网站处于维护模式。因为我的IP被列入了白名单,我甚至没有意识到这一点,这是API失败的主要原因。谢谢!我正试图这样做,但我的是一个共享主机。权限有限!所以我正在等待他们更新httpd.conf。有什么方法可以更新吗对于我们的本地环境,有什么想法吗?谢谢你的指导。你能解决这个问题吗?正如@AlanStorm指出的,“这可能是某种服务器配置问题“。所以我不得不转移到一个专用服务器上。“curl”命令表明,请求未完成。所以我假设服务器无法处理这样的请求。我知道这不是一个解决办法。如果您发现任何更新,请发布。
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"]...
<?php
   $server = new SoapServer("http://<url to your magento shop>/index.php/api/v2_soap/index/wsdl/1/");
?>