Complete walkthrough for enabling Stripe Checkout + Stripe Subscriptions in QAFlow.
1. Get Your Stripe API Keys
- Sign up at dashboard.stripe.com
- Developers → API keys → copy Publishable key (pk_test_... or pk_live_...) and Secret key (sk_test_... or sk_live_...)
2. Enable Stripe in QAFlow
- Admin → Payment Gateways → find Stripe
- Toggle Enabled
- Paste both keys
- Choose mode: Test (use pk_test/sk_test) or Live
- Save
3. Configure Webhook (Required for Subscriptions)
Stripe needs to tell QAFlow when a subscription renews, fails, or is cancelled.
- Stripe Dashboard → Developers → Webhooks → Add endpoint
- Endpoint URL:
https://your-domain.com/webhook/stripe - Select events to listen to:
checkout.session.completedinvoice.paidinvoice.payment_failedcustomer.subscription.deletedcustomer.subscription.updated
- Copy the Signing secret (whsec_...)
- Back in QAFlow → Payment Gateways → Stripe → paste the signing secret into Webhook Secret
- Save
4. Create Pro Membership Plans
- Admin → Pro Memberships → New Plan
- Enter: name, monthly price, yearly price, features included
- Toggle Active
- Save — QAFlow auto-creates the matching Stripe Price objects
5. Test the Flow
With mode set to Test:
- Log in as a non-admin user
- Go to /pro — click Subscribe
- On Stripe Checkout, use test card:
4242 4242 4242 4242, any future expiry, any CVV, any ZIP - Complete checkout
- Back in QAFlow, user should now show as "Pro" in admin Users panel
Going Live
- Activate your Stripe account (business details, bank account)
- Switch to Live keys in Stripe Dashboard
- Update QAFlow: paste live keys, set mode to Live
- Update webhook endpoint in Stripe Dashboard to use live signing secret
- Update QAFlow Webhook Secret accordingly
Common Issues
- Webhook 400 errors — Signing secret mismatch. Re-copy from Stripe Dashboard.
- "No such price" error — Delete plan and re-create so Stripe creates fresh Price IDs.
- Subscriptions not renewing — Webhook endpoint must be publicly reachable (no Basic Auth, no firewall blocks).