Интеграция учетных систем 1С с внешними API по протоколу SOAP (Simple Object Access Protocol) — частая задача при взаимодействии с банковскими сервисами, государственными порталами и корпоративными системами. Разберем по шагам, с чего начать разработку, какие инструменты использовать для тестирования и какие способы интеграции предоставляет платформа 1С:Предприятие.
Перед тем как писать программный код в конфигураторе, выясним структуру и параметры сервиса. Разработку интеграции всегда рекомендуется начинать с изолированного тестирования:
При отправке запросов из 1С нередко возникает необходимость увидеть точный текст XML-пакета, уходящего на сервер, а также заголовки и ответ сервиса. Для этого настроим перехват трафика:
inetcfg.xml) пропишем параметры прокси-сервера. Если код выполняется в толстом или тонком клиенте локально, мониторинг перехватывает системный трафик напрямую.Платформа 1С предоставляет несколько механизмов для отправки SOAP-запросов. Рассмотрим подробнее каждый из них.
Если структура веб-сервиса стабильна и не меняется часто, используем объект конфигурации WSСсылка. Добавим новую WS-ссылку в ветку метаданных и укажем путь к файлу или URL WSDL-схемы. Платформа автоматически сформирует необходимые XDTO-пакеты.
Посмотрим на пример вызова метода через статическую ссылку:
Прокси = WSСсылки.ИмяWSСсылки.СоздатьWSПрокси("ИмяURIПространстваИмен", "ИмяСервиса", "ИмяТочкиПодключения");
Прокси.Пользователь = "Логин";
Прокси.Пароль = "Пароль";
// Вызываем метод веб-сервиса
Результат = Прокси.ИмяМетодаСервиса(Параметр1, Параметр2);
Если мы разрабатываем внешнюю обработку или не хотим вносить изменения в структуру конфигурации, создадим прокси динамически в коде с помощью объектов WSОпределения и WSПрокси.
Важный нюанс: Загрузка WSDL по сетевому адресу при каждом вызове создает значительные задержки. Рекомендуется сохранить схему и зависимые XSD-файлы на локальный диск или кэшировать созданный объект прокси в модуле с повторным использованием значений.
Разберем пример динамического подключения:
ПутьКФайлуWSDL = "C:\Integrations\ServiceSchema.wsdl";
Определения = Новый WSОпределения(ПутьКФайлуWSDL, "Логин", "Пароль");
URIПространства = "http://example.com/soap/service";
ИмяСервиса = "BankService";
ИмяПорта = "BankServicePort";
Прокси = Новый WSПрокси(Определения, URIПространства, ИмяСервиса, ИмяПорта);
Прокси.Пользователь = "Логин";
Прокси.Пароль = "Пароль";
Ответ = Прокси.ВыполнитьОперацию(ДанныеЗапроса);
Существуют ситуации, когда стандартный механизм 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);
При работе с банками важно четко разделять физическое оборудование и веб-сервисы:
МенеджеромКриптографии).