Необходимо реализовать оплату в приложении через Систему Быстрых Платежей (СБП).
Приложение разработано при помощи Flutter.
При создании заказа сервер возвращает ссылку на оплату через СБП формата
https://qr.nspk.ru/AD100********************LTQEK?type=02&bank=100000000008&sum=54900&cur=RUB&crc=056A
Данную ссылку можно открыть тремя способами:
- Через url_launcher с LaunchMode.externalApp, но таким образом всегда будет открываться один и тот же банк, что неудобно
- Через WebView (либо тем же url_launcher), в таком случае откроется веб-морда СБП, там будет выбор банка, даже будет запоминаться последний выбранный и выводиться первым в списке. Отличный вариант, но он не позволяет стилизовать форму выбора банка под свой дизайн
- Некий магический способ, который неким образом оседлали разработчики многих приложений, например Wildberries, позволяющий прямо в приложении отображать список банков и передавать ссылку на оплату в выбранное банковское приложение
Третий способ является для меня самым аппетитным, но, хоть убей, не могу понять как это сделать.
В "этих ваших интернетах" нет никакой информации о каком-либо SDK под мобильные платформы. У СБП даже нет документации к интеграции их системы. Только в доках банков есть информация о том как запросить у банка ссылку на оплату через СБП.
Нашел на паб.деве вот
такой пакетик. При внутреннем тестировании все работало отлично. Формочка рисуется, банк выбирается, открывается, отображается экран оплаты, всё круто.
Однако в продакшене валится тонна жалоб на работу СБП. У кого-то не все банки отображаются, а у кого-то вообще после открытия банковского приложения не отображается форма оплаты. Просто открывается главная страница с картами и счетами. Подобное чаще всего происходит на Huawei телефонах (с гугл-сервисами) и на iOS девайсах.
Sentry такую ситуацию не ловит, а потому я не могу никак отследить причину сего бага.
Кто-нибудь из вас подключал СБП во Флаттер-приложение? Подскажите как вы это делали. Может есть свои наработки для работы с СБП? Поделитесь исходниками, пожалуйста.