Невозможно подключиться к Magento SOAP API v2 из-за «не удалось загрузить внешнюю сущность» - PullRequest
19 голосов
/ 23 июня 2011

Я не могу подключиться к Magento SOAP API v2 с помощью PHP. Возникающая ошибка:

Неустранимая PHP-ошибка: Uncaught Исключение SoapFault: [WSDL] SOAP-ERROR: Синтаксический анализ 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');

Snip from 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.

Ответы [ 8 ]

7 голосов
/ 28 июня 2011

Эта проблема вызвана тем, что сервер не может получить доступ к файлу с локального компьютера. Таким образом, возможной причиной мог быть DNS-сервер или / etc / hosts, но на самом деле это был файл .htaccess, блокирующий все хосты, кроме наших компьютеров разработки. Это привело к ошибке 403 Forbidden, которая привела к ошибке SOAP и т. Д.

3 голосов
/ 02 июля 2011

Недавно я столкнулся с подобной проблемой на общедоступном сервере разработки. Проблема заключалась в том, что я использовал файл .htaccess для предотвращения несанкционированного использования сайта, и я забыл добавить собственные IP-адреса сервера в список. Как только я добавил это, это решило проблему.

Убедитесь, что у вас нет правил, запрещающих доступ к вашему контенту.

1 голос
/ 30 июля 2015

tl; dr: Проверьте имя пользователя API и ключ API.

К сожалению, SOAP выдает общее сообщение об ошибке, которое может означать несколько вещей.

Одним из возможных вариантов является проблема маршрутизации, то есть сервер пытается отправить запрос самому себе, но это не удается, возможно, потому, что для этого он использует собственный публичный IP-адрес, а по причинам это не работает.

Чтобы увидеть, так ли это на вашем сервере, войдите в него (например, с помощью SSH) и попробуйте пинговать имя хоста.Если пинг работает, маршрутизация почти наверняка не является проблемой.Если проверка связи не удалась, попробуйте добавить имя хоста в файл hosts (обычно это / etc / hosts) с IP-адресом 127.0.0.1 (или :: 1, если вы используете IPv6).

Но Еще одна возможная причина, и я столкнулся с ней недавно, заключается просто в том, что вы не указали правильное имя пользователя 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 голос
/ 07 июля 2011

Убедитесь, что php.ini включает SSL. добавьте это в ваш файл: расширение = php_openssl.dll

У меня была эта проблема, и это то, что исправило ее.

0 голосов
/ 01 ноября 2018

Я хотел бы внести следующее, в зависимости от сервера и конфигурации Magento, это простое решение может работать. это добавить index.php к URL

$ client = new SoapClient ( 'https://www.TU -domain.com / index.php / API / v2_soap / * 1006 WSDL *?');

0 голосов
/ 02 августа 2017

Перейти к Панель администратора> Система> Конфигурация> Интернет> Оптимизация в поисковых системах> Переписать веб-сервер "Установите его на Нет"

Для меня это был Исправление.

0 голосов
/ 05 февраля 2016

Эта ошибка также может быть связана с шифрами 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.

Очевидно, что вы должны следовать рекомендуемой процедуре для обновления вашей соответствующей ОС и ее шифров 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. Переконфигурировать vhosts.

    /usr/local/psa/admin/bin/httpdmng --reconfigure-all


Кредит: Это исправление задокументировано Odin напрямую: http://kb.odin.com/en/120083

0 голосов
/ 30 июня 2011

Вы находитесь на общем хостинге? Возможно, ваш провайдер блокирует доступ к порту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...