В современной разработке на платформе 1С:Предприятие одной из самых частых задач является интеграция с внешними сервисами. Будь то обмен с государственными информационными системами, маркетплейсами или внутренними корпоративными API, программисту необходимо владеть инструментами работы с протоколом HTTP и форматом данных JSON. В данной статье мы подробно разберем, как правильно выстроить процесс обмена данными, от настройки соединения до парсинга ответа.
Первым делом проанализируем, что необходимо для установления связи с удаленным сервером. Для этого в 1С используется объект HTTPСоединение. Нам важно учитывать, использует ли сервер защищенный протокол (HTTPS). Если сервер требует SSL-соединение, необходимо инициализировать объект ЗащищенноеСоединениеOpenSSL.
Рассмотрим пример создания базового соединения. Мы укажем адрес сервера, порт и параметры безопасности. Обратите внимание, что в адресе сервера не должно быть префиксов http:// или https://, только доменное имя или IP-адрес.
ИмяСервера = "api.example.com";
Порт = 443; // Стандартный порт для HTTPS
Сертификаты = Новый ЗащищенноеСоединениеOpenSSL();
Соединение = Новый HTTPСоединение(ИмяСервера, Порт, , , , 30, Сертификаты);
Разберем параметры подробнее: мы установили таймаут в 30 секунд, что является оптимальным для большинства веб-сервисов, чтобы избежать бесконечного ожидания ответа при проблемах с сетью.
После того как соединение установлено, нам необходимо подготовить сам запрос. Для этого мы создаем объект 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 " + ТокенДоступа);
Перейдем к формированию тела запроса. В 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);
ВыполнитьПарсингОтвета(ТекстОтвета);
Иначе
Сообщить("Сервер вернул ошибку. Код: " + КодСостояния);
Сообщить("Текст ошибки: " + Ответ.ПолучитьТелоКакСтроку());
КонецЕсли;
Исключение
Сообщить("Произошла ошибка при установке соединения: " + ОписаниеОшибки());
КонецПопытки;
Когда мы получили ответ от сервера в виде строки, нам нужно превратить его обратно в объекты 1С (структуры, массивы), чтобы с ними можно было работать в коде. Разберем, как это сделать с помощью ЧтениеJSON.
Процедура ВыполнитьПарсингОтвета(Знач ТекстJSON)
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(ТекстJSON);
// Превращаем JSON в соответствие или структуру 1С
Результат = ПрочитатьJSON(Чтение);
Чтение.Закрыть();
// Теперь мы можем обращаться к данным
Если ТипЗнч(Результат) = Тип("Структура") Тогда
Если Результат.Свойство("status") И Результат.status = "success" Тогда
Сообщить("Операция успешно завершена!");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
В процессе совместной работы над задачами интеграции мы выявили несколько "подводных камней", на которые стоит обратить внимание:
Соединение.ОтправитьДляОбъекта или ВызватьHTTPМетод в блоки Попытка...Исключение. Сетевые сбои неизбежны, и программа не должна завершаться аварийно.ПрочитатьJSON для их корректной конвертации.Мы проанализировали полный цикл работы с HTTP в 1С. Понимание этих основ позволяет интегрировать вашу конфигурацию практически с любым современным веб-сервисом, обеспечивая надежный и быстрый обмен данными.