「SOAP-ERROR:Parsing WSDL:could n't find <definitions>」が表示されるのはなぜですか?


8

テストサーバー上のMagentoと通信するために、1つのサーバー上にSOAPクライアントをセットアップしようとしています。どちらのサーバーにも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。

回答:


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特に外部IPの代わりにlocalhostを実行しようとする場合は、ループバック接続が許可されることを確認してください。ほとんどの場合、外部IPアドレスを使用する必要があります。

それでおしまい; ファイルを編集したら、/etc/hosts次の1行を追加すると、すべてが正常に機能しました。

誰かがより明確な洞察または一般的にはより良い答えを持っている場合-投稿してください、それはおそらくこの答えで受け入れられるでしょう。


これは私がそれを修正するのに役立ちませんでした。他に何か理由があると思いますか?
Usman Yousaf 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.