Не удалось подключиться к Magento SOAP API v2 из-за "не удалось загрузить внешнюю сущность"


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

Фатальная ошибка 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.

Author: user228395, 2011-06-23

7 answers

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

 7
Author: user228395, 2011-06-28 12:48:27

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

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

 3
Author: Francois Deschenes, 2011-07-02 19:43:15

Убедитесь, что php.ini поддерживает SSL. добавьте это в свой файл: extension=php_openssl.dll

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

 1
Author: Kelly L., 2011-07-07 16:42:25

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
Author: Doug McLean, 2015-07-30 12:33:03

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

 0
Author: Jeff Thomas, 2011-06-30 16:09:52

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

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


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

 0
Author: Jongosi, 2016-02-05 00:41:27

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

Для меня это было решением проблемы.

 0
Author: Devendra Gupta, 2017-08-02 13:55:30