Skip to content

kr-digital/sbp_selector

Repository files navigation

SBP Selector

A Flutter plugin for handling SBP (Sistema Bystrykh Platezhey / Faster Payment System) payment links and seamlessly opening them with bank-specific mobile applications.

Features

  • 🏦 Automatic detection of installed bank apps supporting SBP
  • 📱 Support for both iOS and Android platforms
  • 🔗 Handle SBP payment links and QR codes
  • 💾 Offline caching of bank dictionaries
  • 🎯 Direct bank app opening or fallback to web interface

Installation

Add sbp_selector to your pubspec.yaml:

dependencies:
  sbp_selector:
    git:
      url: https://github.com/kr-digital/sbp_selector.git
      ref: main

Platform Setup

iOS

Add URL schemes as LSApplicationQueriesSchemes entries in your Info.plist file:

 <key>LSApplicationQueriesSchemes</key>
  <array>
    <string>bank100000000000</string>
    <string>bank100000000001</string>
    ...
    <string>bank100000000999</string>
    <string>bank100000001000</string>
  </array>

Android

Add packages in your AndroidManifest.xml file:

<queries>
    <intent>
        <action android:name="android.intent.action.VIEW" />
        <data
            android:host="qr.nspk.ru"
            android:scheme="https" />
    </intent>

    <package android:name="ru.sberbankmobile" />
    <package android:name="ru.gazprombank.android.mobilebank.app" />
    <package android:name="ru.letobank.Prometheus" />
    <package android:name="ru.nspk.sbpay" />
    <package android:name="ru.rosbank.android" />
    <package android:name="ru.rosbank.android.beta" />
    <package android:name="com.openbank" />
    <package android:name="com.openbank" />
    <package android:name="ru.akbars.mobile" />
    <package android:name="ru.skblab.skbbank" />
    <package android:name="ru.skbbank.ib" />
    <package android:name="ru.simpls.brs2.mobbank" />
    <package android:name="com.idamob.tinkoff.android" />
    <package android:name="com.idamob.tinkoff.android.qa" />
    <package android:name="ru.vtb24.mobilebanking.android.dev" />
    <package android:name="ru.vtb.mobilebanking.android.rc" />
    <package android:name="ru.vtb.mobilebanking.android.alpha" />
    <package android:name="ru.vtb24.mobilebanking.android.dso" />
    <package android:name="ru.vtb24.mobilebanking.android" />
    <package android:name="logo.com.mbanking" />
    <package android:name="ru.gebank.ib" />
    <package android:name="ru.raiffeisen.rmobile" />
    <package android:name="ru.raiffeisennews" />
    <package android:name="ru.avangard.sbp_client" />
    <package android:name="ru.elplat.elplat2" />
    <package android:name="ru.artsofte.russiafl" />
    <package android:name="com.bifit.rncbbeta.devtest" />
    <package android:name="com.bifit.rncbbeta" />
    <package android:name="com.bifit.rncbbeta.devprod" />
    <package android:name="ru.ftc.faktura.expobank" />
    <package android:name="com.bssys.vbrrretail" />
    <package android:name="ru.mkb.mobile" />
    <package android:name="ru.ftc.faktura.multibank" />
    <package android:name="ru.softlab.ikfl.rshb.bank.test3" />
    <package android:name="ru.rshb.dbo" />
    <package android:name="ru.bank_hlynov.xbank" />
    <package android:name="ru.ftc.faktura.vesta" />
    <package android:name="ru.ucb.android" />
    <package android:name="ru.yoo.money.debug" />
    <package android:name="ru.yoo.money" />
    <package android:name="com.isimplelab.ibank.solidarnost" />
    <package android:name="ru.bspb" />
    <package android:name="ru.ftc.faktura.resokreditbank" />
    <package android:name="ru.ftc.faktura.pskb" />
    <package android:name="ru.ftc.faktura.absolutbank" />
    <package android:name="ru.ftc.faktura.akcept" />
    <package android:name="ru.ftc.faktura.kbhmb" />
    <package android:name="ru.ftc.faktura.razvitiestolica" />
    <package android:name="com.bssys.roscapretail" />
    <package android:name="ru.ftc.faktura.etbank" />
    <package android:name="ru.chelyabinvestbank.investpay" />
    <package android:name="ru.chelyabinvestbank.investpay2" />
    <package android:name="ru.mts.money" />
    <package android:name="ru.sberbankmobile_alpha" />
    <package android:name="com.bifit.mobile.citizen.mbb" />
    <package android:name="com.snb.online" />
    <package android:name="ru.kubankredit.mobile.android.huawei" />
    <package android:name="com.isimplelab.ibank.kubankredit" />
    <package android:name="com.isimplelab.ibank.kubankredit" />
    <package android:name="ru.ftc.faktura.nskbl" />
    <package android:name="ru.ilb.bbmobile" />
    <package android:name="com.tochka.bank.debug" />
    <package android:name="ru.zhuck.webapp.debug" />
    <package android:name="com.tochka.bank" />
    <package android:name="ru.zhuck.webapp" />
    <package android:name="com.tatsotsbank.mobile" />
    <package android:name="com.tatsotsbank.dbomobile" />
    <package android:name="ru.ftc.faktura.nskbl" />
    <package android:name="ru.alfabank.mobile.android" />
    <package android:name="ru.alfabank.mobile.android.huawei" />
    <package android:name="ru.alfabank.mobile.android.feature" />
    <package android:name="ru.ftc.faktura.rostfinance" />
    <package android:name="ru.mcbankrus.MCBankRus" />
    <package android:name="ru.ftc.faktura.venetsbank" />
    <package android:name="com.idamobile.android.sdm" />
    <package android:name="ru.ftc.faktura.sdm" />
    <package android:name="com.idamobile.android.crediteuropa" />
    <package android:name="com.bifit.mobile.citizen.iturupbank" />
    <package android:name="com.bifit.mobile.citizen.iturupbank" />
    <package android:name="com.bssys.novikomretail" />
    <package android:name="ru.albank.online.aebit.staging.test" />
    <package android:name="ru.albank.online.aebit" />
    <package android:name="com.bssys.stroylesretail" />
    <package android:name="com.bssys.stroylesretail" />
    <package android:name="ru.sovcomcard.halva.v1" />
    <package android:name="ru.gazprombank.android.mobilebank" />
    <package android:name="com.bifit.mobile.citizen.icbru" />
    <package android:name="ru.sovcomcard.halva.v1" />
    <package android:name="ru.ftc.faktura.orbank" />
    <package android:name="ru.ftc.faktura.agropromkredit" />
    <package android:name="com.energobank.digital" />
    <package android:name="com.bifit.mobile.citizen.kbnk" />
    <package android:name="ru.nbd.android" />
    <package android:name="ru.rosdorbank.physical" />
    <package android:name="ru.ftc.faktura.primsoc" />
    <package android:name="ru.ftc.faktura.banksaratov" />
    <package android:name="ru.ftc.faktura.tavrich" />
    <package android:name="ru.centrinvest.mobilebanking2018" />
    <package android:name="ru.centrinvest.mobilebanking2018" />
    <package android:name="com.bifit.mobile.citizen.thbank" />
    <package android:name="ru.ftc.faktura.kremlevskiy" />
    <package android:name="ru.ftc.faktura.tkbbank" />
    <package android:name="cb.ibank" />
    <package android:name="ru.ftc.faktura.derzhava" />
    <package android:name="ru.emb.android" />
    <package android:name="ru.emb.android" />
    <package android:name="com.bifit.mobile.citizen.okbank" />
    <package android:name="ru.sngb.dbo.client.android" />
    <package android:name="ru.sngb.dbo.client.android" />
    <package android:name="com.smp.android.spinnakerQa" />
    <package android:name="com.isimplelab.isimplemobile.chelind.test" />
    <package android:name="com.credituralbank.CUBmobilenew" />
    <package android:name="com.credituralbank.CUBmobilenew" />
    <package android:name="com.mmonline.mobile" />
    <package android:name="com.bifit.dvbank" />
    <package android:name="com.isimplelab.isimpleceo.uglemet.test" />
    <package android:name="ru.ftc.faktura.alexbank" />
    <package android:name="ru.ftc.faktura.united" />
    <package android:name="ru.mw" />
    <package android:name="ru.ftc.faktura.intesabank" />
    <package android:name="ru.ftc.faktura.intesabank" />
    <package android:name="ru.mw" />
    <package android:name="ru.mw" />
    <package android:name="cb.ibank.vuz" />
    <package android:name="ru.uralprombank.mobilebanknew.googleplay" />
    <package android:name="ru.uralprombank.mobilebanknew.googleplay" />
    <package android:name="com.citibank.mobile.ru" />
    <package android:name="com.bssys.aversretail" />
    <package android:name="com.mob.android.mobDev" />
    <package android:name="com.mob.android" />
    <package android:name="ru.ftc.faktura.nsbank" />
    <package android:name="ru.ftc.faktura.maritimebank" />
    <package android:name="ru.centrinvest.mobilebanking2018" />
    <package android:name="com.isimplelab.isimpleceo.uglemet" />
    <package android:name="com.bifit.vfbank" />
    <package android:name="com.bssys.timerbank.retail.test" />
    <package android:name="com.timerbank.retail" />
    <package android:name="ru.ftc.faktura.iturup" />
    <package android:name="ru.ftc.faktura.finbank" />
    <package android:name="ru.vtkbank.android" />
    <package android:name="com.bssys.correqts.retail.custom.guta" />
    <package android:name="ru.ftc.faktura.gaztransbank" />
    <package android:name="ru.otpbank.mobile" />
    <package android:name="com.isimplelab.ibank.chelind" />
    <package android:name="ru.ftc.faktura.multibank" />
    <package android:name="ru.ftc.faktura.nokss" />
    <package android:name="com.isimplelab.ionic.kazan.fl" />
    <package android:name="ru.ftc.faktura.vlbb" />
    <package android:name="ru.ftc.faktura.kbb" />
    <package android:name="ru.ftc.faktura.avtogradbank" />
    <package android:name="ru.ftc.faktura.mfkbank" />
    <package android:name="ru.simpls.brs2.mobbank" />
    <package android:name="ru.zenit.android" />
    <package android:name="ru.sbi.android.qa" />
    <package android:name="ru.sbi.android.huawei.qa" />
    <package android:name="ru.sbi.android.huawei" />
    <package android:name="ru.sbi.android" />
    <package android:name="ru.ftc.faktura.forshtadt" />
    <package android:name="ru.ftc.faktura.solidbank" />
    <package android:name="com.isimplelab.ionic.atbnew" />
    <package android:name="com.smp.android" />
    <package android:name="com.servicemyassistant.android" />
    <package android:name="com.bifit.mobile.citizen.invb" />
    <package android:name="ru.ftc.faktura.akibank" />
    <package android:name="ru.ftc.faktura.nipbank" />
    <package android:name="com.bifit.pmobile.isbank" />
    <package android:name="com.bssys.correqts.retail.custom.uralfd" />
    <package android:name="ru.ftc.faktura.alefbank" />
    <package android:name="com.banksoyuz.artsofte" />
    <package android:name="com.bifit.vfbank" />
    <package android:name="com.bifit.mobile.citizen.zarech" />
    <package android:name="com.bssys.correqts.retail.custom.rnb" />
    <package android:name="com.openwaygroup.ic.panda.poidem" />
    <package android:name="com.bssys.uralfdretail" />
    <package android:name="com.bifit.mobile.citizen.nkbank" />
    <package android:name="com.metkombanktest.mobile.apk" />
    <package android:name="com.isimplelab.ionic.agroros" />
    <package android:name="ru.ftc.faktura.agroros" />
    <package android:name="ru.ftc.faktura.jtbank" />
    <package android:name="ru.ftc.faktura.ns" />
    <package android:name="com.banksoyuz.artsoftetest" />
    <package android:name="ru.ftc.faktura.zemskybank" />
    <package android:name="ru.rusnarbank.correqts.retail" />
    <package android:name="com.bifit.mobile.citizen.cfb" />
    <package android:name="ru.ftc.faktura.baikalinvestbank" />
    <package android:name="com.metkombank.mobile" />
    <package android:name="com.intervale.sbp.atlas" />
    <package android:name="com.mifors.izhcombank" />
    <package android:name="ru.bankuralsib.mb.android.debug" />
    <package android:name="ru.bankuralsib.mb.android" />
    <package android:name="com.bifit.atbbank" />
    <package android:name="ru.ipb.ubsmobile" />
    <package android:name="ru.rubank.ubsmobile" />
    <package android:name="com.isimplelab.ionic.gorbank" />
    <package android:name="ru.briginvest.sense" />
    <package android:name="com.hicebank.android" />
    <package android:name="com.hicebank.android" />
    <package android:name="com.hicebank.android" />
    <package android:name="com.isimplelab.ionic.gorbank.prod" />
    <package android:name="ru.ftc.faktura.moscombank" />
    <package android:name="cz.bsc.rc.debug" />
    <package android:name="cz.bsc.rc" />
    <package android:name="com.bpc.crossplatform_trading.bpc_trading" />
    <package android:name="ru.krk.ubsmobile" />
    <package android:name="com.bifit.mobile.citizen.tenderbank" />
    <package android:name="com.bifit.mobile.citizen.belsocbank" />
    <package android:name="ru.unicredit.android" />
    <package android:name="ru.homecredit.mycredit" />
    <package android:name="ru.isfront.android.kt" />
    <package android:name="ru.ftc.faktura.multibank" />
    <package android:name="com.bifit.mobile.citizen.moskb" />
    <package android:name="com.bssys.correqts.retail.custom.ibam" />
    <package android:name="com.isimplelab.ibank.toyota.test" />
    <package android:name="com.isimplelab.ibank.toyota" />
    <package android:name="com.bifit.nrb" />
    <package android:name="ru.ftc.faktura.novobank" />
    <package android:name="com.isimplelab.ionic.standart" />
    <package android:name="com.isimplelab.ionic.nv" />
    <package android:name="com.isimplelab.ionic.nv" />
    <package android:name="com.bifit.mobile.private.bbr" />
    <package android:name="com.finservice.mobile" />
    <package android:name="com.finservice.mobile" />
    <package android:name="ru.ftc.faktura.lanta" />
    <package android:name="com.cetelem.cetelem_android" />
    <package android:name="com.cetelem.cetelem_android" />
    <package android:name="ru.ftc.faktura.dolinsk" />
    <package android:name="com.isimplelab.ionic.round" />
    <package android:name="ru.bankvl.android.physical" />
    <package android:name="ru.bcs.bcsbank.dev" />
    <package android:name="ru.bcs.bcsbank" />
    <package android:name="com.ltech.unistream" />
    <package android:name="com.ltech.unistream" />
    <package android:name="ru.domrf.bank.dev.native" />
    <package android:name="com.bank.domrf.v2" />
    <package android:name="ru.ibam.retailmobile" />
    <package android:name="com.isimplelab.ionic.slavia" />
    <package android:name="com.isimplelab.ionic.slavia.prod" />
    <package android:name="com.yandex.bank.dev" />
    <package android:name="com.yandex.bank" />
    <package android:name="com.bifit.mobile.citizen.efbank" />
    <package android:name="ru.rosbank.android.beta.test" />
    <package android:name="ru.rosbank.android.beta.cert" />
    <package android:name="com.bifit.mobile.citizen.MCBank" />
    <package android:name="ru.ftc.faktura.bgfbank" />
    <package android:name="com.idamobile.android.LockoBank" />
    <package android:name="su.atb.mobileapp.develop" />
    <package android:name="com.compassplus.mobicash.customer" />
    <package android:name="com.isimplelab.ionic.uralfinance.fl" />
    <package android:name="com.isimplelab.isimplemobile.payjet" />
    <package android:name="com.priobank.prio" />
    <package android:name="com.priobank.prio.huawei" />
    <package android:name="ru.ftc.faktura.siab" />
    <package android:name="com.isimplelab.ionic.round.prod" />
    <package android:name="com.drive_click.android" />
    <package android:name="com.bifit.mobile.private.atbbank" />
    <package android:name="com.bssys.gutaretail" />
</queries>

Warning! Starting with iOS 15 there's limit in maximum 50 entries in list, so you probably need to take first 50 entries from c2bmembers.json. Look for details here .

That's need for UIApplication.shared.canOpenURL method worked correctly. You can copy and paste all lines

  • path: sbp_selector/example/ios/Runner/Info.plist -> LSApplicationQueriesSchemes

See -[UIApplication canOpenURL:] for more details.

Usage

import 'package:sbp_selector/sbp_selector.dart';

// Initialize the plugin
final selector = await SbpSelector.init();

// Get list of available bank apps for payment link
final sbpLink = 'https://qr.nspk.ru/...';
final availableBanks = await selector.getAvailableApps(sbpLink);

// Open payment in specific bank app
await selector.openApp(selectedBank, sbpLink);

// Or try to open any deeplink directly
final opened = await selector.tryOpenLink(sbpLink);

API Reference

Official NSPK Resources

License

This project is licensed under the MIT License - see the LICENSE file for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

About

Flutter plugin for handling SBP (Faster Payment System) links and opening bank apps on iOS & Android

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors