GUIDE

Someone paid and no money arrived

Two symmetrical disasters live here. Either your checkout works beautifully and no money ever reaches you, or you believe you're testing and real cards are being charged. Both come down to which keys your app is using, and it's a two-minute check.

Which mode am I in?

Stripe keys announce themselves. Look at the keys in your app's settings:

key looks likemeaning
pk_test_ / sk_test_test mode: fake cards only, no real money, nothing reaches your bank
pk_live_ / sk_live_live mode: real cards, real money

The pk_ one is publishable and fine to appear in your site's code. The sk_ one is secret and must never be in anything the browser downloads. If you're unsure whether yours leaked, our free scanner checks a live site in seconds, and the emergency steps cover what to do if it did.

Going live properly

  1. Swap both keys in your host's environment settings, not in the code. Publish again afterwards, since these are read when the site is built.
  2. Recreate the webhook. This is the step almost everyone misses. Webhooks are how Stripe tells your app "that payment succeeded", and test-mode webhooks and live-mode webhooks are separate. In Stripe, switch to live mode, add an endpoint pointing at your real domain, and copy its signing secret into your app's settings. If the webhook still points at a preview URL, payments will succeed at Stripe and your app will never know, so orders won't appear.
  3. Complete Stripe's account activation. Bank details, business details, identity. Until that's done Stripe holds the money rather than paying it out, which looks identical to a broken integration.
  4. Buy something yourself. A real card, the smallest real amount, on the live site. Then confirm all three: Stripe shows the payment, your app shows the order, and your Stripe balance shows a payout pending. Refund yourself afterwards.

The prompt to paste

Check my payment setup and tell me plainly whether it is in test mode or live mode. Show me: which Stripe keys the app reads and from where, whether any secret key appears in code that ships to the browser, what webhook endpoint URL is configured and whether it points at my live domain, and which webhook events the app listens for. List anything that would stop a real payment from being recorded in my app. Don't change anything yet.

Test cards never touch real money, so testing costs nothing and proves everything up to the final step. The one thing test mode can't prove is that your bank details are right, which is why the small real purchase is worth doing.

Plyo is the home for AI-built projects — every version saved, one click to undo, one click to publish, plus a safety check, visitor counts and backups. Free to start: 3 projects, no card needed.

Give your project a home