Start free trial

Stripe not working on WooCommerce checkout: causes and fixes

Stripe missing at checkout, card form blank, payments declined or orders stuck on Pending payment? Find the cause and fix it, step by step.

  • 8 min read
  • 6 steps
  • Updated

This guide is for the free WooCommerce Stripe Payment Gateway plugin, the most common way to take Stripe payments in WooCommerce. Most Stripe problems fall into five groups. Pick the one you’re seeing.

What goes wrong with Stripe?

Pick what you or your customers see. We’ll point you to the right steps.

Choose a stage above.

Stripe doesn’t appear at checkout

  • Stripe isn’t connected, or the card method is switched off
  • The account is in the wrong mode, or its keys were changed
  • The method’s country or currency rules

Check it’s connected Missing payment method guide

The card fields don’t load

  • Script optimisation or caching stops Stripe’s script
  • A security header blocks js.stripe.com
  • A JavaScript error from another plugin

Card fields not loading

The payment is refused or shows an error

  • The bank declined it (often nothing to fix on your side)
  • Test mode and live mode mixed up
  • Stripe’s fraud rules blocked it

Find the real reason Check test or live mode

The customer paid, but the order stays on Pending payment

  • Stripe can’t reach your store to confirm the payment (the webhook)
  • A firewall or security plugin blocks Stripe
  • An error on your site when the confirmation arrives

Fix the webhook

The Apple Pay or Google Pay button doesn’t show

  • The shopper’s device or browser has no saved card
  • The method isn’t switched on in Stripe’s settings
  • The page isn’t on https, or the domain isn’t registered

Wallet buttons

Check Stripe is connected and switched on

Go to WooCommerceSettingsPayments and open Stripe. If you see the screen below, Stripe isn’t connected yet, so it can’t appear at checkout. Press Create or connect an account and sign in to your Stripe account.

WooCommerce Stripe settings showing Get started with Stripe and the Create or connect an account button
Stripe before it’s connected. Screenshot from our test store.

Once it’s connected, check the payment methods list in the same settings: Card must be switched on, plus any others you want to offer.

Test mode or live mode?

Stripe keeps test and live payments completely separate. Mixing them up is one of the most common causes of failed payments:

  • Test mode on a live shop: real cards are refused, and no real money arrives.
  • Live mode: Stripe’s test card numbers are refused. Only real cards work.
  • Switched accounts or keys: customers and payments saved in one mode don’t exist in the other, so returning customers can fail.

To check the setup on a staging copy or in test mode, use Stripe’s standard test card with any future date and any three-digit code:

Stripe test card (test mode only)
4242 4242 4242 4242

Find the real reason a payment failed

Shoppers usually see a short, general message. The real reason is in two places. In your Stripe Dashboard, open Payments and click the failed payment: it shows the decline reason or whether Stripe’s fraud rules (Radar) blocked it. In WordPress, switch on Log debug messages in the Stripe settings, then look under WooCommerceStatusLogs for the woocommerce-gateway-stripe log.

MessageWhat it meansWhat to do
Your card was declined.The customer’s bank said no.Usually nothing on your side. If many cards fail at once, check the Stripe Dashboard for a pattern.
Invalid API Key providedThe keys the plugin uses were changed, deleted or rolled in Stripe.Reconnect Stripe in the plugin settings.
No such customer … a similar object exists in test modeSaved details from test mode are being used in live mode, or the other way round.Check the mode; returning customers may need to enter their card again.
Blocked (in the Stripe Dashboard)Stripe’s fraud rules stopped the payment.Review the payment and your Radar rules in Stripe.
There was an error processing the paymentA general message; the log has the detail.Read the woocommerce-gateway-stripe log for that time.

Card fields don’t load

Stripe’s card form comes from Stripe’s own script (js.stripe.com). If that script is delayed, combined with others or blocked, the card fields stay empty and the shopper can’t pay.

  • Exclude the checkout page from “delay JavaScript”, “combine” and “minify” settings in your optimisation or caching plugin.
  • Clear every cache: plugin, host and CDN.
  • If you or a security plugin set a Content Security Policy, it must allow Stripe’s domains.

The browser console on the checkout page (F12 → Console) shows which one it is: a red error naming the plugin or the blocked Stripe address.

ElementsConsoleNetworkExample
JQMIGRATE: Migrate is installed, version 3.4.1
✕ Uncaught TypeError: Cannot read properties of undefined (reading 'mount')
  at checkout.js:212 /wp-content/plugins/example-payments/assets/checkout.js
[Violation] 'load' handler took 182ms

Orders stuck on Pending payment

After a payment, Stripe sends a message to your store (a webhook) to confirm it. If that message can’t get through, the customer has paid but the order stays on Pending payment.

Example A payment that never reached the order
  1. Customer pays by cardStripe takes the payment.
  2. Stripe’s confirmation is blockedA new firewall rule refuses it (error 403).
  3. Order stays on Pending paymentNo confirmation email, nothing to ship.
  4. Customer emails: “Was I charged?”Yes, and the order looks unpaid.

In your Stripe Dashboard’s developer settings, open Webhooks and look for failed deliveries to your site. The address must be your store’s address followed by /?wc-api=wc_stripe, for example:

Webhook address (use your own domain)
https://yourstore.com/?wc-api=wc_stripe
  • If deliveries fail with a 403 or a challenge, allow that address in your firewall or security plugin.
  • If the webhook is missing or wrong, the Stripe plugin’s settings can set it up again for you.
  • Once it works, the stuck orders update as Stripe retries: it keeps retrying failed live messages for up to three days, and you can resend one from the Dashboard.

Apple Pay and Google Pay buttons missing

These buttons only appear when everything below is true, so a missing button on your own phone doesn’t always mean a fault.

Know next time, before your customers do

Stripe problems often start with a change somewhere else: an optimisation plugin update, a new firewall rule, keys rolled in Stripe. Customers rarely report them; they just buy somewhere else.

Cart Lookout places a real test order on your store every 2 hours and after every update, then deletes it. Your customers don’t see it and no emails go out. If checkout fails twice in a row, you get an email with the step that broke, a screenshot and the change made just before it.

Cart Lookout store page listing recent plugin updates, each followed by a passing test order
Example: a store page with demo data. Every update is followed by a test order.
See how it works From $15/month · 14-day free trial

Still stuck? Email hello@cartlookout.com and a developer will take a look. More fix guides