Легкий путь к власти: тестируем API Госуслуг с PyCades без головной боли

Работы с API Госуслуг с помощью PyCades

ЕСИА и ЕПГУ: автоматизация заявлений и результатов

На Хабре есть много статей о СМЭВ, но информации о работе с API Госуслуг через КриптоПро и ключи API недостаточно. Это кажется странным, учитывая, что КриптоПро предназначен для работы с ЭЦП и Госуслугами. В моей статье я расскажу, как использовать Python, PyCades – обертку для КриптоПро, и ключи API для автоматизации процессов. Несмотря на наличие руководств по ЕСИА и ЕПГУ, автоматизация работы с ними через ключи API описана недостаточно подробно. Шаблон сервиса в моей статье позволяет протестировать все эндпоинты и услуги. Например, отправку документов на подпись в «Госключ», работу с миграционным и регистрационным учетом для гостиниц, предоставление информации о ходе исполнительного производства онлайн и многое другое. Запросы отличаются только форматом вложений и некоторыми полями идентификаторов.

Подготовка окружения: инструменты и ключи

Я использую Docker, чтобы упростить настройку окружения. Для того чтобы всё заработало, необходимо правильно подготовить систему и, как минимум, зарегистрировать информационную систему (ИС) в тестовой среде API Госуслуг. Приступим к настройке.

1. Общая информация

Тестовая среда

Адрес

ЕСИА

esia-portal1.test.gosuslugi.ru

ЕПГУ

svcdev-beta.test.gosuslugi.ru

Технологический портал ЕПГУ

svcdev-partners.test.gosuslugi.ru

Технологический портал ЕСИА

esia-portal1.test.gosuslugi.ru/console/tech/

2. Регистрация физических лиц и организаций в ЕСИА

Регистрация физического лица

Регистрация организации в ЕСИА

3. Получение тестового сертификата и подписи

Запрос и установка сертификата и подписи

4. Регистрация информационной системы (ИС)

Регистрация и настройка ИС

5. Получение тестового API-ключа

Запрос API-ключа

6. Настройка взаимодействия с API Госуслуг

Получение токена доступа

Настройка сертификатов и безопасности

7. Работа с заявками на предоставление услуги

Резервирование номера заявки

Формирование и отправка XML-запроса

8. Обработка ответов

Получение статуса и загрузка ответа

Можно потрогать в постмане (ток ногами не бейте там дублируется для проекта и напрямую для госуслуг, и нет времени на до внесение описаний из документации)

9. Интеграция с фронтендом и бэкендом

Простой интерфейс (React)

Работа с бэкендом (FastAPI)

Библиотека CryptoPro

В проекте epgu используется версия csp/50/12997rc2 linux-amd64_deb.tgz, доступная как триал. После каждого запуска контейнера отчёт 90 дней начинается заново. Версия PyCades взята с сайта CryptoPro (0.1.44290). Можно поэксперементировать с новой версией

Настройка контейнера ключей

Файлы закрытого ключа обычно хранятся в папке формата XXX.000, а сертификаты — в .cer. Если при регистрации на тестовом портале использовалась неоткреплённая подпись, убедитесь в её совместимости, выполнив пробную операцию подписи (или воспользовавшись утилитой CryptoPro cryptcp).

Копируем сертификат и ключ в каталог с проектом (можно заменить существующие some.cer и xxx.000) либо использовать собственные имена, указав их в entrypoint.sh и docker-compose.yml.

Пример реализации

git clone https://github.com/yellow444/epgu.git && cd epgu

10. Выход в продуктивную среду

Тестирование и развертывание

Запуск в эксплуатацию

Развертывание через Docker

11. Библиотека на Go

Существует также интересный вариант для тех, кто предпочитает Go: https://github.com/ofstudio/go-api-epgu. Однако для полноценной работы в контейнере или в серверном окружении может потребоваться дополнительная настройка.

12. Заключение

Использование БД

О замечаниях и проблемах

@maksim_sitnikov
12.02.2024 11:30 UTC
Первоисточник

Комментарии

@avangerus
12.02.2024 07:34 UTC
0

спасибо!

@diam80
15.02.2024 19:43 UTC
0

@maksim_sitnikov Скажите, с помощью этого примера я смогу заходить на госуслуги как физ.лицо или как организация?

@maksim_sitnikov
15.02.2024 19:48 UTC
0

С физлицами по ощущениям есть некие траблы. Я это все проделывал год назад, и возможно чтото поменялось. По моему, создать ИС, получить на нее АПИ ключ, и взаимодействовать с другими ИС физлица не смогут. Может это чтобы как то ограничить колличество запросов. А, может, потом и физикам дадут.

@and7ey
25.02.2025 07:24 UTC
0

Было бы интересно получить доступ к своим госуслугам (как физ. лицо) через API. Можно ли как-то получить свой токен из браузера/приложения, подставить их в запросы postman (переделав их на бой)?

@maksim_sitnikov
02.03.2025 17:05 UTC
0

апи это фактически форма. для физиков автоматизация как я понимаю не полагается - у вас же нет массовой работы по регистрации приезжих или множество исполнительный производств. Вот если ИП уже можно. Как вариант селениум токен который в браузере подойдет для апишек которые используются в формах в браузере. для /gusmev/ токен формируется немного по другому. но можете попробовать. Там в корне проекта и в публичных коллекциях тоже, есть постман. Я сейчас добавлю ссылку на него в статью.