Интеграция 1С с внешними сервисами (мессенджеры, платежные системы, CRM) через REST API — одна из самых частых задач современного разработчика. В этой статье мы подробно разберем, как правильно сконструировать HTTP-запрос, передать заголовки авторизации и отправить данные методами GET и POST, опираясь на практический опыт реализации интеграции с сервисом Pact.im.
Для взаимодействия с внешним миром в платформе 1С:Предприятие 8.3 используются два ключевых объекта: HTTPСоединение и HTTPЗапрос. Разберем их роли:
Рассмотрим по шагам процесс создания базового запроса с авторизацией.
Почти все современные API работают по протоколу HTTPS. Для этого в 1С необходимо создать объект защищенного соединения. Проанализируем стандартный подход:
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL;
Сервер = "api.pact.im";
Соединение = Новый HTTPСоединение(Сервер, , , , , , ЗащищенноеСоединение);
Обратите внимание, что в конструктор HTTPСоединение передается только доменное имя сервера без протокола (не "https://api.pact.im", а просто "api.pact.im").
Предположим, нам нужно получить список чатов. В документации к API часто указано, что токен авторизации нужно передавать в заголовке X-Private-Api-Token. Выясним, как это реализовать в коде:
// Создаем объект запроса
Запрос = Новый HTTPЗапрос;
// Указываем путь к ресурсу (без адреса сервера)
Запрос.АдресРесурса = "p1/companies/COMPANY_ID/conversations";
// Добавляем заголовок авторизации
Запрос.Заголовки.Вставить("X-Private-Api-Token", "ВАШ_ТОКЕН");
// Отправляем GET-запрос
Ответ = Соединение.Получить(Запрос);
// Проверяем результат
Если Ответ.КодСостояния = 200 Тогда
ТекстОтвета = Ответ.ПолучитьТелоКакСтроку();
// Обрабатываем JSON
КонецЕсли;
Ситуация усложняется, когда нужно не просто получить данные, а отправить их (например, отправить сообщение в мессенджер). Для этого используется метод POST. Важно понимать, что в 1С для выполнения POST-запроса используется метод ОтправитьДляОбработки() объекта HTTPСоединение.
Рассмотрим пример, где параметры передаются прямо в строке ресурса (Query Parameters), как это часто бывает в простых интеграциях:
Запрос = Новый HTTPЗапрос;
Запрос.Заголовки.Вставить("X-Private-Api-Token", "ВАШ_ТОКЕН");
// Текст сообщения для отправки
ТекстСообщения = "Привет из 1С!";
// Формируем адрес ресурса с параметрами
// ВАЖНО: параметры в URL должны быть закодированы!
Адрес = "p1/companies/51165/conversations/18475250/messages";
Адрес = Адрес + "?message=" + КодироватьСтроку(ТекстСообщения, СпособКодированияСтроки.КодировкаURL);
Запрос.АдресРесурса = Адрес;
// Выполняем POST-запрос
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Важный нюанс: метод КодироватьСтроку критически важен. Если в вашем сообщении будут пробелы, спецсимволы или кириллица, без кодирования запрос вернет ошибку или данные будут переданы некорректно.
Хотя в обсуждении на форуме пользователь передавал данные через URL, правильнее и надежнее передавать сложные данные (структуры, массивы) в теле запроса в формате JSON. Разберем, как это сделать правильно:
// 1. Формируем структуру данных
ДанныеСообщения = Новый Структура;
ДанныеСообщения.Вставить("message", "Текст сообщения");
ДанныеСообщения.Вставить("attachments_ids", Новый Массив);
// 2. Сериализуем в JSON
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ДанныеСообщения);
СтрокаJSON = ЗаписьJSON.Закрыть();
// 3. Настраиваем запрос
Запрос = Новый HTTPЗапрос("p1/companies/51165/messages");
Запрос.Заголовки.Вставить("X-Private-Api-Token", "ВАШ_ТОКЕН");
Запрос.Заголовки.Вставить("Content-Type", "application/json"); // Указываем тип контента
// Устанавливаем тело запроса
Запрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8);
// 4. Отправляем
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Этот способ является стандартом для большинства современных API, так как позволяет передавать неограниченные объемы данных, в отличие от строки URL, длина которой ограничена.
Когда запрос "не идет", первым делом нужно проанализировать ответ сервера. Мы можем получить не только текстовое тело ответа, но и код состояния, который подскажет, в чем проблема:
X-Private-Api-Token.АдресРесурса. Проверьте правильность ID компании или ID чата.Чтобы увидеть текст ошибки, который присылает сервер (многие API пишут там конкретную причину), используйте метод Ответ.ПолучитьТелоКакСтроку() даже в случае ошибки.
В завершение проанализируем вопрос получения уведомлений от внешнего сервиса в 1С. Если вы хотите, чтобы 1С мгновенно узнавала о новом сообщении в мессенджере, вам понадобятся HTTP-сервисы.
Это специальные объекты в дереве метаданных 1С, которые позволяют вашей базе самой стать мини-сервером. Порядок действий следующий:
HTTP-сервис.Шаблон URL и Метод (обычно POST).Таким образом, интеграция становится двухсторонней: вы отправляете запросы через HTTPСоединение, а сервис присылает вам данные через HTTP-сервис.