Skip to content
Paul Walsh

Website fixes · Guide

How to Fix WooCommerce Payment Not Working

By Paul Walsh Updated 5 min read

A broken checkout is the worst thing that can happen to a WooCommerce store, because it fails quietly. Customers rarely tell you their payment failed. They just buy somewhere else, and you only notice when orders dry up.

Payment problems show up in a few different ways: the card is declined, the checkout shows an error, the payment option has disappeared, or the customer pays and the order sits on "Pending payment". Each points to a different cause. Here's how to work out which one you've got, and what to check first.

Start with a real test

Before changing anything, place a real order yourself on the live site with a real card, ideally for a cheap product. Note exactly what happens: the error message, whether the money left your account, and what status the order shows in WooCommerce afterwards. Then look at WooCommerce, Status, Logs, where Stripe, PayPal and most other gateways write a log. The log usually says exactly why the payment failed.

The payment option has disappeared

The gateway plugin is disabled or out of date. Check WooCommerce, Settings, Payments. If Stripe or PayPal is switched off, or the plugin needs updating, the option can vanish from the checkout.

Your checkout uses blocks and the gateway doesn't support them. Newer WooCommerce stores use the block-based checkout. Some older payment plugins only work with the classic checkout, and simply don't appear in the new one. Either update the gateway, switch to a supported one, or put the classic checkout back.

The option is restricted. Some gateways only show for certain currencies, countries, order values or products. If you've changed currency or sell to a new country, check the gateway's own settings.

PayPal Standard has been retired. Many older stores still use the original PayPal Standard option, which WooCommerce has phased out. The supported route is the official PayPal Payments plugin.

Payments are declined or show an error

Wrong or expired keys. If you've recently moved hosting, restored a backup or reinstalled the plugin, the connection to Stripe or PayPal may have been lost. Reconnect the gateway from its settings page and check the account it connects to is the right one.

Still in test mode. A store left in test or sandbox mode declines every real card. It's one of the most common causes after a new site goes live.

Your payment account has a problem. Stripe and PayPal sometimes pause payments while they ask for verification documents or extra information. Log in to your Stripe or PayPal dashboard and look for a notice. No amount of website fixing helps until that's sorted.

3D Secure is failing. Most UK cards now need the customer to confirm the payment in their banking app. If a JavaScript error on your checkout stops that pop-up appearing, the payment can't complete. A conflict with another plugin, or an aggressive speed plugin, is the usual cause.

An SSL problem. Payments need a valid HTTPS connection. If your certificate has expired, or parts of the checkout load over plain HTTP, payments can fail. Check the padlock shows on the checkout page itself, not just the homepage.

The customer paid, but the order says "Pending payment"

This one costs the most, because the money is taken but the store doesn't know. The customer gets no confirmation email, and the stock doesn't go down.

Webhooks aren't reaching your site. After a payment, Stripe and PayPal send a message called a webhook to tell your store the payment succeeded. If that message is blocked, the order never moves on. Check the webhook settings in your Stripe or PayPal dashboard: the address must match your current domain exactly, including https and www. Moving domain or hosting is the classic way to break this.

A firewall is blocking the webhook. Security plugins and services such as Cloudflare can block the payment provider's messages as if they were an attack. Stripe and PayPal show failed webhook deliveries in their dashboards, with the reason. Add an exception for the webhook address.

The checkout is being cached. Caching plugins and hosting caches speed sites up by saving copies of pages. The basket, checkout and my account pages must never be cached, or customers can see stale totals, other errors, or a checkout that doesn't complete. Check your caching settings exclude them.

The checkout page itself is broken

A plugin or theme conflict. If the problem started after an update or a new plugin, test on a copy of the site with only WooCommerce, your payment plugin and a default theme active. If the checkout works, add the others back one at a time until it breaks.

The checkout page has been edited. If someone has removed the checkout block or the checkout shortcode, the form won't appear. Go to WooCommerce, Settings, Advanced and check the right page is set as the checkout.

Permalinks out of sync. Go to Settings, Permalinks and click Save Changes without changing anything. It's harmless and occasionally fixes checkout redirects.

Stop it happening again

Payment problems almost always arrive after a change: an update, a new plugin, a hosting move or a new domain. After any of those, place a test order. Better still, test the checkout once a month even when nothing has changed, and keep an eye on the failed webhooks list in your Stripe or PayPal dashboard.

If you've worked through this and the checkout is still broken, or you're losing orders and need it sorted quickly, message me. It's a job I fix regularly as part of WooCommerce fixes, with the price agreed before I start, and a shop that can't take payments goes to the front of the queue.

About Paul Walsh

Developer based in Blackburn with 25+ years in electronics and tech. I've run online businesses of my own, and now build and fix websites for small businesses across the UK.

Related guides