Ошибка SOAP: синтаксический анализ WSDL: не удалось загрузить из «» не удалось загрузить внешний объект

9

введите описание изображения здесь

Мы разрабатываем приложение для Android для сайта magento. Мы должны передать SOAP API из magento в android, чтобы получить идентификатор сессии.

Мы создали пользователя и роли SOAP в админ-панели magento, перейдя по этой ссылке:

https://www.yireo.com/tutorials/magebridge/administration/596-step-by-step-create-a-magento-api-user

Когда мы пытаемся подключиться с Android на Magento, мы получаем ошибку. Это ссылка, которую мы используем:

http://videomergerapp.com/index.php/api/v2_soap/

Малыш в Мадженто
источник
1
Здравствуйте. Я не вижу ошибки по указанной вами ссылке; это говорит вниз для обслуживания.
Гарет Клэборн
Привет, извините, что сайт обслуживается, пожалуйста, проверьте обновленный вопрос.
Ребенок в Magento
1
Вы пробовали шаги из моего предыдущего вопроса? Это похоже на ту же ошибку, которую я получил, которая была вызвана настройками брандмауэра и NAT для моего сервера.
Гарет Клэборн
1
Когда magento пытается получить некоторые ресурсы, он делает больше запросов SOAP к себе, но вместо того, чтобы использовать localhost, как если бы он пытался пройти весь путь до внешнего IP и имени хоста. В моем случае мне пришлось открыть брандмауэр для зацикливания и добавить свой домен и внешний IP-адрес в файл hosts
Garet Claborn
хорошо @GaretClaborn я проверю с командой сервера.
Ребенок в Magento

Ответы:

5

Сервер SOAP необходимо инициализировать с помощью WSDL, чтобы понять, как обрабатывать входящие запросы (он в основном загружает WSDL с указанного URL в случае Magento). Это происходит в \Mage_Api_Model_Server_Adapter_Soap::_instantiateServer():

$this->_soap = new Zend_Soap_Server(
    $this->getWsdlUrl(array("wsdl" => 1)),
    array('encoding' => $apiConfigCharset)
);

Обратите внимание, что getWsdlUrl()URL-адрес WSDL создается на основе базового URL-адреса вашего экземпляра Magento. Это означает, что если ваше хранилище Magento недоступно с хоста, на котором оно развернуто, сервер SOAP не сможет загрузить WSDL во время инициализации. В результате вы можете столкнуться с такой ошибкой при попытке выполнить запросы к Magento SOAP API.

Алекс Палиаруш
источник
И как мы можем это исправить?
Александрос
Добавьте хост экземпляра Magento /etc/hostsна сервер.
Алекс Палиаруш
Я добавил свой IP XXX.XXX.XXX.XXX www.example.com, но все равно получаю то же самое. Я также попытался прокрутить и пинговать полный домен, и они работают :(
Александрос
Можете ли вы загрузить WSDL на этом сервере?
Алекс Палиаруш
1
Не уверен, что, попробуйте отладить где-нибудь вокруг\Mage_Api_Model_Server_Adapter_Soap::_instantiateServer()
Алекс Палиаруш
2

Я испытывал ту же проблему. Я установил мост orocrm, который должен получить доступ к soap api, выполнил указанные шаги для настройки роли мыла и пользователя, а затем попытался подключиться: 💥 Параметры не действительны!

Покопавшись в логах, я заметил эту ошибку:

[2017-07-03 16:57:46] app.CRITICAL: MageCheck 
error: 0:  [message]           
SOAP-ERROR: Parsing WSDL: Couldn't load from 
'https://my.magento.store/index.php/api/v2_soap/index/?wsdl=1' : 
failed to load external entity 
"https://my.magento.store/index.php/api/v2_soap/index/?wsdl=1"

[request]
<?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:Magento" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
        <SOAP-ENV:Body>
            <ns1:login>
                <username xsi:type="xsd:string">orocrm</username>
                <apiKey xsi:type="xsd:string">***</apiKey>
            </ns1:login>
        </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

[response]
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body>
        <SOAP-ENV:Fault>
            <faultcode>WSDL</faultcode>
            <faultstring>
SOAP-ERROR: Parsing WSDL: Couldn't load from  'https://my.magento.store/index.php/api/v2_soap/index/?wsdl=1' : 
failed to load external entity "https://my.magento.store/index.php/api/v2_soap/index/?wsdl=1"
            </faultstring>
        </SOAP-ENV:Fault>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

[code]              500   [] []

Я понял, почему я столкнулся с этой проблемой. На самом деле, это было связано не с orocrm, а с magento. Это была проблема с брандмауэром. На самом деле, я правильно добавил правила, позволяющие серверу crm атаковать magento api, но этот должен быть доступен сам! Поэтому после некоторых головных болей я просто добавляю правило на брандмауэр сервера magento, чтобы позволить себе (серверу magento) достигать своего собственного API (вид внешнего поиска) ...

Во всяком случае, я надеюсь, что это сэкономит несколько часов кому-то

lenybernard
источник
1
спасибо за ответ, очень трудно найти решение этих вопросов, связанных с мылом, я знаю боль ......
Малыш в Magento
0

Я решаю эту проблему, обновляя автоматический SSL-сертификат на сервере с CentOS / Apache / WHM / cPanel / Magento 1.9.4, подключенным к ERP через SOAP API v2

В журналах Auto SSL есть следующие сообщения:

PM ERROR Статус TLS: Дефект ОШИБКА Дефект: OPENSSL_VERIFY: Цепочка сертификатов не прошла проверку OpenSSL (0: 10: CERT_HAS_EXPIRED)

* В моем случае срок действия сертификата не истек, но у эмитента возникла конкретная проблема: https://forums.cpanel.net/threads/sectigo-issue.673157/

Это вызвало сбой подключения к API со следующим сообщением:

SOAP-ERROR: синтаксический анализ WSDL: невозможно загрузить с « https://www.example.com/api/v2_soap/?wsdl=1 »: не удалось загрузить внешнюю сущность » https://www.example.com/api / v2_soap /? = 1 WSDL

Обновление сертификата решает эту проблему.

Я надеюсь, что это помогает кому-то еще

Камило Сифуэнтес
источник