Не удалось подключиться к 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
.
Ответы
Ответ 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.