За последние 24 часа нас посетили 18882 программиста и 1730 роботов. Сейчас ищут 1294 программиста ...

Не могу достучаться до соап

Тема в разделе "PHP для профи", создана пользователем kmvtut, 30 янв 2025.

  1. kmvtut

    kmvtut Новичок

    С нами с:
    14 фев 2022
    Сообщения:
    4
    Симпатии:
    0
    Вообщем есть сервис у алеана, мне надо с него вытащить отели и их данные. Все легально естественно. Дали тестовый доступ.
    Собственно согласно доке надо отправить запрос с параметрами и получить сессию авторизации и тут вот проблема...
    PHP:
    1. $soap_request = '
    2. <soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:webservice-electrasoft-ru:types-ewsServerIntf-IewsServer">
    3.   <soapenv:Header/>
    4.   <soapenv:Body>
    5.      <urn:Login soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
    6.         <UserAlias xsi:type="xsd:string">API_Supertest</UserAlias>
    7.         <Password xsi:type="xsd:string">API_Supertest_pass</Password>
    8.         <Timeout xsi:type="xsd:unsignedInt">900000</Timeout>
    9.      </urn:Login>
    10.   </soapenv:Body>
    11. </soapenv:Envelope>';
    12.  
    13. $urlwsdl = 'http://extgate.alean.ru:8082/webservice/ewebsvc.dll/wsdl/IewsServer';
    14. $connectStd = array("UserAlias"=>"API_Supertest",
    15.                                  "Password"=>"API_Supertest_pass",
    16.                                  "Timeout"=>90000);
    17. $soapClientOptions = array(
    18.         'trace'=>1
    19.     );
    20.     try {
    21.     $soapClient = new SoapClient($urlwsdl, $soapClientOptions);
    22.    
    23.          $response1 = $soapClient->Login($connectStd);
    24.          } catch (SoapFault $e) { // ошибка SOAP канала
    25.          echo 'Ошибка SOAP-канала! '. $e->getMessage();
    26.         }
    27.     print_r($response1);
    возвращается - Ошибка SOAP-канала! as_InvalidConnection
    Однако, если отправить запрос $response1 = $soapClient->Login(); то получим ответ
    PHP:
    1. Array ( [SessionID] => {00000000-0000-0000-0000-000000000000} [return] => lrAccessDenied )
    Уже голову сломал как передать параметры тестовые. soap_request - это из доки пример запроса для авторизации. Если через curl отправить - срабатывает и возвращается xml ответ, но там в таком виде, что заморишься разбирать... Поддержка их не знает или не хочет помогать.... помогите если кто в курсе как их победить
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.119
    Симпатии:
    1.245
    Адрес:
    там-сям
    Вопрос, конечно, должен быть к поддержке. Лино я не понял фразу "возвращается - *** Однако, если отправить запрос ..."
    Ты отправляешь запрос несмотря на то, что перед этим есть ошибка? Так это точно не работает.
    Если дашь в личку данные для соединения, я могу попробовать.
     
  3. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    457
    Симпатии:
    92
    Адрес:
    Бавария, Германия
    Добрый день!
    Вы получаете одинаковый результат, когда применяете метод Login с параметрами и без них.
    (InvalidConnection и 0-SessionID + lrAccessDenied - тоже яйцо на вид сбоку)
    Из этого следует, что у Вас нет доступа к сервису через SOAP.
    В логах на сервисе можно легко проверить причину, по которой клиенту отказано в доступе.

    Если Вы успешно получили доступ через curl, то обратите внимание на то, что на сервисе Алеан
    есть полный SOAP API и Search-API, "к которому вы отправляете запросы методом GET
    и получаете ответы в виде обычного XML или JSON".
    https://www.alean.ru/page/ta-api/?label=diff
    Удачи!