Функции для работы с веб-сервисами

27 1

Представляю две функции для работы с веб-сервисами из системы DIRECTUM: UDL_XMLHTTPSendSOAPRequest, UDL_WinHTTPSendSOAPRequest

Функция UDL_XMLHTTPSendSOAPRequest для вызова методов веб-сервиса использует объект MSXML2.XMLHTTP (выполняет POST запрос)

Возможности функции:

  • Возможность задать логин и пароль для basic-аутентификации на веб-сервисе;
  • Можно использовать адреса веб-сервисов с http и https;
  • Если веб-сервис запрашивает клиентский сертификат (для двойного шифрования трафика (закрытым ключом клиента и открытым ключом сервера)), и если в личном хранилище пользователя (windows-пользователя), от которого работает сценарий, есть только один сертификат, то он автоматически подставляется. Если в личном хранилище несколько сертификатов, то у пользователя запустившего сценарий будет запрошен диалог выбора сертификата. Поэтому если сертификатов несколько, то надо иметь в виду, что вызов функции произойдет в визуальном режиме:

  • Поскольку на вход надо передавать целиком Message (SOAP-пакет), то можно использовать сообщения с секцией ws-security, для аутентификации ws-security на веб-сервисе;
  • Два режима возврата результата: в виде текста или как объект XMLDOMElement;
  • Обработка HTTP статуса 500, в этом случае функция генерирует исключение с сообщением из секции Fault (из ответа веб-сервиса);
  • Обработка HTTP статусов с ошибками (это статусы с кодом >=300), в этом случае функция генерирует исключение с сообщением, содержащим HTTP статус и статус текст.

Пример вызова:

  WebServiceURL = "http://directum:8080/IntegrationService.svc/datacontract"
  Host = "directum:8080"
  SOAPAction = "GetEntity"

  Message = '<soapenv:envelope xmlns:ns="http://docs.npo-comp.ru/IntegrationServices/5.0/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:header>
   <soapenv:body>
      <ns:getentity>
         <ns:referencename>Организации</ns:referencename>
        <ns:recordkey>51891719-0774-4C55-B7D8-7DBEB6BC9A0F</ns:recordkey>
         <ns:iscode>1С</ns:iscode>
      </ns:getentity>
   </soapenv:body>
</soapenv:header></soapenv:envelope>'
  
  // Отправить SOAP запрос 
  Response = UDL_XMLHTTPSendSOAPRequest(WebServiceURL; Host; SOAPAction; Message; False)

Функция UDL_WinHTTPSendSOAPRequest для вызова методов веб-сервиса использует объект WinHttp.WinHttpRequest.5.1 (https://msdn.microsoft.com/en-us/library/windows/desktop/aa384106(v=vs.85).aspx) (выполняет POST запрос). Функции во много похожи, отличие заключается в работе с клиентским сертификатом (есть возможность указать конкретный сертификат).

Возможности функции:

  • Возможность задать логин и пароль для basic-аутентификации на веб-сервисе;
  • Можно использовать адреса веб-сервисов с http и https;
  • Если веб-сервис запрашивает клиентский сертификат (для двойного шифрования трафика (закрытым ключом клиента и открытым ключом сервера)), то есть возможность указать сертификат (пример, значение на скриншоте), в параметре функции CertificateName (https://msdn.microsoft.com/en-us/library/windows/desktop/aa384055(v=vs.85).aspx):

  • Поскольку на вход надо передавать целиком Message (SOAP-пакет), то можно использовать сообщения с секцией ws-security, для аутентификации ws-security на веб-сервисе;
  • Два режима возврата результата: в виде текста или как объект XMLDOMElement;
  • Обработка HTTP статуса 500, в этом случае функция генерирует исключение с сообщением из секции Fault (из ответа веб-сервиса);
  • Обработка HTTP статусов с ошибками (это статусы с кодом >=300), в этом случае функция генерирует исключение с сообщением, содержащим HTTP статус и статус текст.

Пример вызова:

  WebServiceURL = "http://directum:8080/IntegrationService.svc/datacontract"
  Host = "directum:8080"
  SOAPAction = "GetEntity"

  Message = '<soapenv:envelope xmlns:ns="http://docs.npo-comp.ru/IntegrationServices/5.0/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:header>
   <soapenv:body>
      <ns:getentity>
         <ns:referencename>Организации</ns:referencename>
        <ns:recordkey>51891719-0774-4C55-B7D8-7DBEB6BC9A0F</ns:recordkey>
         <ns:iscode>1С</ns:iscode>
      </ns:getentity>
   </soapenv:body>
</soapenv:header></soapenv:envelope>'
  
  // Отправить SOAP запрос 
  Response = UDL_WinHTTPSendSOAPRequest(WebServiceURL; Host; SOAPAction; Message; False)

Архив с функциями: 

Функции для веб-сервисов.zip (7,09 Кб)

 

27
Авторизуйтесь, чтобы оценить материал.
2
Андрей Доличенко

А что такое <ns:recordkey>51891719-0774-4C55-B7D8-7DBEB6BC9A0F</ns:recordkey> ?

Для справочника "организации", для записи  "1С"  - я знаю "код" и "ИД". Что такое "recordkey" и где его брать ?

Авторизуйтесь, чтобы написать комментарий