Как реализовать интеграцию 1С со сторонними сервисами по протоколу SOAP?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Интеграция учетных систем 1С с внешними API по протоколу SOAP (Simple Object Access Protocol) — частая задача при взаимодействии с банковскими сервисами, государственными порталами и корпоративными системами. Разберем по шагам, с чего начать разработку, какие инструменты использовать для тестирования и какие способы интеграции предоставляет платформа 1С:Предприятие.

Этап 1. Подготовка и отладка запросов во внешних утилитах

Перед тем как писать программный код в конфигураторе, выясним структуру и параметры сервиса. Разработку интеграции всегда рекомендуется начинать с изолированного тестирования:

  1. Анализ документации и WSDL: Изучим файл описания веб-сервиса (WSDL-схему), который предоставляет поставщик API. Схема определяет доступные операции, входные параметры и форматы ответов.
  2. Тестирование через специализированные клиенты: Установим утилиту тестирования API (например, SoapUI). Импортировав WSDL-ссылку в программу, мы получим готовые шаблоны SOAP-конвертов (Envelope) для каждого метода. Это позволит проверить корректность авторизации, правильность заполнения параметров и структуру ответа сервера без написания кода.

Этап 2. Отладка и мониторинг сетевого трафика из 1С

При отправке запросов из 1С нередко возникает необходимость увидеть точный текст XML-пакета, уходящего на сервер, а также заголовки и ответ сервиса. Для этого настроим перехват трафика:

  1. Использование прокси-мониторов: Запустим локальный инструмент перехвата трафика (например, Membrane Service Proxy, Fiddler или Charles), указав порт прослушивания и целевой адрес шлюза.
  2. Настройка платформы 1С через inetcfg.xml: Если база работает в клиент-серверном режиме и вызовы выполняются на стороне сервера 1С:Предприятия, перенаправим исходящий HTTP/SOAP-трафик на локальный отладочный прокси. Для этого в каталоге конфигурационных файлов платформы (файл inetcfg.xml) пропишем параметры прокси-сервера. Если код выполняется в толстом или тонком клиенте локально, мониторинг перехватывает системный трафик напрямую.

Этап 3. Способы программной реализации SOAP-клиента в 1С

Платформа 1С предоставляет несколько механизмов для отправки SOAP-запросов. Рассмотрим подробнее каждый из них.

Вариант 1. Статические WS-ссылки в дереве метаданных

Если структура веб-сервиса стабильна и не меняется часто, используем объект конфигурации WSСсылка. Добавим новую WS-ссылку в ветку метаданных и укажем путь к файлу или URL WSDL-схемы. Платформа автоматически сформирует необходимые XDTO-пакеты.

Посмотрим на пример вызова метода через статическую ссылку:


Прокси = WSСсылки.ИмяWSСсылки.СоздатьWSПрокси("ИмяURIПространстваИмен", "ИмяСервиса", "ИмяТочкиПодключения");
Прокси.Пользователь = "Логин";
Прокси.Пароль = "Пароль";

// Вызываем метод веб-сервиса
Результат = Прокси.ИмяМетодаСервиса(Параметр1, Параметр2);

Вариант 2. Динамическое создание прокси через WSОпределения

Если мы разрабатываем внешнюю обработку или не хотим вносить изменения в структуру конфигурации, создадим прокси динамически в коде с помощью объектов WSОпределения и WSПрокси.

Важный нюанс: Загрузка WSDL по сетевому адресу при каждом вызове создает значительные задержки. Рекомендуется сохранить схему и зависимые XSD-файлы на локальный диск или кэшировать созданный объект прокси в модуле с повторным использованием значений.

Разберем пример динамического подключения:


ПутьКФайлуWSDL = "C:\Integrations\ServiceSchema.wsdl";
Определения = Новый WSОпределения(ПутьКФайлуWSDL, "Логин", "Пароль");

URIПространства = "http://example.com/soap/service";
ИмяСервиса = "BankService";
ИмяПорта = "BankServicePort";

Прокси = Новый WSПрокси(Определения, URIПространства, ИмяСервиса, ИмяПорта);
Прокси.Пользователь = "Логин";
Прокси.Пароль = "Пароль";

Ответ = Прокси.ВыполнитьОперацию(ДанныеЗапроса);

Вариант 3. Низкоуровневая отправка через HTTPСоединение

Существуют ситуации, когда стандартный механизм WSПрокси не подходит из-за ограничений платформы (например, использование сторонним сервисом устаревшего стиля кодирования RPC/Encoded, специфические заголовки безопасности WS-Security или необходимость формирования электронной подписи узлов XML-DSig). В таких случаях сформируем SOAP-пакет вручную и отправим его через объект HTTPСоединение.

Рассмотрим пример отправки готового XML-конверта:


Соединение = Новый HTTPСоединение("api.service.ru", 443, , , , 30, Новый ЗащищенноеСоединениеOpenSSL());

Заголовки = Новый Соответствие();
Заголовки.Вставить("Content-Type", "text/xml; charset=utf-8");
Заголовки.Вставить("SOAPAction", "http://example.com/soap/service/ProcessData");

Запрос = Новый HTTPЗапрос("/soap/endpoint", Заголовки);

ТекстSOAP = 
"<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:urn=""urn:ServiceSchema"">" +
"   <soapenv:Header/>" +
"   <soapenv:Body>" +
"      <urn:ProcessDataRequest>" +
"         <urn:DocumentId>12345</urn:DocumentId>" +
"      </urn:ProcessDataRequest>" +
"   </soapenv:Body>" +
"</soapenv:Envelope>";

Запрос.УстановитьТелоИзСтроки(ТекстSOAP, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);

Ответ = Соединение.ОтправитьДляОбработки(Запрос);
СтрокаОтвета = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);

Особенности банковских интеграций

При работе с банками важно четко разделять физическое оборудование и веб-сервисы:

  1. Торговый эквайринг (POS-терминалы): Подключение физических банковских терминалов на кассах выполняется через библиотеки драйверов БПО (Библиотеки подключаемого оборудования) и локальные интерфейсы (COM-порт, USB, локальная сеть), а не через веб-сервисы.
  2. Host-to-Host и API-сервисы: Прямой обмен платежными поручениями, выписками и реестрами работает через веб-сервисы и требует особого внимания к безопасности (использование сертификатов ГОСТ, взаимной аутентификации mTLS и подписания тела сообщения МенеджеромКриптографии).
← На главную