Insights 10 min read

FlutterFlow Stripe Integration: Payments, Subscriptions, and Apple Pay Setup

By Betsy Herrera
March 1, 2026
Share this insight

Why Stripe Integration Is Hard in FlutterFlow

FlutterFlow supports Stripe payments through its built-in integration, but the "one-click setup" masks significant complexity. Production payment flows require proper webhook handling, subscription lifecycle management, and Apple/Google Pay configuration that goes far beyond the visual builder.

As certified FlutterFlow Experts, we've implemented payment systems for marketplace apps, SaaS products, and e-commerce platforms. This guide covers the full production setup.

Complete Stripe Setup

Step 1: Connect Stripe to FlutterFlow

FlutterFlow → Settings → Integrations → Stripe → Enter your publishable key and secret key. Critical: Use TEST keys during development. Switch to LIVE keys only when going to production. Never expose your secret key in client-side code.

Step 2: Set Up Cloud Functions

Stripe payments MUST go through server-side code. The flow:

  1. Client (FlutterFlow) creates a PaymentIntent via Cloud Function
  2. Cloud Function calls Stripe API with your secret key
  3. Cloud Function returns the client_secret to FlutterFlow
  4. FlutterFlow presents the payment sheet using the client_secret
  5. Stripe processes the payment and sends a webhook to your Cloud Function
  6. Cloud Function updates your Firestore with the payment status

The 6 Most Common Payment Failures

1. Payment Sheet Shows Blank or Crashes

Cause: Invalid or expired client_secret from the PaymentIntent. This happens when the Cloud Function returns an error but FlutterFlow doesn't handle it - the payment sheet tries to initialize with a null secret.

Fix: Add error handling to your Cloud Function. Check for client_secret in the response before showing the payment sheet. A Custom Function can validate the response format.

2. Apple Pay Not Appearing

Cause: Apple Pay requires: (1) a Stripe account with Apple Pay enabled, (2) a registered Merchant ID in Apple Developer Portal, (3) domain verification in Stripe Dashboard, and (4) the correct Country Code and Merchant Display Name in FlutterFlow.

Fix: Follow this exact sequence: Stripe Dashboard → Settings → Apple Pay → Add Domain. Apple Developer → Identifiers → Merchant IDs → Create. Download the payment processing certificate from Stripe and upload to Apple. In FlutterFlow → Stripe settings → enable Apple Pay with your Merchant ID.

3. Webhooks Not Firing

Cause: Stripe webhooks need a publicly accessible HTTPS endpoint. During development, your Cloud Function URL may not be deployed, or the webhook signing secret doesn't match.

Fix: Deploy your Cloud Functions first, then add the function URL as a webhook endpoint in Stripe Dashboard → Developers → Webhooks. Copy the webhook signing secret and use it in your Cloud Function to verify webhook authenticity. Listen for events: payment_intent.succeeded, payment_intent.payment_failed, and customer.subscription.updated.

4. Subscription Status Not Syncing

Cause: After a successful payment, the subscription status in Firestore doesn't update because the webhook didn't fire or wasn't processed correctly.

Fix: Implement a full webhook handler that processes customer.subscription.created, customer.subscription.updated, customer.subscription.deleted, and invoice.payment_failed. Update the user's Firestore document with the current subscription status, plan type, and expiration date.

5. Test Payments Work But Live Payments Fail

Cause: You switched from Stripe test keys to live keys but forgot to update: (1) the Cloud Function environment variables, (2) the webhook endpoint (test and live have separate endpoints), or (3) the webhook signing secret.

Fix: Stripe test and live modes are completely separate environments. When going live, update ALL three: publishable key in FlutterFlow, secret key in Cloud Functions, and webhook signing secret. Create a new webhook endpoint for live mode.

6. App Store Rejection Due to Stripe

Cause: Apple requires that digital goods and services purchased within the app use Apple's In-App Purchase system - NOT Stripe. Physical goods, services, and person-to-person transactions can use Stripe. For additional context, see our guide on App Store rejections.

Fix: For digital content (premium features, subscriptions to in-app content), use RevenueCat or FlutterFlow's IAP integration. Stripe is allowed for: physical goods, real-world services, person-to-person payments, and business software (B2B SaaS).

Payment Architecture

Payment TypeTechnologyApple Compliant?
Physical goodsStripeYes
Real-world servicesStripe / Stripe ConnectYes
Digital subscriptionsRevenueCat / IAPYes (required)
Marketplace transactionsStripe ConnectYes
In-app premium featuresIAP onlyYes (required)

Need Expert Help?

Payment integration can't afford bugs. A broken payment flow means lost revenue and lost trust. Rehost implements production-grade payment systems in FlutterFlow - Stripe, Apple Pay, Google Pay, and subscription management. Get Expert Rescue →

FAQ

Can I use Stripe for in-app purchases in FlutterFlow?

Only for physical goods, real-world services, and person-to-person payments. Digital goods and subscriptions to in-app content must use Apple's In-App Purchase (for iOS) and Google Play Billing (for Android). Use RevenueCat for a unified cross-platform solution.

How do I handle failed payments in FlutterFlow?

Add error handling after the payment sheet action in FlutterFlow. Check the payment status - if failed, show a user-friendly error message with a retry option. On the server side, handle the payment_intent.payment_failed webhook to update the order status in Firestore.

Can I implement Stripe Connect for marketplace payments in FlutterFlow?

Yes, but it requires custom Cloud Functions. Stripe Connect handles split payments between your platform and sellers. You'll need Cloud Functions for: creating connected accounts, generating account links for onboarding, creating PaymentIntents with transfer data, and handling payouts.

Let us handle it.

Do-It-For-Me

Stop debugging platform limitations. Hand off your application to certified experts. We provide dedicated engineering, ongoing maintenance, and guaranteed SLAs at a set cost basis of $850/month for business and startup applications. Transparent timelines, zero hidden fees.

Simple contract · Cancel anytime

Share this article

Build with us.

Turn insights into action. Let's build something great together.