Не удалось подключиться к Magento SOAP API v2 из-за «не удалось загрузить внешний объект»

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

PHP Неустранимая ошибка: исключить исключение 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 из 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 .

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

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

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

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

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

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

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

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

Чтобы узнать, так ли это на вашем сервере, войдите в него (например, с SSH) и попробуйте выполнить ping-имя хоста. Если ping работает, маршрутизация почти наверняка не проблема. Если ping не удался, попробуйте добавить имя хоста в ваш файл 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/ * не удастся.

Еще одна возможность: вы недавно изменили доменное имя своего магазина и не сбрасывали кеши «файлы конфигурации веб-сервисов»?

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

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


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

Перейти к Admin Dash board> system> configuration> web> Оптимизация в поисковых системах> Использовать переработку веб-сервера «Установить его на Нет»

Для меня это был Fix.