web-dev-qa-db-ja.com

「外部エンティティのロードに失敗した」ため、Magentoに接続できませんSOAP API v2

PHPを使用してMagento SOAP APIv2に接続できません。発生するエラーは次のとおりです。

PHP致命的なエラー:キャッチされないSoapFault例外:[WSDL] SOAP-エラー:WSDLの解析: ' http://www.example.com/index.php/api/v2_soap/index/wsdl/1 / ':外部エンティティの読み込みに失敗しました " http://www.example.com/index.php/api/v2_soap/index/wsdl/1/ "

どうやら、WSDLは読み込まれていますが、含まれている外部のSOAPファイルではありません。


PHP接続コード:

$client = new SoapClient('http://www.example.com/api/v2_soap?wsdl=1');
$session = $client->login('username', 'password');

V2_soap?wsdl = 1ファイルから切り取る:

<service name="MagentoService">
    <port name="Mage_Api_Model_Server_V2_HandlerPort" binding="typens:Mage_Api_Model_Server_V2_HandlerBinding">
        <soap:address location="http://www.example.com/index.php/api/v2_soap/index/"/>
    </port>
</service>

Magentoのバージョンは1.5.1.0

20
user228395

この問題は、サーバーがローカルマシンからファイルにアクセスできないことが原因で発生します。したがって、考えられる原因はDNSサーバーまたは/ etc/hostsである可能性がありますが、実際には、開発用コンピューター以外のホストをブロックする.htaccessファイルでした。これにより、403 Forbiddenエラーが発生し、SOAPエラーなどが発生しました。

7
user228395

最近、一般向けの開発サーバーで同様の問題が発生しました。問題は、サイトの不正使用を防止するために.htaccessファイルを使用していて、サーバーの独自のIPアドレスをリストに追加するのを忘れていたことです。追加すると問題は解決しました。

コンテンツへのアクセスを禁止するルールがないことを確認してください。

3

Php.iniでSSLが有効になっていることを確認してください。これをファイルに追加します:extension = php_openssl.dll

私はこの問題を抱えていました、そしてそれはそれを修正したものでした。

1
Kelly L.

tl; dr:APIユーザー名とAPIキーを確認します。

残念ながら、SOAPは、多くのことを意味する可能性のある一般的なエラーメッセージを表示します。

考えられる候補の1つはルーティングの問題です。つまり、サーバーは自身にリクエストを送信しようとしますが、失敗します。おそらく、サーバーが独自のパブリックIPアドレスを使用しており、理由によりこれが機能しないためです。

これがサーバーに当てはまるかどうかを確認するには、サーバーにログインし(SSHなどで)、ホスト名にpingを実行してみます。 pingが機能する場合、ルーティングはほぼ確実に問題ではありません。 pingが失敗した場合は、ホスト名をホストファイル(通常は/ etc/hosts)にIPアドレス127.0.0.1(IPv6の場合は:: 1)で追加してみてください。

しかし別の考えられる理由、そして私が最近経験した理由は、単に正しいAPIユーザー名とAPIキーを提供していないことです。 SOAP-少なくとも、Magentoの実装方法-「アクセスが拒否されました」または「ログインに失敗しました」という応答がないようです。このため、それはブラウザで絶望的なテストAPI関数ですhttp://www.example.com/api/v2_soap?wsdl=1 ブラウザでWSDLとして機能しますはパスワードで保護されていませんが、エンドポイント自体は保護されているため、 http://www.example.com/index.php/api/v2_soap/index/ *は失敗します。

もう1つの可能性として、最近ストアのドメイン名を変更し、「Webサービス構成ファイル」キャッシュをフラッシュしませんでしたか?

1
Doug McLean

共有ホスティングアカウントを使用していますか?プロバイダーがポートへのアクセスをブロックしている可能性があります。

0
Jeff Thomas

このエラーは、サーバーが使用するように設定されているSSL暗号に関連している可能性もあります。現在推奨されている暗号スイート(これらは時間内に更新する必要があることに注意してください)は_ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS_です。

明らかに、関連するOSとSSL暗号を更新するには、推奨される手順に従う必要があります。


サーバーがPleskコントロールパネルバージョン11以降を実行している場合、特定の修正があります。

  1. 「openssl」パッケージをバージョン1.0以降にアップグレードします。

  2. Nginxを有効にします。

    _/usr/local/psa/admin/bin/nginxmng --enable_

  3. Nginxのカスタムドメインテンプレートを作成します。

    _mkdir -p /usr/local/psa/admin/conf/templates/custom/domain/_

    _cp /usr/local/psa/admin/conf/templates/default/domain/nginxDomainVirtualHost.php /usr/local/psa/admin/conf/templates/custom/domain_

  4. コピーしたファイルを編集します。

    _vi /usr/local/psa/admin/conf/templates/custom/domain/nginxDomainVirtualHost.php_

    <?php if ($OPT['ssl']): ?>を探し、直後に次の行を挿入します。

    _ssl_protocols TLSv1.1 TLSv1.2; ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;_

    ファイルを保存します。

  5. 仮想ホストを再構成します。

    _/usr/local/psa/admin/bin/httpdmng --reconfigure-all_


クレジット:この修正はOdinによって直接文書化されています: http://kb.odin.com/en/12008

0
Jongosi

「管理ダッシュボード」>「システム」>「構成」>「Web」>「検索エンジン最適化」>「Webサーバーリライトを使用して「いいえに設定」」に移動します

私にとっては修正でした。

0
Devendra Gupta

サーバーとMagentoの構成によっては、このシンプルなソリューションが機能することもあります。 index.phpをURLに追加することです

$ client = new SoapClient( ' https://www.TU-domain.com/index.php/api/v2_soap/?wsdl ');

0
Gregory Rios