안드로이드 및 iOS용 모바일 애플리케이션에서 UPI(통합 결제 인터페이스) 결제를 통합할 수 있는 플러터 플러그인입니다. 사용자는 Google Pay나 PhonePe와 같은 기본 UPI 앱을 실행하여 UPI 결제를 시작할 수 있습니다. 이 플러그인은 최소한의 설정으로 UPI 앱으로의 딥링크 처리를 담당하여 결제 처리를 간편하게 만듭니다. 안드로이드와 iOS 양쪽 플랫폼을 지원하므로, 원활한 디지털 거래가 필요한 인도 시장 애플리케이션에 적합합니다.
사용 사례
전자상거래 앱에서 UPI 결제 활성화
현지 서비스 플랫폼에 디지털 결제 통합
UPI를 통한 요금 지불 지원
피어 투 피어 송금 지원
모바일 앱에 즉시 결제 옵션 추가하기
주요 기능
기기의 기본 UPI 앱을 실행합니다
Android 및 iOS용 크로스 플랫폼 지원
UPI 결제 시작을 위한 간단한 API
민감한 결제 데이터를 처리할 필요 없음
Google Pay, PhonePe와 같은 모든 주요 UPI 앱과 호환됩니다
적합한 대상
인도 핀테크 스타트업
인도 사용자를 대상으로 하는 모바일 앱
전자상거래 및 유틸리티 앱
UPI 통합이 필요한 결제 게이트웨이
저코드 결제 솔루션을 구축하는 개발자
고려 사항
사용자 기기에서 UPI를 지원하는 앱이 설치되어 있어야 합니다
출시 후 결제 흐름에 대한 제어가 제한됨
사용자의 UPI 앱 구성에 따라 다릅니다
서버 측 트랜잭션 처리에 적합하지 않음
UPI 앱을 기본으로 설정하지 않은 경우 작동하지 않을 수 있습니다
원본 README
연결된 소스 저장소의 README 원문 스냅샷입니다. 최신 내용은 저장소에서 확인하세요.
flutter_upi_india
Curruntly Working in android only with some specific banks. Open for Query and Discussion.
Find installed UPI payment apps on your phone and make payments using any one of them.
Mandate-capable apps can be filtered via
UpiPay.getInstalledUpiApplications(isForMandateApps: true). Availability
varies by app and platform, so verify with the target UPI app before production
use.
An Intent call with transaction request parameters includes the specific UPI app to be invoked.
Post the UPI transaction being processed by the chosen Android UPI app, it returns a response as per the format defined in the specification to the package's Android plugin layer.
The plugin layer parses this response to create a UpiTransactionResponse object that is returned to your calling code. This object clearly indicates the status of the UPI payment, i.e. was it successful, failed or being processed.
Measures
It is advised that you implement a server-side payment verification on top of this status reporting, to avoid being affected by any hacks in the UPI transaction workflow on client's phone.
Each UPI payment app can listen to a payment request of the form upi://pay?... or upi://mandate?... sent by a caller app to iOS.
The specification does not let you specify the target app's identifier in this request. On iOS, there is no other disambiguation measure available such as any ordering of the UPI payment apps that can be retrieved using any iOS APIs. Hence, it's impossible to know which UPI payment app will be invoked.
One of the applicable apps gets invoked and it processes the payment. The custom schemes mechanism has no way to return a transaction status to your calling code. The calling code can only know if a UPI payment app was launched successfully or not.
How does the package then implement getInstalledUpiApps?
The apps that implement any other unique custom scheme other than upi are discovered using such custom schemes. In the list of returned apps, both the reliably discovered apps and the supported but undetectable apps are returned.
Your code can distinguish if an app in the list of discovered apps was detected or not by checking as follows:
You will have to implement a payment verification on top of functionality available through this package.
You should distinguish discovered and supported-only apps using the mechanism in the above section. The example app can be used for reference.
UPI Apps' Functional Status Dynamics
UPI standards and systems are evolving, and accordingly behaviour and functionality of the UPI payment apps are changing. See Apps for details of current functional status of various applications that were verified by us.
Support for merchant and non-merchant payments
The UPI Deep Linking And Proximity Integration Specification is designed for merchant payments. It includes parameters in payment request that can be provided only if the payment was made to a merchant e.g. the merchant code (mc parameter), and a signature (crypto-hash) of the request created using merchant's private key.
However; various applications have been accepting requests without merchant details and signature and successfully processing payments. Possibly, the dilution could be due to the reason that such a package can only automate filling a payment form, and unless the user verifies the details in the form and enters the UPI pin, no damaging payments can be really made.
Over last few months, few applications have started changing their behaviour around non-merchant payments and one or more of the following are seen in few apps:
An implicit "unverified source" warning or a direct warning indicating that merchant data in the request is not correct
This behaviour sometimes is not consistent even for the same app. For example, WhatsApp successfully completes transactions on iOS; but rejects non-merchant transactions on Android.
If you believe that your app's users' money is secure via their UPI pin, and you can let them use apps that successfully complete non-merchant transactions, then go ahead and pick the working apps in Apps and integrate this package.
Regressions
It's seen that post the Bank mergers of 2020-21 some of the bank apps have stopped working, even though they are still in Play Store and/or App Store.
iOS minimum versions
Several BHIM apps have stopped working on <iOS 13.5. This package's iOS support is verified on iPhone with iOS 14+.
Love to experiment yourself?
Default behaviour of the getInstalledUpiApps API is to give you only the completely successfully working UPI apps. You can make the package return other apps by passing relevant values for parameters of this API. Please see API documentation. To support this experimentation, we would add further tweaking to allow you to access UPI apps not seen and supported by this package shortly on Android.
Contributors ✨
This project follows the all-contributors specification. Contributions of any kind welcome and will be recognised!
Other related solutions
upi_india(repo) - Another solid flutter package for payment gateway free UPI integration. We often share issues faced / solution approaches and more. Go check them out as well!