У меня возникли проблемы с подключением к SOAP API Magento через PHP SoapClient. У меня есть небольшая тестовая версия PHP-файла на моем dev-сервере со следующим кодом:
<?php $soapC = new SoapClient('http://XXXX.com/api/soap/?wsdl', array('trace'=>true, 'exceptions'=>false)); $session = $soapC->__soapCall('login', array('TestUsr', 'test123')); var_dump($session); ?>
Файл PHP находится на том же сервере, что и мой magento dev. Когда я запускаю скрипт php через командную строку, переменная $ session выводит объект SoapFault с ошибкой, которая говорит «похоже, что у нас нет XML-документа».
Не знаете, как это решить. Когда я пытаюсь выполнить код ниже, я могу получить распечатку всех методов API, но по какой-либо причине вызов метода входа в систему вызывает проблемы.
$soapC = new SoapClient('http://XXXX.com/api/soap/?wsdl', array('trace'=>true, 'exceptions'=>false)); print_r($soapC->__getFunctions());
Эта ошибка обычно означает, что проблема находится на стороне сервера. Сервер, обрабатывающий запрос, не выводит корректный XML. Убедитесь, что ошибок и переадресаций не происходит.
Что произойдет, если вы заходите в конечную точку сервера в браузере?
Я понял, что проблема заключалась в том, что когда сервер пытался получить доступ к файлу wsdl, Magento выдавал перенаправление 302 на витрину.
Чтобы исправить это, я вошел в панель администрирования Magento, перешел в System -> Configuration -> Web и отключил «Авто-перенаправление на базовый URL». Сейчас работает как шарм.
Откройте файл php.ini с удаленного сервера или локального сервера и установите для параметра always_populate_raw_post_data значение -1 .
После этого вам необходимо перезапустить сервер Apache.
После перезапуска перезапустите свой сценарий еще раз.