Для реализации системы оплаты через мобильное приложение без использования СБП можно предложить следующую архитектуру:
Идентификация пользователя на кассе/КСО
Пользователь сканирует товары.
При переходе к оплате выбирает оплату через приложение Магнит.
Касса/КСО предлагает пользователю авторизоваться, например, через QR-код, NFC или ввод кода, который связывает кассу и мобильное приложение.
Запуск процесса оплаты
После идентификации касса передает в приложение Магнит информацию о сумме и деталях покупки.
Приложение Магнит открывается на телефоне пользователя (через deep link или push-уведомление).
Пользователь выбирает банк из списка установленных банковских приложений.
Оплата через банк
Приложение Магнит передает данные в выбранное банковское приложение через стандартный протокол (например, через Intent на Android или URL-схему на iOS).
Пользователь подтверждает оплату в банковском приложении.
Оплата через банк
Подтверждение оплаты
Банк отправляет подтверждение об успешной оплате обратно в приложение Магнит.
Приложение Магнит уведомляет кассу/КСО о результате оплаты через серверную часть.
Касса/КСО отображает сообщение об успешной оплате.
Нефункциональные требования и их обеспечение:
DAU = 1000 в магазине, 500 магазинов, 5 касс в среднем:
Серверная инфраструктура должна быть масштабируемой, использовать балансировщики нагрузки и кэширование.
Оплата за максимум 2 минуты:
Минимизировать задержки на каждом этапе, использовать быстрые протоколы обмена.
Страница оплаты открывается максимум за 250 мс:
Использовать deep linking, предварительную загрузку данных в приложении Магнит.
Пример взаимодействия:
Пользователь на кассе сканирует товары.
Касса генерирует QR-код с информацией о покупке и сессии.
Пользователь сканирует QR-код в приложении Магнит.
Приложение Магнит показывает сумму и предлагает выбрать банк.
После выбора банка происходит переход в банковское приложение для оплаты.
После успешной оплаты возвращается подтверждение, касса получает сигнал и завершает транзакцию.