SOAPエラー:WSDLの解析:「」から読み込めませんでしたが、外部エンティティを読み込めませんでした


9

ここに画像の説明を入力してください

マジェントサイト用のAndroidアプリを開発しています。セッションIDを取得するには、SOAP APIをmagentoからandroidに渡す必要があります。

次のリンクに従って、magento管理パネルでSOAP Webユーザーとロールを作成しました。

https://www.yireo.com/tutorials/magebridge/administration/596-step-by-step-create-a-magento-api-user

Androidからmagentoに接続しようとすると、エラーが発生します。これは私たちが使用しているリンクです:

http://videomergerapp.com/index.php/api/v2_soap/


1
こんにちは-あなたが提供したリンクでエラーを見ることができません。それはメンテナンスのために言います。
Garet Claborn、2015

こんにちは。サイトがメンテナンス中です。更新された質問を確認してください。
2015

1
前の質問の手順を試しましたか?これは、サーバーのファイアウォールとNAT設定が原因で発生したのと同じエラーのようです。
Garet Claborn、2015

1
magentoがいくつかのリソースを取得しようとすると、それ自体に多くのSOAPリクエストを送信しますが、ローカルホストを使用する代わりに、外部IPとホスト名に到達しようとします。私の場合、ファイアウォールを開いてループバックし、ドメインと外部IPをホストファイルに追加する必要がありました
Garet Claborn

わかりました@GaretClaborn私はサーバーチームに確認します。
2015

回答:


5

SOAPサーバーは、着信要求の処理方法を理解するために、WSDLで初期化する必要があります(Magentoの場合は、指定されたURLから基本的にWSDLをロードします)。これはで発生し\Mage_Api_Model_Server_Adapter_Soap::_instantiateServer()ます:

$this->_soap = new Zend_Soap_Server(
    $this->getWsdlUrl(array("wsdl" => 1)),
    array('encoding' => $apiConfigCharset)
);

getWsdlUrl()あなたのMagentoのインスタンスのベースURLに基づいて、WSDL URLを構築します。つまり、MagentoストアがデプロイされているホストからMagentoストアにアクセスできない場合、SOAPサーバーは初期化中にWSDLをロードできません。その結果、Magento SOAP APIへのリクエストを実行しようとすると、このようなエラーが発生します。


そして、どうすればこれを修正できますか?
Alexandros

Magentoインスタンスホストを/etc/hostsサーバーに追加します。
Alex Paliarush 2016年

IP XXX.XXX.XXX.XXX www.example.comを追加しましたが、同じ結果が得られます。私は完全なドメインをcurpしてpingを実行しようとしましたが、それらは機能します:(
Alexandros

そのサーバー上でWSDLをロードできますか?
Alex Paliarush 2016年

1
よくわからない、どこかでデバッグしてみてください\Mage_Api_Model_Server_Adapter_Soap::_instantiateServer()
Alex Paliarush 2016年

2

同じ問題が発生していました。soap apiにアクセスする必要があるorocrmブリッジをインストールし、所定の手順に従ってsoapロールとユーザーを構成してから、接続を試みました:: パラメータが無効です!

ログを掘り下げた後、私はこのエラーに気づきました:

[2017-07-03 16:57:46] app.CRITICAL: MageCheck 
error: 0:  [message]           
SOAP-ERROR: Parsing WSDL: Couldn't load from 
'https://my.magento.store/index.php/api/v2_soap/index/?wsdl=1' : 
failed to load external entity 
"https://my.magento.store/index.php/api/v2_soap/index/?wsdl=1"

[request]
<?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:Magento" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
        <SOAP-ENV:Body>
            <ns1:login>
                <username xsi:type="xsd:string">orocrm</username>
                <apiKey xsi:type="xsd:string">***</apiKey>
            </ns1:login>
        </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

[response]
<?xml version="1.0" encoding="UTF-8"?>
<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  'https://my.magento.store/index.php/api/v2_soap/index/?wsdl=1' : 
failed to load external entity "https://my.magento.store/index.php/api/v2_soap/index/?wsdl=1"
            </faultstring>
        </SOAP-ENV:Fault>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

[code]              500   [] []

この問題が発生した理由を理解しました。実際、これはorocrmではなく、magentoに関係していました。それはファイアウォールの問題でした。実際、私はCRMサーバーがMagento APIを攻撃することを許可するルールを正しく追加しましたが、これはそれ自体に到達する必要があります!したがって、いくつかの悩みの後、自分(magentoサーバー)が独自のapi(一種の外部ルックアップ)に到達できるように、magentoサーバーのファイアウォールにルールを追加します...

とにかく、私はこれが誰かに数時間を節約することを願っています


1
答えに感謝、これらの石鹸関連の質問の解決策を得るのは非常に困難、私は痛みを知っています......
Magentoの赤ちゃん
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.