Заказчику нужен был бэкенд для оплаты по платёжному QR-коду. Внутри такого QR лежит строка формата ST00012 по ГОСТ Р 56042-2014 — получатель, счёт, БИК, сумма, назначение платежа. Задача — по этой строке выдавать ссылки, которые открывают оплату сразу в мобильном приложении выбранного банка, а для покупателя сделать простые страницы: выбрать банк и перейти к оплате с телефона.
Работа шла по техническому заданию в два этапа, с жёсткими требованиями к валидации и обработке ошибок.
Сделал сервис на Python и FastAPI.
Первый этап — API генерации ссылок. Эндпоинт принимает банк, операционную систему и строку ГОСТ. Строка разбирается на поля, суммы приводятся к числу, проверяется наличие всех обязательных реквизитов. На битую строку, неизвестный банк или ОС сервис отвечает понятной ошибкой с причиной, а не падает. Генерация ссылок вынесена в одну функцию — реальные схемы банков подставляются там, остальной код не трогается. Поддержаны Т-Банк, Альфа-Банк, Сбербанк, ВТБ, Газпромбанк, Ozon и Wildberries.
Второй этап — универсальная ссылка для покупателя. Страница сама определяет iOS или Android, запрашивает у сервера ссылки и по очереди пробует открыть приложение банка; если за секунду приложение не открылось, переходит к следующему варианту, а в конце подсказывает установить приложение. Плюс страница выбора банка перед оплатой.
Перед публикацией добавил 15 автотестов — разбор строки, включая битые варианты, ответы API и отдачу страниц, — и оформил страницы под телефон. Документация API генерируется автоматически.
Готовый бэкенд, который превращает платёжный QR в оплату в один тап в приложении нужного банка. Ошибки в реквизитах ловятся на входе с понятным сообщением, поведение закреплено тестами.
Ссылки по ТЗ пока тестового вида — подключение настоящих схем банков сводится к правке одной функции. Код открыт, запуск одной командой, документация API доступна прямо в браузере.