Не работает обмен с Честным Знаком после замены сертификата в 1С: Медицина: Больничная аптека: решаем проблему bad_credentials

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

При работе с системой мониторинга движения лекарственных препаратов (МДЛП) пользователи часто сталкиваются с ситуацией, когда после плановой замены сертификата электронной подписи обмен данными между 1С и «Честным Знаком» полностью прекращается. Наиболее распространенная ошибка в этом случае — POST-запрос по адресу /api/v1/token [400] Запрос не может быть исполнен. {"error_code":"api.authentication.bad_credentials"}. Рассмотрим подробно, почему это происходит и как восстановить работоспособность системы.

Разбор причины ошибки bad_credentials

Ошибка bad_credentials (неверные учетные данные) при обращении к API Честного Знака означает, что сервер авторизации не смог сопоставить предоставленную электронную подпись с активным пользователем или параметрами «Учетной системы». Проанализируем основные факторы, вызывающие этот сбой:

  1. Дублирование профилей в ЛК МДЛП: Это самая частая причина. В системе Честный Знак один и тот же сертификат (или СНИЛС сотрудника) может оказаться привязан к нескольким учетным записям — например, к активной и архивной. При попытке авторизации API может «подтягивать» данные удаленного пользователя.
  2. Переход на сертификаты физических лиц (МЧД): Новые сертификаты сотрудников не содержат ИНН организации. Для работы с ними требуются специальные механизмы передачи GUID машиночитаемой доверенности, которые могут отсутствовать в старых релизах 1С (например, в версии 2.2.6.5).
  3. Несоответствие ИНН: Если сертификат был выпущен на сотрудника, который числится в нескольких организациях в системе МДЛП, возникает конфликт идентификации.
  4. Кэширование сессий: 1С может хранить старый токен авторизации и пытаться использовать его даже после того, как в настройках был выбран новый сертификат.

Шаг 1. Проверка и очистка профилей в Личном кабинете Честного Знака

Разберем ситуацию, которая помогла решить проблему большинству пользователей. Выясним, нет ли в системе «зависших» связей. Для этого необходимо зайти в личный кабинет МДЛП под правами администратора.

Проанализируем раздел «Администрирование» -> «Пользователи». Часто бывает так, что после замены сертификата вы добавили новый сертификат пользователю, но в системе остался старый пользователь (возможно, помещенный в архив), за которым числится тот же СНИЛС или тот же отпечаток подписи. Рассмотрим алгоритм действий:

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

Шаг 2. Настройка «Учетной системы» в 1С

Посмотрим на настройки интеграции внутри программы 1С. Для взаимодействия через API используется пара параметров: Client_ID и Client_Secret. Ошибка 400 часто возникает, если эти данные устарели или не соответствуют новому сертификату.

Выполним следующие действия:

  1. Зайдите в ЛК МДЛП в раздел «Администрирование» -> «Учетные системы».
  2. Убедитесь, что для вашей базы создана актуальная учетная система.
  3. Если замена сертификата сопровождалась изменением прав доступа, попробуйте перегенерировать Client_Secret и обновить его в 1С в настройках параметров обмена с МДЛП.

Шаг 3. Очистка устаревших ключей сессий в 1С

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

Рассмотрим, как очистить эти данные вручную (требуются права администратора 1С):

  1. Перейдите в меню «Функции для технического специалиста» (или «Все функции»).
  2. Найдите Регистр сведений Ключи сессий МДЛП (название может незначительно отличаться в зависимости от версии БСП, например, Параметры подключения МДЛП).
  3. Удалите записи, связанные с организацией, по которой возникла ошибка.
  4. Попробуйте выполнить обмен заново. Программа будет вынуждена сформировать новый запрос /api/v1/token с использованием актуального сертификата.

Шаг 4. Учет особенностей МЧД в старых конфигурациях

Если ваша конфигурация 1С: Медицина. Больничная аптека имеет версию ниже 2.2.8, она может некорректно работать с сертификатами физических лиц. Проблема заключается в структуре JSON-запроса на получение токена. Для физического лица необходимо передавать идентификатор доверенности. Автоматизировать резервное копирование, тестирование и установку актуальных релизов для перехода на версию с поддержкой МЧД можно через программу для пакетного обновления 1С.

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


// Пример структуры запроса на получение токена с учетом МЧД
ЗапросJSON = Новый Структура;
ЗапросJSON.Вставить("signature",  СтрокаПодписи);
ЗапросJSON.Вставить("data",       ДанныеАвторизации);
Если ИспользуетсяМЧД Тогда
    ЗапросJSON.Вставить("power_of_attorney", ИдентификаторДоверенности);
КонецЕсли;

Если вы используете версию 2.2.6.5, данный параметр power_of_attorney может просто не передаваться. В этой ситуации единственным надежным решением является обновление конфигурации до актуального релиза, где механизмы работы с МЧД полностью реализованы и протестированы. Если обновление невозможно (из-за доработок), необходимо пригласить программиста для ручного переноса функционала авторизации из свежих версий БСП (Библиотеки стандартных подсистем) в вашу базу.

Шаг 5. Проверка привязки к СНИЛС и "Фарма.Просто"

Выясним еще один нюанс, упомянутый участниками сообщества. Если сертификат сотрудника использовался в сторонних приложениях (например, «Фарма.Просто») для другой организации, система Честный Знак могла жестко закрепить этот сертификат за конкретным user_id.

Важный момент: если сотрудник работает по совместительству в двух разных аптечных сетях, для каждой из них в МДЛП должен быть четко определен его профиль. Конфликт возникает, когда API пытается авторизовать пользователя в контексте Организации А, используя учетные данные, которые «залипли» за Организацией Б.

Резюме и рекомендации

Для исправления ошибки «bad_credentials» после замены сертификата рекомендуем придерживаться следующего плана действий:

Следование этим шагам позволит вам быстро восстановить обмен с системой маркировки и избежать простоев в работе аптечного пункта.

← На главную