Как настроить авторизацию в API Честный Знак (МДЛП) из 1С и получить токен доступа

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

Работа с системой маркировки «Честный Знак», особенно в части мониторинга движения лекарственных препаратов (МДЛП), требует от разработчика понимания механизмов криптографии и взаимодействия через REST API. В данной статье мы подробно разберем, как реализовать процесс авторизации, какие инструменты 1С использовать и как протестировать функционал в «Песочнице».

Использование типовых механизмов 1С

Прежде чем приступать к написанию собственного кода, проанализируем возможности вашей конфигурации. Для большинства современных решений 1С (таких как 1С:Розница 2.3, 1С:Управление торговлей 11 или 1С:Бухгалтерия 3.0) фирма «1С» разработала специальный программный модуль — Библиотеку интеграции с МДЛП (БИМД).

Если ваша конфигурация поддерживает БИМД, мы рекомендуем использовать штатные средства настройки. Разберем по шагам, что для этого нужно:

  1. Перейдем в раздел Администрирование — Настройки номенклатуры — Маркировка.
  2. Включим опцию ведения учета маркируемых лекарственных препаратов.
  3. В справочнике Организации для нужной фирмы укажем параметры подключения к МДЛП.
  4. Настроим сертификат УКЭП (Усиленная квалифицированная электронная подпись) непосредственно в интерфейсе 1С. Программа сама будет подписывать запросы к API, используя установленное криптографическое ПО (например, КриптоПро CSP).

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

Программная реализация авторизации через API

Если ваша задача требует индивидуального подхода или конфигурация сильно изменена, рассмотрим, как реализовать авторизацию вручную. Процесс получения токена доступа (Access Token) в МДЛП является двухэтапным. Проанализируем этот алгоритм.

Этап 1: Получение случайного кода (challenge). Сначала мы должны запросить у сервера уникальную строку данных, которую необходимо будет подписать сертификатом. Рассмотрим пример формирования запроса:


// Подготовка заголовков
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "application/json;charset=UTF-8");

// Создание соединения с сервером Песочницы
СоединениеHTTP = Новый HTTPСоединение("api.sb.mdlp.crpt.ru", , , , , , Новый ЗащищенноеСоединениеOpenSSL());

// Запрос на получение ключа авторизации
Запрос = Новый HTTPЗапрос("/api/v1/auth", Заголовки);

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

Этап 2: Подписание данных и получение токена. Полученную из ответа строку (поле data) нужно подписать вашей УКЭП. Обратите внимание на важный нюанс: МДЛП ожидает подпись в формате отсоединенной (detached) подписи CMS в кодировке Base64.

Разберем пример кода для подписания и отправки финального запроса:


// Предположим, РазборОтвета — это структура, полученная из JSON первого этапа
ДанныеДляПодписи = РазборОтвета.data;
ИдентификаторЗапроса = РазборОтвета.code; // uuid или код сессии

// Используем типовой механизм 1С для подписания (если подключена БСП)
ПодписанныеДанные = ""; // Сюда поместим результат подписи в Base64
Отпечаток = "ВАШ_ОТПЕЧАТОК_СЕРТИФИКАТА";

// Важно: bDetached должен быть Истина (True)
Если НЕ МенеджерКриптографии.Подписать(ДанныеДляПодписи, ПодписанныеДанные, Отпечаток, Истина) Тогда
    ВызватьИсключение "Ошибка при подписании данных";
КонецЕсли;

// Формируем тело запроса для получения токена
СтруктураТокена = Новый Структура;
СтруктураТокена.Вставить("code", ИдентификаторЗапроса);
СтруктураТокена.Вставить("signature", ПодписанныеДанные);

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

// Отправляем запрос на получение токена
ЗапросТокена = Новый HTTPЗапрос("/api/v1/token", Заголовки);
ЗапросТокена.УстановитьТелоИзСтроки(ТелоЗапроса);
ОтветТокена = СоединениеHTTP.ОтправитьДляОбъекта(ЗапросТокена);

Важные технические особенности работы с API

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

Тестирование в «Песочнице» (Sandbox)

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

Для эффективного тестирования в «Песочнице» рекомендуется:

  1. Зарегистрировать личный кабинет в тестовом контуре (адреса API там отличаются префиксом sb или sandbox).
  2. Использовать виртуальные сертификаты, которые часто предоставляет сам оператор ЦРПТ для разработчиков.
  3. Для проверки работы с товаром воспользуйтесь разделом «Эмиссия» в тестовом ЛК, чтобы создать виртуальные коды маркировки. Это позволит вам имитировать приемку и списание товара, не привлекая реальных поставщиков.

Совет: Если вам нужно протестировать логику списания в промышленном контуре, вы можете использовать причину «Тестирование в рамках эксперимента», но делайте это осторожно и только с реальными кодами, которые у вас есть на руках.

Ограничения (Rate Limits)

Рассмотрим вопрос производительности. API «Честный Знак» имеет жесткие ограничения на количество запросов в единицу времени. Если ваша обработка будет отправлять сотни запросов в секунду, вы получите ошибку 429 Too Many Requests.

Чтобы избежать этого, внедрим в код механизм пауз (Приостановить) или очередь отправки документов, которая будет обрабатываться фоновым заданием с контролируемой частотой обращения к серверу.

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

← На главную