Как интегрировать СБП во Flutter приложение?

Необходимо реализовать оплату в приложении через Систему Быстрых Платежей (СБП).
Приложение разработано при помощи Flutter.
При создании заказа сервер возвращает ссылку на оплату через СБП формата
https://qr.nspk.ru/AD100********************LTQEK?type=02&bank=100000000008&sum=54900&cur=RUB&crc=056A

Данную ссылку можно открыть тремя способами:
  1. Через url_launcher с LaunchMode.externalApp, но таким образом всегда будет открываться один и тот же банк, что неудобно
  2. Через WebView (либо тем же url_launcher), в таком случае откроется веб-морда СБП, там будет выбор банка, даже будет запоминаться последний выбранный и выводиться первым в списке. Отличный вариант, но он не позволяет стилизовать форму выбора банка под свой дизайн
  3. Некий магический способ, который неким образом оседлали разработчики многих приложений, например Wildberries, позволяющий прямо в приложении отображать список банков и передавать ссылку на оплату в выбранное банковское приложение


Третий способ является для меня самым аппетитным, но, хоть убей, не могу понять как это сделать.
В "этих ваших интернетах" нет никакой информации о каком-либо SDK под мобильные платформы. У СБП даже нет документации к интеграции их системы. Только в доках банков есть информация о том как запросить у банка ссылку на оплату через СБП.
Нашел на паб.деве вот такой пакетик. При внутреннем тестировании все работало отлично. Формочка рисуется, банк выбирается, открывается, отображается экран оплаты, всё круто.
Однако в продакшене валится тонна жалоб на работу СБП. У кого-то не все банки отображаются, а у кого-то вообще после открытия банковского приложения не отображается форма оплаты. Просто открывается главная страница с картами и счетами. Подобное чаще всего происходит на Huawei телефонах (с гугл-сервисами) и на iOS девайсах.
Sentry такую ситуацию не ловит, а потому я не могу никак отследить причину сего бага.

Кто-нибудь из вас подключал СБП во Флаттер-приложение? Подскажите как вы это делали. Может есть свои наработки для работы с СБП? Поделитесь исходниками, пожалуйста.
  • Вопрос задан
  • 2174 просмотра
Пригласить эксперта
Ответы на вопрос 2
@tistol
Попробуйте этот плагин. Написал пару дней назад и собираюсь поддерживать его https://pub.dev/packages/sbp
Ответ написан
402d
@402d
начинал с бейсика на УКНЦ в 1988
https://github.com/MrOlolo/SbpPaymentsAndroid/blob...
Тут в 12 андроиде запращивается поиск приложений, которые ассоциированы с сайтом.
А вот приложениям банков, чтобы появиться в этом списке уже сложнее .
Deep Link на сторонний https ресурс :(
Тут проблема и в андроиде и у яблока. Чтобы открывалось четко на сайте должен лежать файл определенного формата . С его помощью происходит валидация может ли приложение открыть урл .

Для 12го андроида можно ручками дать это право. Для этого зайти в системные настройки. Найти нужное приложение . Открывать по умолчанию. Добавить ссылку. Поставить галочку.

Без диалога выбора вполне будет работать пакет url_launcher
Так как суть простая попросить операционку открыть урл https://qr.nspk.ru...............

Красивый выбор - не магия - а классно работавщий до 12го андроида инструмент
Intent.createChooser() - рекомендованное решение. Иногда встречается свой велосипед вместо него. Опрос установленных на телефоне программ. Зарезано текущей редакцией правил гугл плея и новыми пермишинсами.

p.s. Пробую решить обратную вашей задачу. Чтобы ссылки на чеки самозанятого открывались в моем приложении
На чистом андроиде сделал. Сейчас переписываю на флаттере.

p.s.
У приложений перечисленных в специальном файле не должно быть проблем в 12м андроиде
https://qr.nspk.ru/.well-known/assetlinks.json
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы