为什么会出现“ SOAP错误:解析WSDL:找不到<definitions>”?


8

我正在尝试在一台服务器上设置SOAP客户端,以便与测试服务器上的Magento通信。两台服务器均已安装,配置并显示了PHP的SOAP扩展phpinfo()

尝试使用v2和v1 API以及我能想到的所有其他功能关闭缓存。无论如何,我总是遇到同样的问题。

要么:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body>
        <SOAP-ENV:Fault>
            <faultcode>SOAP-ENV:Server</faultcode>
                <faultstring>
                    Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: 
                    Couldn't find <definitions> in 'http://myserver.com/api/v2_soap?wsdl=1' 
                    in dispatch.php:39 

                    Stack trace: #0 dispatch.php(39): 
                    SoapClient->SoapClient('http://myserver.com/...', Array) #1 {main} thrown
                </faultstring>
        </SOAP-ENV:Fault>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

有时是另一个错误 SOAP doesn't allow DTD....

我现在只使用这里的普通Magento示例代码,而不是运行任何重要的代码,直到我弄清楚这是怎么回事。

如果file_get_contents对服务URL进行操作,则会得到:

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns:typens="urn:Magento" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/" name="Magento" targetNamespace="urn:Magento">
    <types>
    <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:Magento">
        <import namespace="http://schemas.xmlsoap.org/soap/encoding/" schemaLocation="http://schemas.xmlsoap.org/soap/encoding/"/>
        <complexType name="associativeEntity">
        <all>
            <element name="key" type="xsd:string"/>
            <element name="value" type="xsd:string"/>
        </all>
        </complexType>
        .
        .
        .
</definitions>

因此,似乎它应该没有麻烦解析此.. idk。

Answers:


17

显然,我很容易遇到Magento的陷阱,所以我发布了答案,以防其他人搜索此特定错误。基本上,该错误来自我试图通过SOAP API调用的Magento安装。

最初,我认为该错误是由于客户端无法找到此定义结果而产生的,但是实际情况如下。

  • 充当SOAP服务器的Magento安装对其自身进行了一些SOAP客户端调用。
  • 这些调用查找与您在客户端脚本中访问的域相同的域,但源于托管该域的服务器并环回至所述服务器。
  • 因此,您需要检查主机文件,通常是在Linux发行版的/ etc / hosts上并尝试附加Your.IP.Address.Here Your.Magento.Domain(i,e 70.0.0.2 magentohost.com
  • 确保iptables允许环回连接,尤其是在您尝试运行localhost而不是外部IP的情况下;但是您很可能需要使用外部IP地址。

而已; 一旦我编辑了文件:/etc/hosts并添加了这一行,一切就可以正常工作。

如果有人有更清晰的见识或总体上较好的答案-请随时发布,并且很可能会被该答案接受。


这没有帮助我解决它。.还有其他猜测可能是什么原因?
Usman Yousaf
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.