Работа с системой маркировки «Честный Знак», особенно в части мониторинга движения лекарственных препаратов (МДЛП), требует от разработчика понимания механизмов криптографии и взаимодействия через REST API. В данной статье мы подробно разберем, как реализовать процесс авторизации, какие инструменты 1С использовать и как протестировать функционал в «Песочнице».
Прежде чем приступать к написанию собственного кода, проанализируем возможности вашей конфигурации. Для большинства современных решений 1С (таких как 1С:Розница 2.3, 1С:Управление торговлей 11 или 1С:Бухгалтерия 3.0) фирма «1С» разработала специальный программный модуль — Библиотеку интеграции с МДЛП (БИМД).
Если ваша конфигурация поддерживает БИМД, мы рекомендуем использовать штатные средства настройки. Разберем по шагам, что для этого нужно:
Преимущество этого метода заключается в том, что 1С берет на себя формирование сложных XML-пакетов и обработку очередей запросов, что критично для стабильной работы.
Если ваша задача требует индивидуального подхода или конфигурация сильно изменена, рассмотрим, как реализовать авторизацию вручную. Процесс получения токена доступа (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.ОтправитьДляОбъекта(ЗапросТокена);
Выясним причину возможных ошибок при интеграции. Рассмотрим наиболее критичные моменты, которые часто упускают разработчики:
401 Unauthorized.data и Data — это разные сущности.Проанализируем ситуацию с тестированием. «Песочница» — это изолированный контур, где вы можете совершать любые операции без риска нарушить реальный оборот товаров. Для отладки и проверки таких REST-запросов можно использовать встроенный HTTP-клиент для 1С с поддержкой авторизации.
Для эффективного тестирования в «Песочнице» рекомендуется:
sb или sandbox).Совет: Если вам нужно протестировать логику списания в промышленном контуре, вы можете использовать причину «Тестирование в рамках эксперимента», но делайте это осторожно и только с реальными кодами, которые у вас есть на руках.
Рассмотрим вопрос производительности. API «Честный Знак» имеет жесткие ограничения на количество запросов в единицу времени. Если ваша обработка будет отправлять сотни запросов в секунду, вы получите ошибку 429 Too Many Requests.
Чтобы избежать этого, внедрим в код механизм пауз (Приостановить) или очередь отправки документов, которая будет обрабатываться фоновым заданием с контролируемой частотой обращения к серверу.
Таким образом, мы разобрали основные подходы к использованию API. Сочетание штатных библиотек 1С для рутинных операций и собственных HTTP-запросов для специфических задач позволит создать надежную систему интеграции с маркировкой.