A customer taps Pay, completes the payment, and returns to their order. That’s the experience you want your app to deliver. Building it means looking beyond whether a payment gateway has a React Native or Flutter SDK.
How does it handle card OTPs? Does UPI open another app? How much control do you have over checkout? These details matter when choosing an integration.
This guide compares Razorpay, PayU, and Cashfree across SDK support, recent updates, OTP handling, and UPI integration, so you can choose the right fit for your app.
Key Takeaways
- Razorpay ranks first for the integration approach considered here: official React Native and Flutter SDKs, separate Standard and Custom tracks, and a documented Flutter Android headless Turbo UPI path. Advanced feature support still needs checking by operating system.
- PayU ranks second and deserves particular attention for OTP: its React Native and Flutter Checkout Pro pages explicitly list Native OTP Assist. It also documents separate UPI SDKs for both frameworks.
- Cashfree ranks third in this shortlist: it provides React Native and Flutter SDKs with ready-made and custom checkout options.
- Native OTP, OTP auto-read, and headless UPI are different requirements. A native OTP screen does not establish automatic SMS reading, and a merchant-controlled UPI interface can still open another UPI app.
- Keep payment confirmation on the backend. An SDK callback tells your app that it should check the result; fulfilment should follow verified provider status and the capture requirements of the selected flow.
The Verdict at a Glance
Recommendation order for a Standard-first app integration with room for selected custom payment flows
| Order | Provider | Why consider it? | What needs checking? |
|---|---|---|---|
| 1 | Razorpay | Clearly separated Standard and Custom SDK documentation for both frameworks; current release evidence; documented Flutter Android headless Turbo UPI. | Native OTP wrapper support and automation by OS; Turbo activation; Flutter headless iOS and React Native embedded UPI availability. |
| 2 | PayU | Checkout Pro explicitly lists Native OTP Assist in both framework guides, alongside separate React Native and Flutter UPI SDKs. | Eligible card BINs, bank-page fallback, and the choice between Checkout Pro and a separate UPI integration. |
| 3 | Cashfree | Official React Native and Flutter SDKs with ready-made and custom checkout options. | Element versus Web Checkout requirements; OTP behaviour within the chosen flow; Flash UPI access and wrapper coverage. |
How the Payment Gateways Were Compared
The comparison focuses on India-facing apps accepting cards and UPI. Documentation, provider release notes, and package registries were checked.
No controlled payment trial or like-for-like conversion study was conducted.
| Criterion | The practical question | Evidence to inspect |
|---|---|---|
| Framework support | Is there an official integration for my framework and OS? | Provider-linked packages and Android/iOS setup instructions. |
| Maintenance | What changed in a published release? | Dated releases, architecture updates and dependency changes. |
| Checkout ownership | Am I integrating a ready-made UI or building payment components? | Standard, custom, Web Checkout and headless guides. |
| Card authentication | Which OTP experience is available, and when does it fall back? | BIN eligibility, consent, wrapper methods, and OS limitations. |
| UPI journey | Does the customer open a UPI app or pay inside mine? | Intent, embedded UPI and onboarding requirements. |
| Completion and recovery | What happens after a timeout, app restart or delayed success? | Server verification, capture checks and payment-event handling. |
We prioritise a clear starting integration, a documented route to customisation, and room for additional payment methods. This is an editorial assessment without numerical scoring.
If a particular Native OTP or embedded-UPI combination is essential, verify that combination before applying the recommendation order.
1. Razorpay: Our First Choice for a Standard-First Integration
Which Razorpay SDK should you choose?
Start with Standard Checkout for a ready-made payment interface. Choose Custom when your app needs greater control over checkout.
- Official framework support: React Native Standard and Flutter Standard wrap Razorpay’s native Android and iOS SDKs.
- Standard Checkout: Razorpay’s React Native Custom guide recommends Standard for most integrations because it supports payment methods by default.
- Custom Checkout: Build a merchant-controlled interface and integrate the selected payment methods manually. Moving from Standard to Custom requires implementation work.
- Payment-method coverage: The React Native Custom guide covers cards, EMI, netbanking, wallets, UPI, Pay Later, and eMandates. Some methods require activation or approval.
For example, an appointment-booking app can start with provider-managed checkout and assess Custom when a specific interface requirement justifies it.
Pro tip: Define the interface you need before choosing Custom. A branded checkout and a merchant-controlled authentication journey involve different work.
Are Razorpay’s SDKs actively maintained?
Published releases show updates for framework architecture and iOS build tooling.
- React Native: Standard v3.0.0, published on 21 April 2026, adds New Architecture support alongside the old architecture.
- Flutter: Standard v1.4.7, published on 21 September 2026, adds Swift Package Manager support alongside CocoaPods on iOS.
- Compatibility check: Validate the selected package against your framework, Android and Xcode versions. A published update does not certify every build combination.
How does Razorpay handle Native OTP?
Razorpay documents Native OTP for card authentication. The OTP interface and automatic OTP handling have different support conditions.
- Android automation: The Optimizer Native OTP page scopes automatic reading, filling and submission to Android Standard Checkout. It is not a universal feature matrix for every Razorpay SDK.
- Native iOS flow: The iOS Custom Checkout OTP guide covers card eligibility, the OTP interface, submission, resend and bank-page fallback.
- Cross-platform validation: Confirm which methods the selected React Native or Flutter wrapper exposes. Native iOS support does not establish identical wrapper behaviour.
If a specific cross-platform OTP configuration is essential, evaluate that configuration directly. PayU’s explicit Checkout Pro feature lists make it another relevant candidate.
Does Razorpay UPI keep customers inside the app?
UPI Intent can open another UPI app. Turbo UPI provides a separate embedded payment route where the integration is supported.
- Custom UPI Intent: The React Native Custom payment-method guide documents app discovery and intent. Flutter Custom also includes app discovery; authorisation can still happen in the selected UPI app.
- Embedded UPI: Turbo UPI requires account activation and customer bank-account onboarding.
- Flutter headless support: The reviewed Flutter Turbo UPI headless guide supports Android and describes iOS as under development. Integration-team access and native dependencies are required.
- Before committing: Obtain the current supported path for React Native embedded UPI or Flutter iOS headless Turbo. Do not infer wrapper availability from native SDK support.
2. PayU: A Strong Alternative When Native OTP Assist Comes First
Which PayU SDKs support React Native and Flutter?
PayU documents full Checkout Pro integrations and separate UPI SDKs for both frameworks.
- Multi-method checkout: The React Native Checkout Pro and Flutter Checkout Pro feature lists explicitly include Native OTP Assist and UPI payments.
- Focused UPI integration: Dedicated React Native UPI and Flutter UPI SDKs provide separate integration paths for UPI-focused journeys.
How does PayU Native OTP Assist work?
The Android Native OTP Assist guide describes in-app card authentication with OTP reading and submission, subject to eligibility.
- BIN check: The SDK checks whether the card BIN is eligible for the Native OTP flow.
- Fallback: Ineligible BINs use the bank’s authentication page.
- Bank dependency: Bank downtime can affect the flow. A supported issuing bank or card network does not guarantee every BIN is eligible.
What should you check before choosing PayU?
Select the supported integration route before designing a custom checkout.
- Product combination: Checkout Pro, dedicated UPI SDKs and specialised OTP integrations are separate paths. Confirm that the chosen components support your intended experience together.
- Operating-system differences: The React Native UPI guide distinguishes Android package names from iOS app schemes. Generic intent is Android-only.
- Backend security: Both UPI guides require payment hashes to be generated on your server.
Why PayU ranks second here: Razorpay is our preference for the broader Standard-first approach. PayU can be the stronger fit when a verified Native OTP configuration is the deciding requirement.
3. Cashfree: A General-Purpose Mobile Payment Option
What does Cashfree offer?
Cashfree provides payment SDKs for React Native and Flutter, with options for ready-made and custom checkout.
- Mobile support: Official React Native and Flutter integrations support Android and iOS.
- Checkout options: Choose a provider-managed interface or a supported custom flow. Confirm OTP behaviour and the UPI journey for your selected SDK.
Why is Cashfree ranked third here?
Cashfree ranks third because this comparison gives greater weight to Razorpay’s documented custom payment-method coverage and PayU’s explicit Native OTP Assist listings.
- Razorpay has the broader documented custom menu: Its React Native Custom guide covers EMI, wallets, Pay Later, and eMandates alongside cards and UPI, subject to activation. This better matches apps planning multiple payment options.
- PayU has a direct OTP documentation match: Both Checkout Pro framework guides explicitly list Native OTP Assist, making it a relevant shortlist choice when eligible in-app card authentication is the priority.
Cashfree remains a viable mobile payment option. Its third-place position reflects these editorial priorities, rather than a measured difference in payment success rates.
What the Release Data Actually Shows
The table below highlights selected Razorpay and PayU release records checked on 29 October 2026. These are maintenance examples, not a performance score.
| Provider and package | Selected version | Published date | What the record establishes |
|---|---|---|---|
| Razorpay React Native Standard | 3.0.0 | 21 April 2026 | New Architecture support alongside the old architecture. |
| Razorpay Flutter Standard | 1.4.7 | 21 September 2026 | Swift Package Manager support for iOS. |
| PayU Flutter Checkout Pro | 1.4.5 | 3 June 2026 | A published stable package; the reviewed changelog does not explain this version’s changes. |
Release sources: Razorpay React Native, Razorpay Flutter and PayU Flutter.
Did you know? A larger version number across two different providers says nothing about relative quality. Compare supported features and release changes within the exact package you intend to use.
Native OTP, Headless UPI and No-Redirect Payments Explained
The simplest way to avoid a wrong integration choice is to separate three layers: checkout presentation, authentication and payment confirmation.
| Term | What it describes | What it does not guarantee |
|---|---|---|
| Native OTP | A supported card OTP interface inside the checkout journey. | Automatic SMS reading or identical support across all wrappers. |
| OTP auto-read/submit | Assistance with entering and submitting a card OTP. | Availability on every OS, issuer, BIN or consent configuration. |
| Headless/custom UPI | Merchant control of the payment interface and initiation. | That the customer stays inside the merchant app. |
| UPI intent | A hand-off to an installed UPI application for authorisation. | An embedded UPI experience without an app switch. |
| Embedded UPI | A separately integrated UPI journey inside the merchant app. | Instant activation, no customer onboarding, or universal framework parity. |
These distinctions follow the PayU OTP eligibility guide, PayU UPI flow definitions, Razorpay Turbo flow and Cashfree Flash UPI description.
Check current migration guidance before reusing a UPI Collect example.
- Provider guidance: Razorpay’s reviewed integration documentation flags Collect deprecation for affected flows and lists exemptions.
- Implementation check: Verify the applicable flow before using an older snippet that accepts a typed UPI ID.
Confirm eligibility against the current provider documentation before implementation.
Did you know? A payment SDK can wrap native Android and iOS libraries while parts of its checkout or bank authentication use web content. “Native SDK” is not proof that every screen is rendered natively.
An Eight-Step Integration Checklist for React Native and Flutter
Start with Razorpay’s React Native Android integration steps or Flutter integration steps, then validate the corresponding iOS path.
Use the following as an engineering acceptance checklist. These are proposed checks, not tests performed for this article.
- Freeze the requirements. Record framework version, OS targets, React Native architecture where relevant, payment methods, UI ownership, OTP expectations and whether UPI app switching is acceptable.
- Select the exact package and flow. Use the provider-linked package. Keep Standard and Custom versions separate, and check their native dependencies against your release build.
- Create the payment order on your backend. Derive the amount from trusted order data and keep secret credentials on the server. Pass the appropriate order identifier or session data to the app.
- Implement authentication and return paths. Configure UPI app discovery or URL schemes where required. Handle cancellation, unsupported OTP cases and documented bank-page fallback.
- Verify the result on the server. For Razorpay Checkout, verify the signature using the server’s stored order ID, returned payment ID and server-held secret. Also match the payment to the intended order, amount and currency.
- Confirm the fulfilment condition. Razorpay’s go-live guidance requires a captured payment before delivering goods or services. A valid Checkout signature establishes authenticity; it is not a substitute for checking the required payment state.
- Build recovery around backend state. Add authenticated payment-event handling and a repeat-safe fulfilment operation. Test an interrupted app session, delayed confirmation and a repeated notification without creating a second order fulfilment.
- Validate the release build. Exercise success, cancellation, failure and recovery on supported devices. Follow the provider’s test/live guidance for intent and embedded UPI; a sandbox callback alone does not prove the complete device journey.
Cashfree’s mobile guides likewise separate server-side order creation, SDK checkout and server-side confirmation. PayU’s UPI guides require backend-generated hashes. Across providers, the practical rule is consistent: payment secrets and the final fulfilment decision belong on your server.
Pro tip: In your acceptance report, record the package version, OS, payment method, authentication path and final server status for each case. “Payment worked on my phone” leaves too many variables unexplained.
Which Payment Gateway Should You Choose?
Choose Razorpay first if you want a documented Standard integration for a React Native or Flutter app, with separate Custom SDK options when your requirements justify them. Its published architecture and iOS dependency-manager updates provide useful evidence for a current evaluation.
Give PayU a close evaluation when Native OTP Assist is your primary criterion. Consider Cashfree where Web Checkout or a supported headless flow fits the product.
For any provider, make a required embedded-UPI or custom-OTP combination a verified acceptance condition.
For a general India-facing app accepting cards and UPI, our starting recommendation is Razorpay Payment Gateway: begin with the simplest supported checkout, confirm the advanced features you actually need, and make backend payment verification part of the first implementation.
Frequently Asked Questions
Which Indian payment gateways offer official React Native and Flutter SDKs with recent updates?
Razorpay, PayU, and Cashfree offer official framework integrations. Examples and integration options include:
- Razorpay: React Native Standard v3.0.0 and Flutter Standard v1.4.7.
- PayU: Flutter Checkout Pro v1.4.5.
- Cashfree: Official React Native and Flutter SDKs with ready-made and custom checkout options.
Check the exact package and current compatibility before installation.
Which payment gateways offer Native OTP Assist or headless UPI for React Native and Flutter?
All three merit evaluation, with different supported combinations:
- Razorpay: Standard and Custom SDKs, documented native OTP paths and Flutter Android headless Turbo UPI.
- PayU: Native OTP Assist explicitly listed in both Checkout Pro framework guides.
- Cashfree: Headless UPI and OTP capabilities recorded in its changelogs.
Confirm the current wrapper API, OS, issuer eligibility, and activation requirements for the combination you need.
Is Razorpay the best option for a React Native or Flutter app?
Razorpay is our first choice for the Standard-first approach considered here, based on its documented SDK choices and release evidence.
Verify any mandatory custom OTP or embedded-UPI combination separately. The general recommendation does not establish universal feature superiority.
Can payments stay inside the app on both Android and iOS?
Checkout can appear inside the app while authorisation follows a different path:
- UPI Intent: Can open another UPI application.
- Card payments: May require a bank authentication page.
- Embedded UPI or eligible Native OTP: Can provide a more contained journey where supported.
Check the specific framework/OS integration and retain its documented fallback.
Does headless UPI mean I can remove the UPI PIN or bank authorisation?
No. Headless describes interface control, not permission to bypass authentication. Razorpay’s Turbo UPI flow still includes bank-account onboarding and UPI PIN authorisation.
