Подтвердить что ты не робот

Не удалось подключиться к 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');

Снайпер из 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.

4b9b3361

Ответ 1

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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 isn 't защищен паролем. Но сама конечная точка, так что http://www.example.com/index.php/api/v2_soap/index/ * не удастся.

Еще одна возможность: вы недавно изменили имя своего магазина и не сфотографировали кэширование "веб-сервисов"?

Ответ 5

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

Ответ 6

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

  • Обновите пакет 'openssl' до версии 1.0 и выше.

  • Включить nginx:

    /usr/local/psa/admin/bin/nginxmng --enable

  • Создайте собственный шаблон домена для 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

  • Отредактируйте только что скопированный файл:

    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;

    Сохраните файл.

  • Переконфигурируйте vhosts.

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


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

Ответ 7

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

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