При работе с системой мониторинга движения лекарственных препаратов (МДЛП) пользователи часто сталкиваются с ситуацией, когда после плановой замены сертификата электронной подписи обмен данными между 1С и «Честным Знаком» полностью прекращается. Наиболее распространенная ошибка в этом случае — POST-запрос по адресу /api/v1/token [400] Запрос не может быть исполнен. {"error_code":"api.authentication.bad_credentials"}. Рассмотрим подробно, почему это происходит и как восстановить работоспособность системы.
Ошибка bad_credentials (неверные учетные данные) при обращении к API Честного Знака означает, что сервер авторизации не смог сопоставить предоставленную электронную подпись с активным пользователем или параметрами «Учетной системы». Проанализируем основные факторы, вызывающие этот сбой:
Разберем ситуацию, которая помогла решить проблему большинству пользователей. Выясним, нет ли в системе «зависших» связей. Для этого необходимо зайти в личный кабинет МДЛП под правами администратора.
Проанализируем раздел «Администрирование» -> «Пользователи». Часто бывает так, что после замены сертификата вы добавили новый сертификат пользователю, но в системе остался старый пользователь (возможно, помещенный в архив), за которым числится тот же СНИЛС или тот же отпечаток подписи. Рассмотрим алгоритм действий:
Посмотрим на настройки интеграции внутри программы 1С. Для взаимодействия через API используется пара параметров: Client_ID и Client_Secret. Ошибка 400 часто возникает, если эти данные устарели или не соответствуют новому сертификату.
Выполним следующие действия:
Client_Secret и обновить его в 1С в настройках параметров обмена с МДЛП.Проанализируем техническую сторону вопроса. 1С сохраняет результаты успешной авторизации (токены) в специальном регистре, чтобы не запрашивать их при каждом действии. После смены сертификата старый токен становится недействительным, но программа может продолжать его использовать.
Рассмотрим, как очистить эти данные вручную (требуются права администратора 1С):
Ключи сессий МДЛП (название может незначительно отличаться в зависимости от версии БСП, например, Параметры подключения МДЛП)./api/v1/token с использованием актуального сертификата.Если ваша конфигурация 1С: Медицина. Больничная аптека имеет версию ниже 2.2.8, она может некорректно работать с сертификатами физических лиц. Проблема заключается в структуре JSON-запроса на получение токена. Для физического лица необходимо передавать идентификатор доверенности. Автоматизировать резервное копирование, тестирование и установку актуальных релизов для перехода на версию с поддержкой МЧД можно через программу для пакетного обновления 1С.
Рассмотрим пример кода, который отвечает за формирование заголовков и тела запроса при авторизации. В новых версиях библиотек интеграции 1С это выглядит примерно так:
// Пример структуры запроса на получение токена с учетом МЧД
ЗапросJSON = Новый Структура;
ЗапросJSON.Вставить("signature", СтрокаПодписи);
ЗапросJSON.Вставить("data", ДанныеАвторизации);
Если ИспользуетсяМЧД Тогда
ЗапросJSON.Вставить("power_of_attorney", ИдентификаторДоверенности);
КонецЕсли;
Если вы используете версию 2.2.6.5, данный параметр power_of_attorney может просто не передаваться. В этой ситуации единственным надежным решением является обновление конфигурации до актуального релиза, где механизмы работы с МЧД полностью реализованы и протестированы. Если обновление невозможно (из-за доработок), необходимо пригласить программиста для ручного переноса функционала авторизации из свежих версий БСП (Библиотеки стандартных подсистем) в вашу базу.
Выясним еще один нюанс, упомянутый участниками сообщества. Если сертификат сотрудника использовался в сторонних приложениях (например, «Фарма.Просто») для другой организации, система Честный Знак могла жестко закрепить этот сертификат за конкретным user_id.
Важный момент: если сотрудник работает по совместительству в двух разных аптечных сетях, для каждой из них в МДЛП должен быть четко определен его профиль. Конфликт возникает, когда API пытается авторизовать пользователя в контексте Организации А, используя учетные данные, которые «залипли» за Организацией Б.
Для исправления ошибки «bad_credentials» после замены сертификата рекомендуем придерживаться следующего плана действий:
Следование этим шагам позволит вам быстро восстановить обмен с системой маркировки и избежать простоев в работе аптечного пункта.