This guide works through payment gateway failures by symptom, lists the causes behind each, and ends with how to notice the next one in minutes instead of from a customer email.

First: Which Symptom Do You Have?

Payment problems split into four patterns. Identify yours before changing anything — the fix for a missing gateway is different from the fix for orders stuck in Pending.

SymptomWhat the customer seesWhere the problem usually is
Gateway missing at checkoutNo card option, or only some payment methodsGateway settings, currency/country rules, plugin conflict
Card fields don't load / checkout spinsEmpty payment box or endless spinnerJavaScript error, blocked script, caching, CSP or firewall
Payment fails at "Place order"Error message, or returned to checkoutAPI keys and mode, 3D Secure, declines, server errors
Paid but order not updatedCustomer charged; order stays Pending or On holdWebhooks or notification URL not reaching the store

Symptom 1: The Payment Method Doesn't Appear at Checkout

Check the gateway is enabled for this situation. In WooCommerce → Settings → Payments, confirm the method is enabled. Then check its own restrictions: many payment methods only show for certain currencies, billing countries, or order totals. A store that switched currency, added a new shipping country, or ran a price-changing promotion can silently hide a method.

Check account connection. If the gateway is disconnected, in test mode on a live site, or its account needs verification, some extensions hide the method rather than show an error.

Look for a plugin conflict. Checkout field editors, one-page checkout plugins, and block-based vs classic checkout changes can remove the payment section entirely. WooCommerce's own guidance is to reproduce the problem with only WooCommerce and the gateway active, then re-enable plugins one at a time — do this on staging, not the live store.

Express buttons (Apple Pay, Google Pay) missing usually means the browser or device doesn't support them, the domain isn't registered with the provider, or the page isn't served over HTTPS without mixed content.

Symptom 2: Card Fields Don't Load or Checkout Spins Forever

Card fields for Stripe, WooPayments, PayPal, Square, and most gateways are rendered by the provider's JavaScript in an iframe. If that script doesn't run, the box stays empty.

Open the browser developer console on the checkout page and look for:

  • A JavaScript error thrown by another plugin or the theme before the gateway script runs. One broken script can stop everything after it.
  • A blocked script — an ad blocker, a strict Content Security Policy, a cookie consent tool that holds back third-party scripts until consent, or a firewall rule stripping external JavaScript.
  • Script optimisation gone wrong. Minify, combine, defer, or "delay JavaScript" settings in performance plugins often break payment scripts. Exclude the gateway's scripts and the checkout page from those optimisations.
  • A cached checkout page. Checkout must never be page-cached; a cached copy carries stale nonces and session data, which shows up as spinners and "session expired" errors.
  • Failing AJAX requests to ?wc-ajax=update_order_review or, on block checkout, the Store API under /wp-json/wc/store/. A 403 there usually means a security plugin or WAF rule; a 500 means a PHP error — check WooCommerce → Status → Logs.

Symptom 3: The Payment Fails When the Customer Clicks "Place order"

Keys and mode. (Stripe store? The dedicated WooCommerce Stripe troubleshooting guide goes deeper.) The most common self-inflicted failure: test keys on a live store, live keys on staging, or keys from a different account after a migration. Re-check the connection in the gateway's settings.

Genuine declines vs integration errors. Card declines, AVS/CVC mismatches, and 3D Secure authentication failures are customer-side and appear in the gateway dashboard with a decline reason. A sudden jump in declines across many customers is more likely a configuration change — or card-testing attacks triggering the provider's fraud rules.

3D Secure / SCA. European cards often require an authentication step. If the challenge window is blocked by a popup blocker, a modal from another plugin, or a script error, the payment fails after the customer thinks they paid.

Server-side errors. Enable logging in the gateway's settings, reproduce once, then read WooCommerce → Status → Logs. Search for the order number. WooCommerce's troubleshooting guide notes that a blank page on submit usually points to a PHP error rather than the gateway itself.

Recent changes. Check what updated last — WooCommerce, the gateway extension, the theme, a checkout plugin, or PHP. Updates are the most common cause of broken checkouts, and payment steps are where they show up first.

Symptom 4: The Customer Was Charged but the Order Stays Pending

