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

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

В современной разработке на платформе 1С:Предприятие одной из самых частых задач является интеграция с внешними сервисами. Будь то обмен с государственными информационными системами, маркетплейсами или внутренними корпоративными API, программисту необходимо владеть инструментами работы с протоколом HTTP и форматом данных JSON. В данной статье мы подробно разберем, как правильно выстроить процесс обмена данными, от настройки соединения до парсинга ответа.

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

Первым делом проанализируем, что необходимо для установления связи с удаленным сервером. Для этого в 1С используется объект HTTPСоединение. Нам важно учитывать, использует ли сервер защищенный протокол (HTTPS). Если сервер требует SSL-соединение, необходимо инициализировать объект ЗащищенноеСоединениеOpenSSL.

Рассмотрим пример создания базового соединения. Мы укажем адрес сервера, порт и параметры безопасности. Обратите внимание, что в адресе сервера не должно быть префиксов http:// или https://, только доменное имя или IP-адрес.


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

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

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

Формирование HTTP-запроса и заголовков

После того как соединение установлено, нам необходимо подготовить сам запрос. Для этого мы создаем объект HTTPЗапрос. Важнейшим этапом здесь является установка заголовков (headers). Веб-сервисы часто требуют указания типа контента (Content-Type) и данных для авторизации (например, Authorization или API-Key).

Проанализируем ситуацию, когда нам нужно отправить POST-запрос с данными в формате JSON. Мы должны явно сообщить серверу, что передаем именно JSON, иначе сервер может неверно интерпретировать тело запроса.


АдресРесурса = "/v1/data/send";
Запрос = Новый HTTPЗапрос(АдресРесурса);

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

Подготовка данных в формате JSON

Перейдем к формированию тела запроса. В 1С наиболее удобным способом создания JSON-строки является использование объектов ЗаписьJSON и функции ЗаписатьJSON. Мы подготовим структуру данных, которую затем преобразуем в строку.

Рассмотрим пример формирования структуры для отправки информации о товаре:


ДанныеДляОтправки = Новый Структура;
ДанныеДляОтправки.Вставить("id", "12345");
ДанныеДляОтправки.Вставить("name", "Смартфон");
ДанныеДляОтправки.Вставить("price", 50000);

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

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

Использование ИспользованиеByteOrderMark.НеИспользовать критически важно, так как многие внешние системы (особенно на базе Linux/Go/Node.js) некорректно обрабатывают BOM-символы в начале JSON-строки.

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

Теперь мы готовы отправить наш запрос через созданное ранее соединение. Выясним, какой метод использовать. Для отправки данных обычно используется ВызватьHTTPМетод или специализированный метод ОтправитьДляОбъекта. После выполнения мы получаем объект HTTPОтвет, который содержит код состояния и тело ответа.


Попытка
    Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос);
    КодСостояния = Ответ.КодСостояния;
    
    Если КодСостояния = 200 Или КодСостояния = 201 Тогда
        // Обработка успешного ответа
        ТекстОтвета = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
        ВыполнитьПарсингОтвета(ТекстОтвета);
    Иначе
        Сообщить("Сервер вернул ошибку. Код: " + КодСостояния);
        Сообщить("Текст ошибки: " + Ответ.ПолучитьТелоКакСтроку());
    КонецЕсли;
Исключение
    Сообщить("Произошла ошибка при установке соединения: " + ОписаниеОшибки());
КонецПопытки;

Парсинг полученного JSON-ответа

Когда мы получили ответ от сервера в виде строки, нам нужно превратить его обратно в объекты 1С (структуры, массивы), чтобы с ними можно было работать в коде. Разберем, как это сделать с помощью ЧтениеJSON.


Процедура ВыполнитьПарсингОтвета(Знач ТекстJSON)
    Чтение = Новый ЧтениеJSON;
    Чтение.УстановитьСтроку(ТекстJSON);
    
    // Превращаем JSON в соответствие или структуру 1С
    Результат = ПрочитатьJSON(Чтение);
    Чтение.Закрыть();
    
    // Теперь мы можем обращаться к данным
    Если ТипЗнч(Результат) = Тип("Структура") Тогда
        Если Результат.Свойство("status") И Результат.status = "success" Тогда
            Сообщить("Операция успешно завершена!");
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Важные рекомендации при работе с HTTP

В процессе совместной работы над задачами интеграции мы выявили несколько "подводных камней", на которые стоит обратить внимание:

  1. Обработка ошибок: Всегда оборачивайте вызовы Соединение.ОтправитьДляОбъекта или ВызватьHTTPМетод в блоки Попытка...Исключение. Сетевые сбои неизбежны, и программа не должна завершаться аварийно.
  2. Кодировки: По стандарту JSON использует кодировку UTF-8. Всегда явно указывайте её при получении тела из строки и при чтении ответа.
  3. Таймауты: Не оставляйте таймаут по умолчанию (он может быть бесконечным или слишком долгим). Для интерактивных операций пользователя лучше ставить 5–10 секунд, для фоновых заданий — до 60–120 секунд.
  4. Логирование: При отладке полезно записывать отправляемую строку JSON и полученный ответ в текстовый файл или журнал регистрации. Это значительно упрощает поиск причин ошибок в логике обмена.
  5. Типизация в JSON: Помните, что 1С при чтении JSON автоматически преобразует даты в строки, если не заданы специальные правила. Если сервер присылает даты в формате ISO 8601, используйте параметры функции ПрочитатьJSON для их корректной конвертации.

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

← На главную