Step 0: Turn On Logging
Before changing anything, make the next failure visible. In the Stripe extension's settings, enable Log error messages, then reproduce the problem once. Logs appear under WooCommerce → Status → Logs. Search for the order number; Stripe log entries include identifiers such as the payment intent (pi_…) and charge (ch_…) and, for declines, the decline reason.
Then open the same payment in your Stripe Dashboard. If Stripe never saw the attempt, the problem is on your site. If Stripe shows the payment, the problem is the response getting back to WooCommerce.
Problem 1: Stripe Doesn't Appear at Checkout
Check the connection and mode. In WooCommerce → Settings → Payments → Stripe → Settings, confirm the account is connected. Test mode and live mode are separate connections — connecting live does not connect test mode, and vice versa. A store accidentally left in test mode, or switched to live without a live connection, can hide the payment method.
Check the payment method itself is enabled, along with its currency and country availability. Some Stripe payment methods only appear for certain currencies or billing countries.
Check for checkout conflicts. One-page checkout plugins, checkout field editors, and switching between classic and block checkout can remove or break the payment section. Reproduce on staging with only WooCommerce and Stripe active.
Problem 2: Card Fields Don't Load or Checkout Spins
The card form is rendered by Stripe's JavaScript. If that script is blocked or another script errors first, the box stays empty or the checkout spins.
- Open the browser console on checkout and look for errors mentioning
stripeor another plugin. - Exclude Stripe and checkout scripts from minify, combine, defer, and delay-JavaScript settings in performance plugins.
- Don't cache checkout. Cached checkout pages carry stale data and break the payment request.
- Check consent tools and Content Security Policy. Some cookie banners hold back third-party scripts until consent, and a strict CSP can block
js.stripe.com.
Problem 3: Payment Fails When the Customer Clicks "Place Order"
Keys from the wrong mode or account. After a migration or staging push, live settings can point at the wrong Stripe account or mode. Reconnect in the correct mode.
Genuine declines. Declines, CVC mismatches, and insufficient funds appear in the Stripe Dashboard with a reason. One customer declining is normal; many declines at once is a signal of a configuration change, fraud rules, or card-testing attacks.
3D Secure authentication. Many European cards require an authentication step. If a popup blocker, modal plugin, or JavaScript error stops the authentication window, the payment fails after the customer thinks they paid. Test with Stripe's 3D Secure test card 4000 0027 6000 3184 in test mode.
Card-testing attacks. Bursts of small failed payments from many cards usually mean bots are testing stolen cards on your checkout. Stripe's Radar rules, a CAPTCHA on checkout, and rate limiting help — and a checkout monitor will show if protections start blocking real shoppers.
Problem 4: Customer Is Charged but the Order Stays Pending
The payment succeeded in Stripe, but WooCommerce never heard about it. Stripe tells your store about payment events through webhooks; if those don't arrive, orders wait in Pending payment or On hold.
- Check the webhook connection. Recent versions of the extension configure webhooks automatically when you connect. Under WooCommerce → Settings → Payments → Stripe, the connection settings show whether webhooks are configured for live and test mode, and let you reconfigure them. The endpoint looks like
https://yourstore.com/?wc-api=wc_stripe. - Look at delivery attempts in the Stripe Dashboard's webhook section. Failed deliveries show the HTTP status your site returned.
- 403 or challenge pages mean a firewall, security plugin, Cloudflare rule, or maintenance mode is blocking Stripe's servers. Allow the webhook endpoint.
- 404 usually means the site URL changed (staging to live,
wwwto non-www) and the endpoint needs reconfiguring. - 5xx or timeouts point to PHP errors or an overloaded server — check WooCommerce → Status → Logs.
After fixing, reconcile Pending orders against payments in the Stripe Dashboard before marking any as paid.
Problem 5: Apple Pay or Google Pay Buttons Missing
Express checkout buttons only appear when the shopper's browser and device support them and a wallet is set up. They also require HTTPS without mixed content, and Apple Pay needs the store's domain registered with Stripe. If the buttons disappeared after moving domains, re-check the domain registration and the express checkout settings in the Stripe extension. When testing Apple Pay in test mode, a real card in the wallet is used but not charged; for Google Pay, add a Stripe test card to the Google account.
Test Cards to Keep Handy
| Card | Use it to test |
|---|---|
| 4242 4242 4242 4242 | A successful payment |
| 4000 0027 6000 3184 | 3D Secure authentication |
| 4000 0000 0000 0002 | A declined card |
Any future expiry date and any 3-digit CVC work in test mode. Never use real card numbers in test mode. For testing on production without charging anyone, see how to test WooCommerce checkout without placing real orders.
Stop Finding Out From Customers
Every Stripe failure above leaves the store online, which is why they're usually discovered through a customer email or a sudden drop in orders. Three habits catch them early:
- Run a checkout journey that reaches the payment step every 5–15 minutes. A real browser adds a product, fills checkout, confirms the card form renders, and completes an order with a test method, expecting the order-received page. See WooCommerce monitoring.
- Re-run it right after updates to WooCommerce, the Stripe extension, or checkout plugins — the moments Stripe checkouts most often break. The NorthDuty Connect plugin triggers those re-checks from WordPress.
- Watch Pending payment orders. A growing number of orders stuck in Pending for more than an hour almost always means webhooks stopped arriving.
Summary
When WooCommerce Stripe stops working, sort the problem first: Stripe not showing (connection, mode, availability), card fields not loading (scripts, caching, CSP), payment failing (keys, declines, 3D Secure, card testing), or orders stuck in Pending (webhooks blocked or misconfigured). Turn on logging, compare WooCommerce logs with the Stripe Dashboard, and fix from there. Then monitor the checkout through the payment step so the next Stripe failure reaches you in minutes.