This is the most expensive pattern because it looks like success to the customer and like a lost order to you.

WooCommerce marks most card orders as paid when the gateway confirms the payment — directly during checkout, or asynchronously through a webhook or notification sent from the provider to your store. When that message doesn't arrive, the order waits in Pending payment or On hold even though the charge succeeded.

Common causes:

  • Webhook endpoint missing or wrong. For Stripe, recent versions of the WooCommerce Stripe extension configure webhooks automatically when you connect, using an endpoint like https://yourstore.com/?wc-api=wc_stripe. You can check or reconfigure it in WooCommerce → Settings → Payments → Stripe, for both live and test mode. Deleting endpoints in the Stripe dashboard, changing the site URL, or migrating from staging can break it.
  • PayPal and other gateways that rely on a notification URL need that URL set correctly in the provider account; WooCommerce's docs flag incorrect notification URLs as a typical cause of Pending orders.
  • The store blocks the webhook. A WAF, bot protection, Cloudflare challenge, basic-auth password on the site, or security plugin can reject the provider's server-to-server requests. Check the provider dashboard's webhook delivery log for 403, 404, 5xx, or timeouts.
  • Maintenance or coming-soon mode returns an error to webhooks while shoppers with a bypass cookie can still check out.

Once fixed, reconcile the stuck orders against the gateway dashboard before marking any as paid.

A Diagnostic Order That Saves Time

  1. Reproduce it yourself on production with a low-value test product or test mode on staging (how to test checkout without real orders). Note exactly where it fails.
  2. Check the gateway dashboard — payments, declines, and webhook delivery logs tell you whether the provider saw the attempt.
  3. Check the browser console for JavaScript errors and failed network requests on checkout.
  4. Check WooCommerce → Status → Logs with gateway logging enabled.
  5. List what changed in the last 48 hours: updates, settings, caching, firewall rules, DNS, SSL.
  6. Isolate on staging: WooCommerce + gateway + default theme, then re-add plugins one at a time.
  7. Offer a fallback while you fix it — enable a second payment method and add a short notice at checkout rather than letting customers fail silently.

For failures beyond the payment step, the broader WooCommerce checkout not working checklist covers carts, sessions, and shipping.

How to Catch the Next Gateway Failure Before Customers Do

Every symptom above has the same property: the site is up. That's why uptime monitoring doesn't help here, and why most stores learn about gateway failures from a customer, a sudden drop in orders, or a pile of Pending orders days later.

What does catch them:

A checkout journey that reaches the payment step. A real browser adds a product to the cart, goes to checkout, fills the form, confirms the payment method and card fields actually render, and places a test order using test payment details — then expects the order-received page. If the gateway disappears, the card iframe stays empty, or "Place order" errors, the journey fails at that step with a screenshot. Run it every 5–15 minutes on stores with daily sales. That's what WooCommerce monitoring means in practice.

A re-run immediately after updates. Gateway extensions, WooCommerce core, and checkout plugins update often. A journey triggered right after a plugin update catches the break within minutes of the change — the NorthDuty Connect plugin sends that signal from WordPress.

Checks on the endpoints checkout depends on. Block-based checkout relies on the Store API; monitoring those endpoints catches 403s and 500s before they become visible. See WooCommerce Store API monitoring.

Order-status sanity checks. A simple daily look at how many orders sit in Pending payment for more than an hour is the fastest signal of a webhook problem. If that number jumps, check webhook delivery first.

Pair these with the gateway provider's own failed-webhook email alerts where available, and send checkout failures to a channel someone watches.

Summary

WooCommerce payment gateway failures fall into four patterns: the method doesn't show, the card fields don't load, the payment fails on submit, or the payment succeeds but the order never updates. Each has a short list of usual causes — settings and restrictions, JavaScript and caching, keys and authentication, or webhooks blocked from reaching the store. Diagnose in order: reproduce, gateway dashboard, console, WooCommerce logs, recent changes, then isolate on staging. And because none of these failures takes the site down, the reliable way to know about the next one is a real-browser checkout journey that reaches the payment step every few minutes and after every update.

Planning ahead for peak season? Work through the WooCommerce Black Friday checklist.