Payments with Stripe: Payment Sheet, SCA, and Native Wallets in React Native
John Hambardzumian · Full Stack & Mobile Developer | Node.js, React Native, PHP, Laravel | 7+ Years Building Scalable Web & Mobile AppsApr 11, 20265 min readCard-not-present payments in mobile apps typically route through Stripe or similar processors, leveraging tokenization so raw PAN data never touches your servers—simplifying PCI DSS scope. Stripe’s React Native SDK presents PaymentSheet, a prebuilt UI for cards, wallets, and local methods with built-in 3-D Secure challenge flows.
Server orchestration
Create PaymentIntents or SetupIntents exclusively on your backend using secret keys. Return only the client secret to devices. Enforce idempotency keys on POST requests to survive flaky networks.
Strong Customer Authentication
European PSD2 SCA mandates step-up challenges for many transactions—design UX that does not trap users in webviews without clear progress. Log authentication results for reconciliation.
Digital wallets
Apple Pay and Google Pay reduce friction; configure merchant identifiers, domains, and Google Pay API parameters per Stripe docs. Test on devices without cards enrolled to validate fallbacks.
Webhooks and fulfillment
Do not fulfill solely on client success—listen to webhooks for asynchronous outcomes: disputes, refunds, asynchronous payment methods. Make fulfillment idempotent using intent IDs.
Testing
Use Stripe’s test clocks and test cards triggering authentication challenges. Mirror production API versions explicitly to avoid surprise field changes.
Closing
Payments bridge engineering, finance, and legal. Align on tax, refund SLAs, and fraud tooling before launch milestones.

Written by John Hambardzumian
Full Stack & Mobile Developer | Node.js, React Native, PHP, Laravel | 7+ Years Building Scalable Web & Mobile Apps. Focused on React Native and full-stack development.