8.х WEB Soap запрос 1С->Beeline

Тема в разделе ""1C:Web-Сервер"", создана пользователем Efim, 23 мар 2017.

  1. TopicStarter Overlay
    Efim
    Offline

    Efim

    Регистрация:
    23 мар 2017
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    Доброго времени суток! Стоит задача по организации SOAP запроса в систему Jasper m2m Beeline с целью добыть с нее информацию о балансе, номере телефона и iccid. Исходя из этой информации должен заполняться справочник, а так-же при 0 балансе блокироваться сим-карта. Возникли трудности по организации запросов, на протяжении долгого времени мучаю Beeline, но увы успехов не добился. Ранее SOAP запросами не занимался, перепробовал разные варианты, при добавлении WS-ссылки 1С ругается на targetNamespace:
    [​IMG]
    При открытии WSDL файла через Chrome он его тупо скачивает, с IE открывает.
    Прочитал, что можно сделать запрос при помощи MSxml2.XMLHTTP, но так и не смог, либо в ответе WSDL файл(текстом), либо ответ пустой:

    Код:
    Запрос = СформироватьЗапрос();
    ПослатьЗапрос(Запрос);
    Сообщить (ПослатьЗапрос(Запрос));
    КонецПроцедуры
    Функция СформироватьЗапрос()
    Запрос = "<soapenv:Envelope xmlns:sch=""http://api.jasperwireless.com/ws/schema"" xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"">"+
    "<soapenv:Header>"+
    "<wsse:Security xmlns:wsse=""http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"" soapenv:mustUnderstand=""1"">"+
    "<wsse:UsernameToken xmlns:wsu=""http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"" wsu:Id=""UsernameToken-16847597"">"+
    "<wsse:Username>USERNAME</wsse:Username>"+
    "<wsse:Password Type=""http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"">PASSWORD</wsse:Password>"+
    "</wsse:UsernameToken>"+
    "</wsse:Security>"+
    "</soapenv:Header>"+
    "<soapenv:Body>"+
    "<sch:GetTerminalDetailsRequest>"+
    "<sch:messageId>?</sch:messageId>"+
    "<sch:version>?</sch:version>"+
    "<sch:licenseKey>XXXXXXXXXXXX-XXXXXXX-XXXXXXX-XXXXX</sch:licenseKey>"+
    "<sch:iccids>"+
    "<sch:iccid>8901655076600205511</sch:iccid>"+
    "</sch:iccids>"+
    "</sch:GetTerminalDetailsRequest>"+
    "</soapenv:Body>"+
    "</soapenv:Envelope>";
        Возврат Запрос;
    КонецФункции
    
    Код:
    Функция ПослатьЗапрос(ЗапросXML)
            АдресСервиса = "http://api.jasperwireless.com/ws/schema/Terminal.wsdl";
            ИмяСервера = "http://api.jasper.com";
                                
            MSXML = Новый COMОбъект("MSXML2.XMLHTTP");
            MSXML.open("POST", АдресСервиса, 0);
            MSXML.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
            MSXML.setRequestHeader("Content-Length", СтрДлина(ЗапросXML));
            MSXML.setRequestHeader("SOAPAction", ИмяСервера);
            MSXML.send(ЗапросXML);
            ОтветПолучен = Ложь;
            Для НомерЦикла = 1 по 100 Цикл
                Если MSXML.readyState >3 Тогда
                    ОтветПолучен = Истина;
                    Прервать;
                КонецЕсли;    
            КонецЦикла;
                
            Если ОтветПолучен Тогда
                возврат MSXML.responseXML.xml;
            Иначе
                Возврат неопределено;
            КонецЕсли;
    КонецФункции
    
    Ссылки на xsd и wsdl файлы:
    http://apitest.jasperwireless.com/ws/schema/JasperAPI.xsd
    http://apitest.jasperwireless.com/ws/schema/Terminal.wsdl

    Пример запроса с сайта Jasper m2m:
    Код:
    <soapenv:Envelope xmlns:sch="http://api.jasperwireless.com/ws/schema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Header>
    <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" soapenv:mustUnderstand="1">
    <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="UsernameToken-16847597">
    <wsse:Username>accountUser</wsse:Username>
    <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">password</wsse:Password>
    </wsse:UsernameToken>
    </wsse:Security>
    </soapenv:Header>
    <soapenv:Body>
    <sch:GetTerminalDetailsRequest>
    <sch:messageId>?</sch:messageId>
    <sch:version>?</sch:version>
    <sch:licenseKey>xxxxxxx-xxxx-xxxx-xxxx-xxxx</sch:licenseKey>
    <sch:iccids>
    <!-- 1 to 50 repetitions: -->
    <sch:iccid>8901655076600205511</sch:iccid>
    </sch:iccids>
    </sch:GetTerminalDetailsRequest>
    </soapenv:Body>
    </soapenv:Envelope>
    Пример написанного запроса на PHP с сайта Jasper m2m:
    Код:
    <?php
    require_once('nusoap.php');
    
    $JASPER_URI = 'http://api.jasperwireless.com/ws/schema';
    
    $env = 'apitest'; # Apitest URL. See "Get WSDL Files" in the API documentation for Production URL.
    $wsdlUrl = 'http://'.$env.'.jasperwireless.com/ws/schema/Terminal.wsdl';
    $licenseKey = '<INSERT LICENSE KEY HERE>';
    $userName = '<INSERT USER NAME HERE>';
    $password = '<INSERT PASSWORD HERE>';
    
    $service = new nusoap_client($wsdlUrl, true /** wsdl **/);
    $service->setHeaders(
    '<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">'.
    '<wsse:UsernameToken>'.
    '<wsse:Username>'.$userName.'</wsse:Username>'.
    '<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">'.$password.'</wsse:Password>'.
    '</wsse:UsernameToken>'.
    '</wsse:Security>'
    );
    $msg =
    '<GetTerminalDetailsRequest xmlns="'.$JASPER_URI.'">'.
    '<messageId></messageId>'.
    '<version></version>'.
    '<licenseKey>'.$licenseKey.'</licenseKey>'.
    '<iccids>'.
    '<iccid>'.'INSERT ICCID HERE'.'</iccid>'.
    '<iccid>'.'INSERT ANOTHER ICCID HERE'.'</iccid>'.
    '</iccids>'.
    '</GetTerminalDetailsRequest>';
    $result = $service->call('GetTerminalDetails', $msg);
    
    if ($service->fault) {
      echo 'faultcode: ' . $service->faultcode . "\n";
      echo 'faultstring: ' . $service->faultstring . "\n";
      echo 'faultDetail: ' . $service->faultdetail . "\n";
      echo 'response: ' . $service->response;
      exit(0);
    }
    
    echo 'Request: ' . $service->request . "\n";
    echo 'Response: ' . $service->response . "\n";
    echo "Call result: \n";
    var_dump($result['terminals']['terminal']);
    echo "Status of the first terminal: " . $result['terminals']['terminal'][0]['status'] . "\n";
    ?>
    Как это организовать?
    Заранее спасибо за помощь! Сильно не пинайте, только учусь)
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.405
    Симпатии:
    973
    Баллы:
    204
    1C умеет напрямую работать с SOAP.

    В синтаксис-помощнике читайте про:

    WSОпределения
    WSПрокси
  3. TopicStarter Overlay
    Efim
    Offline

    Efim

    Регистрация:
    23 мар 2017
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    Делал так:
    Код:
    СсылкаНаОпределение = "http://api.jasperwireless.com/ws/schema/Terminal.wsdl";
    Определение = Новый WSОпределения(СсылкаНаОпределение); 
    Сервис = Определение.Сервисы[0];
    ТочкаПодключения = Сервис.ТочкиПодключения[0];
    Прокси = Новый WSПрокси(Определение, Сервис.URIПространстваИмен, Сервис.Имя, ТочкаПодключения.Имя);
    
    1С ругается на targetNamespace.
  4. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.397
    Симпатии:
    155
    Баллы:
    104
    Там WS-Security, не умеет его 1С

    У вас платформа какая?
    Есть объект 1С HttpСоединение и связанные с ним HttpЗапрос и HttpОтвет, пользуйтесь ими
    Кроме самого текста ответа проверяйте еще и код возврата.

    Ну и обращаетесь вы явно не к сервису, а к файлам описания API, потому и получаете гадость.
    Нашел тут на корпортале, но должно быть и в свободном доступе, судя по тому что это Jasper white paper
    Соответственно вам должны были дать адрес сервера CC
    Если не дали, могу подоставать разработчиков, особенно если дадите какую-нибудь информацию как они вас могут идентифицировать в личку
  5. TopicStarter Overlay
    Efim
    Offline

    Efim

    Регистрация:
    23 мар 2017
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    Спасибо за помощь, в данный момент пытаюсь реализовать на 1С:Предприятие 8.3. У меня есть API license key выданный мне Jasper'ом. На их сайте написано:
    The API server for your account is:
    https://api.jasper.com

    Так-же помимо license key у меня есть свой логин и пароль для авторизации. Сегодня попробую сделать запрос через HttpСоединение, но задам наверное идиотский вопрос, обращаться в HttpСоединение нужно к https://api.jasper.com, либо
    http://api.jasperwireless.com/ws/schema/Terminal.wsdl ?

    Заранее спасибо)
  6. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.405
    Симпатии:
    973
    Баллы:
    204
    Само HttpСоединение - к http://api.jasperwireless.com
    В запросах POST/GET - добивается адрес ресурса, т.е. ws/schema/terminal.wsdl
  7. TopicStarter Overlay
    Efim
    Offline

    Efim

    Регистрация:
    23 мар 2017
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    Код:
    ИмяСервера = "https://api.jasper.com";
          HTTPСоед = новый HTTPСоединение(ИмяСервера);
          HTTPЗапр= Новый HTTPЗапрос("ws/schema/terminal.wsdl");
    А как отослать сам soap? Я туплю...
  8. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.405
    Симпатии:
    973
    Баллы:
    204
    Прочитайте про HTTPЗапрос в синтаксис-помощнике. После выполнения ответ от сервера находится в HTTPОтвет.
    Возможно вам понадобится не HTTPЗапрос/HTTPОтвет, а HTTPСоединение.ОтправитьДляОбработки()

    HTTP соединение должно быть с SSL, чтобы оно было по HTTPS.
  9. TopicStarter Overlay
    Efim
    Offline

    Efim

    Регистрация:
    23 мар 2017
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    Код:
    
    Запрос="<soapenv:Envelope xmlns:sch=""http://api.jasperwireless.com/ws/schema"" xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"">"+
     "<soapenv:Header>"+
     "<wsse:Security xmlns:wsse=""http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"" soapenv:mustUnderstand=""1"">"+ 
     "<wsse:UsernameToken xmlns:wsu=""http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"" wsu:Id=""UsernameToken-16847597"">"+
     "<wsse:Username>UserName</wsse:Username>"+
     "<wsse:Password Type=""http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"">Password</wsse:Password>"+
     "</wsse:UsernameToken>"+
     "</wsse:Security>"+
     "</soapenv:Header>"+
     "<soapenv:Body>"+
     "<sch:GetTerminalDetailsRequest>"+
     "<sch:messageId>?</sch:messageId>"+
     "<sch:version>?</sch:version>"+
     "<sch:licenseKey>XXXXXXXXX-XXXXXX-XXXXX</sch:licenseKey>"+
     "<sch:iccids>"+
     "<sch:iccid>8970199120583791769</sch:iccid>"+
     "</sch:iccids>"+
     "</sch:GetTerminalDetailsRequest>"+
     "</soapenv:Body>"+
     "</soapenv:Envelope>";
    
    АдресСервиса = "http://api.jasperwireless.com/ws/schema/Terminal.wsdl";
         ИмяСервера = "https://api.jasper.com";
        ssl1 = Новый ЗащищенноеСоединениеOpenSSL(
                Новый СертификатКлиентаWindows(СпособВыбораСертификатаWindows.Авто),
                Новый СертификатыУдостоверяющихЦентровWindows());
            заголовки=новый соответствие();
            заголовки.Вставить("Content-Type", "text/xml; charset=utf-8");
            заголовки.Вставить("Content-Length", СтрДлина(Запрос));
            заголовки.Вставить("SOAPAction", ИмяСервера);
               HTTPConnect = новый HTTPСоединение(ИмяСервера,,,,,,ssl1);
         HTTPЗапр= Новый HTTPЗапрос(АдресСервиса,заголовки);
         HTTPЗапр.УстановитьТелоИзСтроки(Запрос);
         httpconnect.ОтправитьДляОбработки(httpзапр);
    
    Вылетает ошибка.
    Код:
    {Обработка.Обработка1.Форма.Форма.Форма(148)}: Ошибка при вызове метода контекста (ОтправитьДляОбработки)
         httpconnect.ОтправитьДляОбработки(httpзапр);
    по причине:
    Ошибка работы с Интернет:   Couldn't resolve host name
    Последнее редактирование: 24 мар 2017
  10. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.405
    Симпатии:
    973
    Баллы:
    204
    АдресСервиса = "ws/schema/Terminal.wsdl"
    ИмяСервера = "api.jasperwireless.com"

    В данном случае соединение не без SSL.

    UPD: поправил имя сервера.
    Последнее редактирование: 24 мар 2017
  11. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.397
    Симпатии:
    155
    Баллы:
    104
    Косяк в том что это не адрес сервиса, а просто файл wsdl :)
    написал индусам, как проснутся надеюсь ответят
  12. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.405
    Симпатии:
    973
    Баллы:
    204
    Я понимаю, что какая-то хрень, но имеем то, что уж озвучил ТС :)
  13. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.397
    Симпатии:
    155
    Баллы:
    104
    Поэтому и пошел стучать разработчикам :)
    Прикольную конторку купили оказывается, надо будет их заставить обработины на 1С писать, наши индусы уже пытались :confused:
  14. TopicStarter Overlay
    Efim
    Offline

    Efim

    Регистрация:
    23 мар 2017
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    Подскажите, какие данные необходимы? Пороюсь на сайте jasper в разделе API интеграции.
  15. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.397
    Симпатии:
    155
    Баллы:
    104
    ищи там service endpoint или примеры запросов
    --- Объединение сообщений, 26 мар 2017 ---
    в конторе принято на java выкладывать примеры, найдешь такое - считай все сделал :)
  16. TopicStarter Overlay
    Efim
    Offline

    Efim

    Регистрация:
    23 мар 2017
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте! Есть пример на java, похоже мне повезло:). Всю голову сломал, не получается сделать... Возможно с этим исходником что-то получится.

    Вложения:

    • javaSample.zip
      Размер файла:
      149,1 КБ
      Просмотров:
      20
    Последнее редактирование: 26 мар 2017
  17. TopicStarter Overlay
    Efim
    Offline

    Efim

    Регистрация:
    23 мар 2017
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    Покопавшись я добился своего!) Теперь необходимо построить кучу нужных запросов на примере GetTerminalDetail. Большое спасибо за помощь, прекрасный форум! Вся проблема была в адресе сервиса)
Похожие темы
  1. murava
    Ответов:
    4
    Просмотров:
    5.526
  2. banzai
    Ответов:
    0
    Просмотров:
    1.309
  3. mas05
    Ответов:
    1
    Просмотров:
    5.989
  4. xxx949
    Ответов:
    1
    Просмотров:
    899
Загрузка...

Поделиться этой страницей