Как в 1С отправить POST и GET запросы к внешнему API с использованием заголовков и авторизации?

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

Интеграция 1С с внешними сервисами (мессенджеры, платежные системы, CRM) через REST API — одна из самых частых задач современного разработчика. В этой статье мы подробно разберем, как правильно сконструировать HTTP-запрос, передать заголовки авторизации и отправить данные методами GET и POST, опираясь на практический опыт реализации интеграции с сервисом Pact.im.

Основные объекты для работы с HTTP в 1С

Для взаимодействия с внешним миром в платформе 1С:Предприятие 8.3 используются два ключевых объекта: HTTPСоединение и HTTPЗапрос. Разберем их роли:

  1. HTTPСоединение — отвечает за "транспорт". Здесь мы указываем адрес сервера, порт и настройки безопасности (SSL).
  2. HTTPЗапрос — отвечает за "содержимое". Здесь мы прописываем путь к конкретному ресурсу (endpoint), заголовки (headers) и тело запроса (body).

Рассмотрим по шагам процесс создания базового запроса с авторизацией.

Шаг 1. Настройка защищенного соединения (SSL)

Почти все современные API работают по протоколу HTTPS. Для этого в 1С необходимо создать объект защищенного соединения. Проанализируем стандартный подход:


ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL;
Сервер = "api.pact.im";
Соединение = Новый HTTPСоединение(Сервер, , , , , , ЗащищенноеСоединение);

Обратите внимание, что в конструктор HTTPСоединение передается только доменное имя сервера без протокола (не "https://api.pact.im", а просто "api.pact.im").

Шаг 2. Формирование GET-запроса с заголовками

Предположим, нам нужно получить список чатов. В документации к API часто указано, что токен авторизации нужно передавать в заголовке X-Private-Api-Token. Выясним, как это реализовать в коде:


// Создаем объект запроса
Запрос = Новый HTTPЗапрос;

// Указываем путь к ресурсу (без адреса сервера)
Запрос.АдресРесурса = "p1/companies/COMPANY_ID/conversations";

// Добавляем заголовок авторизации
Запрос.Заголовки.Вставить("X-Private-Api-Token", "ВАШ_ТОКЕН");

// Отправляем GET-запрос
Ответ = Соединение.Получить(Запрос);

// Проверяем результат
Если Ответ.КодСостояния = 200 Тогда
    ТекстОтвета = Ответ.ПолучитьТелоКакСтроку();
    // Обрабатываем JSON
КонецЕсли;

Шаг 3. Реализация POST-запроса

Ситуация усложняется, когда нужно не просто получить данные, а отправить их (например, отправить сообщение в мессенджер). Для этого используется метод POST. Важно понимать, что в 1С для выполнения POST-запроса используется метод ОтправитьДляОбработки() объекта HTTPСоединение.

Рассмотрим пример, где параметры передаются прямо в строке ресурса (Query Parameters), как это часто бывает в простых интеграциях:


Запрос = Новый HTTPЗапрос;
Запрос.Заголовки.Вставить("X-Private-Api-Token", "ВАШ_ТОКЕН");

// Текст сообщения для отправки
ТекстСообщения = "Привет из 1С!";

// Формируем адрес ресурса с параметрами
// ВАЖНО: параметры в URL должны быть закодированы!
Адрес = "p1/companies/51165/conversations/18475250/messages";
Адрес = Адрес + "?message=" + КодироватьСтроку(ТекстСообщения, СпособКодированияСтроки.КодировкаURL);

Запрос.АдресРесурса = Адрес;

// Выполняем POST-запрос
Ответ = Соединение.ОтправитьДляОбработки(Запрос);

Важный нюанс: метод КодироватьСтроку критически важен. Если в вашем сообщении будут пробелы, спецсимволы или кириллица, без кодирования запрос вернет ошибку или данные будут переданы некорректно.

Шаг 4. Передача данных в теле запроса (JSON Body)

Хотя в обсуждении на форуме пользователь передавал данные через 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, длина которой ограничена.

Шаг 5. Отладка и просмотр результата

Когда запрос "не идет", первым делом нужно проанализировать ответ сервера. Мы можем получить не только текстовое тело ответа, но и код состояния, который подскажет, в чем проблема:

Чтобы увидеть текст ошибки, который присылает сервер (многие API пишут там конкретную причину), используйте метод Ответ.ПолучитьТелоКакСтроку() даже в случае ошибки.

Прием данных: Вебхуки (Webhooks)

В завершение проанализируем вопрос получения уведомлений от внешнего сервиса в 1С. Если вы хотите, чтобы 1С мгновенно узнавала о новом сообщении в мессенджере, вам понадобятся HTTP-сервисы.

Это специальные объекты в дереве метаданных 1С, которые позволяют вашей базе самой стать мини-сервером. Порядок действий следующий:

  1. Создаете в конфигурации HTTP-сервис.
  2. Описываете Шаблон URL и Метод (обычно POST).
  3. Пишете код в модуле метода для обработки входящего запроса.
  4. Публикуете базу на веб-сервере (Apache или IIS).
  5. Прописываете URL вашей публикации в личном кабинете стороннего сервиса в разделе Webhooks.

Таким образом, интеграция становится двухсторонней: вы отправляете запросы через HTTPСоединение, а сервис присылает вам данные через HTTP-сервис.

← На главную