Как настроить интеграцию 1С по API для получения данных контрагента по ИНН?

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

Часто в корпоративной разработке возникает задача автоматической проверки контрагентов или получения их реквизитов через сторонние сервисы по ИНН. Рассмотрим подробнее, как в 1С организовать взаимодействие с современными веб-сервисами, требующими передачи JWT-токенов авторизации и работающими с форматом обмена JSON.

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

Шаг 1. Создание защищенного HTTP-соединения

Для начала выясним причину, почему базовое создание объекта HTTPСоединение из примеров прошлых лет может не работать. Современные API всегда работают через защищенный протокол HTTPS (порт 443). Если мы просто напишем создание соединения с указанием адреса сервера, платформа попытается использовать обычный HTTP, что приведет к ошибке.

Чтобы соединение установилось корректно, мы обязательно должны использовать защищенный канал, передав в конструктор параметр ЗащищенноеСоединениеOpenSSL. Посмотрим на правильный пример инициализации соединения:


ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
// Указываем адрес сервера, порт 443 и передаем объект защищенного соединения
Соединение = Новый HTTPСоединение("api.example.com", 443, , , , , ЗащищенноеСоединение);

Шаг 2. Авторизация и передача JWT-токена

Специфика современных сервисов заключается в том, что логин и пароль обычно не передаются в каждом запросе. Как мы выяснили из обсуждения, сначала мы (разово или периодически) обращаемся к сервису за токеном, а затем при каждом запросе передаем полученный JWT-токен.

Рассмотрим два способа передачи такого токена в 1С, зависящих от версии вашей платформы:

  1. Традиционный подход: Передача через заголовки. Мы просто добавляем заголовок Authorization с типом Bearer.
  2. Современный подход (начиная с платформы 8.3.21): Использование специализированного объекта платформы ТокенДоступа.

Посмотрим на пример кода, реализующий оба подхода:


HTTPЗапрос = Новый HTTPЗапрос("/api/v1/counterparty");

// 1. Традиционный способ (работает на всех версиях)
HTTPЗапрос.Заголовки.Вставить("Authorization", "Bearer " + СтрокаТокена);

// 2. Современный способ (8.3.21+)
// Токен = Новый ТокенДоступа(СтрокаТокена);
// HTTPЗапрос.ДобавитьТокенДоступа(Токен);

Шаг 3. Подготовка тела запроса (GraphQL / JSON)

Многие современные сервисы используют архитектуру GraphQL, которая требует специфичной структуры тела POST-запроса. Нам нужно передать JSON, содержащий узлы query (сам запрос) и variables (параметры запроса, такие как ИНН и иногда сам токен авторизации).

Чтобы сформировать правильный JSON, создадим в 1С объект Структура, заполним его необходимыми ключами и сериализуем в строку с помощью объекта ЗаписьJSON.


// Формируем структуру переменных (ИНН)
СтруктураПеременных = Новый Структура;
СтруктураПеременных.Вставить("inn", "7707083893");

// Формируем общую структуру запроса
ТелоЗапроса = Новый Структура;
ТелоЗапроса.Вставить("query", "query GetCounterparty($inn: String!) { ... }");
ТелоЗапроса.Вставить("variables", СтруктураПеременных);

// Сериализуем структуру в строку JSON
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
ЗаписатьJSON(Запись, ТелоЗапроса);
СтрокаJSON = Запись.Закрыть();

// Устанавливаем сформированную строку в качестве тела HTTP-запроса
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);

Шаг 4. Отправка запроса и обработка ответа

Теперь, когда у нас есть готовое защищенное соединение и сформированный HTTPЗапрос с нужными заголовками и телом, мы можем отправить его на сервер методом POST и получить ответ.

Разберем, как получить и прочитать данные ответа. Ответ от сервера также приходит в формате JSON, поэтому для извлечения полезных данных (например, адреса страницы контрагента) мы воспользуемся объектом ЧтениеJSON.


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

Если Ответ.КодСостояния = 200 Тогда
    Чтение = Новый ЧтениеJSON;
    Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
    
    // Десериализуем JSON-ответ в структуру 1С
    ДанныеОтвета = ПрочитатьJSON(Чтение);
    Чтение.Закрыть();
    
    // Получаем нужные данные из структуры
    // Например: СсылкаНаСтраницу = ДанныеОтвета.data.url;
Иначе
    // Обработка ошибки
    Сообщить("Ошибка при обращении к API. Код статуса: " + Ответ.КодСостояния);
КонецЕсли;

Таким образом, мы построили полноценную цепочку интеграции. Мы проанализировали важность использования ЗащищенноеСоединениеOpenSSL, рассмотрели способы работы с JWT-токенами через объект ТокенДоступа и научились упаковывать параметры (такие как ИНН) в узел variables для запросов в формате GraphQL.

← На главную