Как программно выполнить HTTP-запрос в 1С 8.3 и обработать JSON-ответ?

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

В современной практике автоматизации бизнеса на платформе 1С:Предприятие 8.3 задачи по интеграции с внешними сервисами через REST API или Web-сервисы становятся стандартными требованиями. Чаще всего взаимодействие происходит по протоколу HTTP/HTTPS с использованием формата данных JSON. В рамках данной статьи мы подробно разберем, как правильно сконфигурировать подключение, сформировать запрос и корректно обработать полученную от сервера информацию.

Организация HTTP-соединения

Первым шагом в решении задачи является создание объекта HTTPСоединение. Этот объект отвечает за установку канала связи с сервером. Проанализируем основные параметры, которые необходимо указать при инициализации. Нам потребуются адрес сервера, порт и, в случае работы с защищенным протоколом, параметры ЗащищенноеСоединениеOpenSSL.

Рассмотрим пример создания безопасного соединения:


Сервер = "api.service.com";
Порт = 443; // Стандартный порт для HTTPS
Сертификат = Новый ЗащищенноеСоединениеOpenSSL();

Соединение = Новый HTTPСоединение(Сервер, Порт, , , , 30, Сертификат);

Здесь мы устанавливаем таймаут в 30 секунд, что является оптимальным для большинства внешних API. Если сервер требует авторизации, логин и пароль передаются в соответствующих параметрах конструктора HTTPСоединение.

Формирование и настройка HTTP-запроса

После того как канал связи определен, нам необходимо создать сам HTTPЗапрос. Важно понимать, что объект запроса содержит путь к конкретному ресурсу (endpoint) и заголовки, которые сообщают серверу тип передаваемого контента и параметры аутентификации (например, Token).

Выясним причину, по которой запросы часто отклоняются сервером: чаще всего это отсутствие заголовка Content-Type. Разберем по шагам, как добавить необходимые метаданные:


ПутьКРесурсу = "/v1/data/get_info?id=123";
Запрос = Новый HTTPЗапрос(ПутьКРесурсу);

// Устанавливаем заголовки
Запрос.Заголовки.Вставить("Content-Type", "application/json");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + ТокенДоступа);

Если мы выполняем POST запрос, нам также необходимо передать тело сообщения. Проанализируем ситуацию, когда данные для отправки хранятся в структуре 1С. В этом случае их нужно предварительно преобразовать в строку JSON.

Подготовка тела запроса в формате JSON

Для работы с JSON в платформе предусмотрены объекты ЗаписьJSON и ПрочитатьJSON. Рассмотрим подробнее процесс сериализации структуры 1С в строку для отправки на сервер:


ДанныеДляОтправки = Новый Структура;
ДанныеДляОтправки.Вставить("Артикул", "00001");
ДанныеДляОтправки.Вставить("Количество", 10);

ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ДанныеДляОтправки);
СтрокаJSON = ЗаписьJSON.Закрыть();

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

Важный момент: использование ИспользованиеByteOrderMark.НеИспользовать критично для многих современных веб-серверов, так как лишние символы в начале строки могут вызвать ошибку парсинга на стороне принимающего сервиса.

Отправка запроса и получение ответа

Теперь перейдем к выполнению самого запроса. Мы будем использовать метод ВызватьHTTPМетод или специализированные методы типа ОтправитьДляОбработки (для POST). Результатом выполнения будет объект HTTPОтвет, который содержит код состояния и тело ответа.

Посмотрим на пример обработки результата:


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

Если Ответ.КодСостояния = 200 Тогда
    // Успешное выполнение
    ТекстОтвета = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
    РазберемОтветСервера(ТекстОтвета);
Иначе
    Сообщить("Ошибка при запросе: " + Ответ.КодСостояния);
КонецЕсли;

Код состояния 200 (OK) или 201 (Created) обычно свидетельствует об успехе. Коды 4xx и 5xx указывают на ошибки клиента или сервера соответственно.

Парсинг JSON-ответа в объекты 1С

Полученную строку JSON необходимо преобразовать обратно в объекты, с которыми удобно работать в коде (Структура, Соответствие или Массив). Для этого мы проанализируем использование функции ПрочитатьJSON.


ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ТекстОтвета);

РезультатСтруктура = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();

// Теперь мы можем обращаться к данным напрямую
Если РезультатСтруктура.Свойство("status") И РезультатСтруктура.status = "success" Тогда
    // Выполняем дальнейшую логику
КонецЕсли;

Обратите внимание, что метод ПрочитатьJSON по умолчанию создает Структуру для объектов и Массив для списков. Если ключи в JSON содержат символы, недопустимые для имен свойств структуры 1С (например, дефисы), рекомендуется использовать второй параметр функции, чтобы получить Соответствие.

Обработка ошибок и отладка

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

  1. Всегда проверяйте доступность интернет-соединения перед выполнением тяжелых операций.
  2. Логируйте текст ошибки из блока Исключение с помощью функции ОписаниеОшибки().
  3. При отладке используйте HTTPОтвет.ПолучитьЗаголовки(), чтобы увидеть, какие дополнительные данные прислал сервер (например, лимиты запросов).

Использование связки HTTPСоединение и JSON позволяет интегрировать 1С практически с любым современным облачным сервисом, будь то мессенджеры, платежные системы или государственные информационные ресурсы. Следуя описанному выше структурному подходу, вы сможете создавать надежные и быстрые механизмы обмена данными.

← На главную