WooCommerce fixes / failed order but customer charged

WooCommerce Failed Order but Customer Charged? Causes & Fix

The order says Failed. The customer has a receipt and an angry email. The money is real — but so is the order, and you almost certainly shouldn't refund it. Here's how to establish what actually happened, and what to do about it in the next ten minutes.

Last updated: 16 Jul 2026 · ~7 min read

Quick answer

The charge succeeded at the gateway and something threw afterwards, so WooCommerce marked the order Failed while the money moved. Don't refund yet. First check your gateway dashboard: if the charge is captured, mark the order Processing and fulfil it — that never re-charges anyone. If it's only authorised, no money has actually left yet.

Failed means "I didn't hear yes" — not "you weren't charged"

The charge and the order live in two different systems. Your gateway takes the money; WooCommerce records the sale; a confirmation message joins the two. Failed only means WooCommerce didn't get a confirmation it could act on — either it never arrived, or it arrived and the code that completes the order threw an error partway through. Neither of those reaches back and reverses a charge. So a Failed order sitting next to a real payment isn't a contradiction; it's the normal outcome of the wire between the two systems breaking after the money moved.

That's why refunding is usually the wrong first move: you'd be refunding a sale the customer still wants and still expects to receive. The customer's problem isn't the money — it's that they paid and have no order. Give them the order. If you're specifically on PayPal, the mechanism is IPN and the fix is more specific — see PayPal payment received but WooCommerce order failed. This guide covers the gateway-general case.

The most common causes (most likely first)

  1. The charge succeeded and the order-completion code threw afterwardsThe gateway shows a successful, captured charge — and the order has a note recording the transaction, but the status is Failed. Check WooCommerce → Status → Logs and your PHP error log for a fatal at that exact timestamp. Something hooked to order completion (a CRM sync, an invoice or accounting plugin, a stock integration) died after the payment was taken.
  2. The confirmation never arrived — a blocked or failing webhookThe order has no transaction note at all, and the gateway's webhook log shows a failed delivery, a 4xx or 5xx, or nothing sent. WooCommerce never heard about the payment, so it aged the order into Failed. A firewall or security plugin blocking the gateway's IPs is the usual culprit.
  3. The payment was authorised but never capturedThe gateway shows the charge as uncaptured, pending or requires capture. No money has actually left the customer's account — they're seeing a pending authorisation on their statement, which looks identical to a charge and isn't one. Do not refund this; there's nothing to refund.
  4. The customer retried and you're looking at the wrong attemptThe gateway shows two attempts seconds apart — one failed, one succeeded — and there are two orders, or one Failed order and a successful charge. The Failed order is the abandoned first try. Find the successful attempt's order before you touch anything.
  5. 3D Secure completed but the customer never made it backThe gateway records a successful authentication, then nothing. The customer closed the tab, or the return redirect broke, so the order was never completed on your side. Whether money moved depends on whether the gateway captured — check that first.
  6. The gateway itself reversed the charge after authorisingThe gateway shows the charge succeeded and then was blocked, reversed or refunded by its own fraud rules. The customer may still see a pending authorisation for a few days. Nothing for you to refund — the gateway already handled it.

Where to look first

Would you know if this happened again tonight?

The cruelty of this bug is that it's completely silent from your side. A Failed order looks like an abandoned checkout — which is why these sit unnoticed until a customer who paid three days ago finally emails to ask where their order is. By then it's a refund demand or a chargeback, not a fix. DiagnosticIQ's free dashboard watches for exactly this shape — orders marked Failed that have a successful charge behind them — and tells you the same day, while it's still a five-minute fix and a grateful customer. Order Rescue goes further and helps you recover the order itself.

Get the free plugin

Made by Prima Digital — the team behind this guide. Free forever; no card to install.

How to know you fixed it

Verify

The recovered order should sit at Processing with a note carrying the gateway transaction ID and no second charge against the customer — then place one test order and confirm it moves to Processing on its own, which proves the confirmation path is working again.

Frequently asked

Should I refund the customer?

Almost never. They paid for something they still want. If the charge is captured, mark the order Processing and fulfil it. Only refund if you genuinely cannot supply the order, or if they were charged twice — then refund the duplicate only.

Will marking the order Processing charge them again?

No. Changing an order's status by hand only updates the record in WooCommerce. It never contacts the gateway and never takes money.

The customer says they were charged but the gateway shows nothing captured. Who's right?

Both. They're almost certainly looking at a pending authorisation, which looks identical to a real charge on a bank statement and disappears on its own within about a week. Tell them that plainly — it defuses most of these.

How do I stop this happening again?

Fix the underlying cause rather than the order — usually a broken webhook or a plugin fatalling during order completion. Then watch for Failed orders daily; the damage here is entirely in how long it goes unnoticed.

>_
John O'Keane — Founder, Prima Digital · LinkedIn
Contributions by David Zhang · LinkedIn
I build DiagnosticIQ, the WooCommerce diagnostic plugin, and I've talked more than one store owner out of refunding an order the customer had paid for and still very much wanted.