Guide
Customers can't pay on my app
A customer messages you: "I tried to pay and nothing happened." Or worse, you find a payment in Stripe but no order, no account upgrade, no confirmation email. It worked when you tested it.
Payment on a live app breaks in one of three places. Find which one first, because each has a different fix.
1. The pay button does nothing
You press Pay or Buy and nothing happens, or a spinner turns forever.
Check it: on a computer, open your live site, press F12, open the Console tab, and press the button. A red error that appears at that moment is your cause. Then open the Network tab and press it again. Look for a request that fails (a red line, or a status like 400 or 500).
The usual cause: the button calls a backend function that creates the checkout, and that function fails on the live site. Often a key it needs was set only for testing, or it was never added to the live environment.
2. Checkout opens, but the payment fails
The Stripe page opens, but the card is refused, or there's an error about a product or price that doesn't exist.
The usual cause: a mix of test and live. Stripe's docs are clear: "Each mode has its own set of API keys, and objects in one mode aren't accessible to the other. For example, a sandbox product object can't be part of a live mode payment." So live keys with test product or price IDs fail, and so do test keys with live ones.
Check it: in your app's settings or environment, the publishable key should start with pk_live_, the server key with sk_live_ or rk_live_, and every product or price ID should come from Stripe's live mode, not the sandbox. There's more on this in Stripe works in test mode but fails live.
3. They paid, but nothing happened
Stripe shows the payment, but the customer's order, credits or plan never appear, and they get no confirmation.
The usual cause: your app learns about a payment from a webhook, a message Stripe sends to your app after the payment. The webhook was set up for testing, not for live. Stripe's go-live steps say: "If you use webhooks, update each webhook endpoint's URL and copy the new signing secret."
Check it: in Stripe, switch to live mode, open Webhooks, and check that there's an endpoint pointing at your live site and that recent deliveries succeeded. Failed deliveries show up there with their error.
Fix it in your builder
Paste this, with what you saw:
Customers can't pay on my LIVE site: [the button does nothing / checkout shows an error / they paid but no order appeared]. Check that the checkout function works on the live site with live Stripe keys from the live environment (pk_live and sk_live or rk_live), that every product and price ID is from Stripe live mode, and that a live webhook endpoint points to my live site with its live signing secret. Never put the secret key in front-end code. Tell me exactly how to test one real purchase and refund it.
Then make one real purchase on the live site with your own card, check that the order appears, and refund yourself in Stripe.
Check the whole path, the way a customer does
Paste your app's link at vibe-fixer.com. An AI agent goes through your live app like a new customer, all the way to checkout (it never pays), tells you where the path breaks, and gives you the exact fix for one problem to paste into your builder, free. Then it re-tests the live app to prove it worked. No account needed.
Related: Stripe works in test mode but fails live · Test your live app like a real customer
Still stuck?
Paste your app’s link for a free test — no account. Your AI agent goes through it like a first customer, shows you what breaks, then fixes it while you watch.