В современной разработке на платформе 1С:Предприятие 8.3 интеграция с внешними веб-сервисами (API мессенджеров, банков, систем логистики) является одной из наиболее востребованных задач. Чаще всего взаимодействие происходит через протоколы HTTP/HTTPS с использованием данных в формате JSON. В рамках данной статьи мы подробно разберем, как правильно сконфигурировать подключение, сформировать запрос и обработать результат.
Большинство современных API требуют работы через защищенный протокол HTTPS. Для этого в 1С необходимо использовать объект ЗащищенноеСоединениеOpenSSL. Если проигнорировать этот шаг, система выдаст ошибку при попытке установить связь с сервером по 443 порту.
Рассмотрим стандартный способ создания объекта защищенного соединения. Мы проанализируем ситуацию, когда сертификаты сервера проверяются автоматически средствами операционной системы, что является наиболее универсальным подходом.
// Создаем объект защищенного соединения
// Параметры позволяют указать конкретные сертификаты, но для большинства API достаточно дефолтных настроек
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
Иногда возникают ситуации, когда на сервере используется самоподписанный сертификат. В этом случае параметры объекта ЗащищенноеСоединениеOpenSSL позволяют отключить проверку сертификатов, однако мы рекомендуем использовать этот метод только в целях отладки внутри локальной сети.
После подготовки параметров безопасности нам необходимо создать само соединение. Разберем по шагам параметры конструктора HTTPСоединение. Важно помнить, что в параметре "Сервер" указывается только доменное имя (например, api.telegram.org), без префиксов http:// или https://.
Сервер = "api.example.com";
Порт = 443; // Стандартный порт для HTTPS
Таймаут = 30; // Время ожидания ответа в секундах
// Создаем соединение с сервером
Соединение = Новый HTTPСоединение(Сервер, Порт, , , , Таймаут, ЗащищенноеСоединение);
Проанализируем возможные проблемы на этом этапе. Если ваша база 1С работает через прокси-сервер, параметры прокси необходимо передать четвертым аргументом конструктора, предварительно создав объект ИнтернетПрокси.
Теперь рассмотрим, как подготовить сам запрос. Объект HTTPЗапрос содержит путь к конкретному методу API и заголовки. Выясним причину, почему важно правильно устанавливать заголовок Content-Type: без него сервер может не понять, в каком формате передаются данные (JSON, XML или обычный текст).
Пример формирования GET-запроса с параметрами в строке:
Ресурс = "/v1/methods/getData?user_id=123&token=abcde";
Запрос = Новый HTTPЗапрос(Ресурс);
Запрос.Заголовки.Вставить("Content-Type", "application/json");
Пример формирования POST-запроса с телом в формате JSON:
Для передачи данных в теле запроса мы сначала сформируем структуру, преобразуем её в строку JSON и установим в тело запроса.
ДанныеДляОтправки = Новый Структура;
ДанныеДляОтправки.Вставить("chat_id", "987654321");
ДанныеДляОтправки.Вставить("text", "Привет из 1С!");
// Преобразование структуры в JSON
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ДанныеДляОтправки);
СтрокаJSON = ЗаписьJSON.Закрыть();
Запрос = Новый HTTPЗапрос("/sendMessage");
Запрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8);
Запрос.Заголовки.Вставить("Content-Type", "application/json");
Выполним отправку запроса методом ВызватьHTTPМетод или специализированными методами ОтправитьДляОбъекта / Получить. После получения ответа (объект HTTPОтвет) необходимо проверить код состояния. Код 200 означает успех, коды 4xx и 5xx указывают на ошибки.
Попытка
Ответ = Соединение.ОтправитьДляОбъекта(Запрос);
КодСостояния = Ответ.КодСостояния;
Если КодСостояния = 200 Тогда
// Разберем по шагам чтение ответа
ТелоОтвета = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ТелоОтвета);
РезультатСтруктура = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
// Теперь данные доступны как свойства структуры
// Сообщить(РезультатСтруктура.status);
Иначе
Сообщить("Ошибка сервера. Код: " + КодСостояния);
КонецЕсли;
Исключение
// Обработка сетевых ошибок (нет интернета, сервер недоступен)
Сообщить("Не удалось установить соединение: " + ОписаниеОшибки());
КонецПопытки;
Проанализируем несколько важных нюансов, которые часто упускают разработчики:
КодировкаТекста.UTF8 при установке тела запроса и чтении ответа. Это исключит проблемы с кириллицей.ТелоОтвета в текстовый файл или журнал регистрации, чтобы видеть сырые данные, которые прислал сервер в случае ошибки парсинга JSON.Используя объекты HTTPСоединение, HTTPЗапрос и встроенные средства работы с JSON, вы сможете реализовать интеграцию любой сложности, от простых Telegram-ботов до обмена данными с государственными информационными системами. Помните о безопасности и всегда обрабатывайте исключительные ситуации в блоке Попытка...Исключение.