# Payment problem on your WooCommerce shop

> A WooCommerce order stuck as "payment pending" even though the customer was actually charged, or a missing payment method at checkout: these blockers cost sales without necessarily generating a visible complaint.

- Source canonique : [https://allaux.fr/en/wordpress-woocommerce/probleme-paiement](https://allaux.fr/en/wordpress-woocommerce/probleme-paiement)
- Langue : EN
- Dernière mise à jour : 2026-09-30

## Direct answer

> Open WooCommerce, Status, Logs and pick the file named after your gateway: the provider’s exact response is written there with a timestamp. An order stuck on pending payment while the customer has been charged almost always means a server-to-server notification is not arriving: check the callback URL registered with the provider, and that no cache or firewall intercepts it before WordPress.

## How WooCommerce confirms a payment

WooCommerce delegates payment confirmation to a webhook sent by the gateway (Stripe, PayPal, etc.) to a URL like /wc-api/gateway_name/. When the bank confirms the payment but the order stays "pending", the cause is almost always that this webhook never reaches the site: an application firewall at the host, a security plugin blocking external requests, or an invalid SSL certificate causing the server-side call to fail.

The woocommerce_payment_complete hook then triggers the stock update and confirmation emails. If another plugin hooks into the same point and throws a PHP error, the chain stops dead: the payment went through, but the order stays stuck as if nothing happened.

Another common case: a gateway plugin update changes the API version used without the keys or mode (test/live) being rechecked, silently switching the shop into test mode while customers think they’re paying for real.

## What brings me onto this kind of case

- Order stuck as "payment pending" even though the customer was charged
- A payment method (card, PayPal, bank transfer) missing at checkout
- Error shown after returning from the bank following 3D Secure authentication
- Payment works in test mode but not under real conditions
- Cart emptied or a session error right before final checkout

## How I diagnose

1. **Reproducing the journey** — I place a test order under the same conditions as the blocked customer, to observe the actual behaviour rather than guess.
2. **Checking the mode and keys** — I check that the gateway is properly in live mode with the correct API keys, not left in test mode after an update.
3. **Checking the webhooks** — I verify the gateway’s notifications reach the site, checking the WooCommerce logs and the payment provider’s dashboard.
4. **Looking for a plugin conflict** — I temporarily disable recently installed plugins that could interfere with the payment confirmation hook.

## Don’t manually validate stuck orders without checking

> Forcing an order’s status by hand without confirming the payment was actually received can create a gap between your accounting and actual takings. I always check with the payment provider first.

## Worth reading next

- **Setting up a payment webhook** — The piece almost always missing behind a stuck order. ([/guides/configurer-webhook-paiement](/guides/configurer-webhook-paiement))
- **Reading WooCommerce error logs** — Gateways record there the exact refusal the bank returned. ([/guides/lire-logs-erreurs-woocommerce](/guides/lire-logs-erreurs-woocommerce))
- **VAT miscalculated** — A wrong total can block payment confirmation. ([/wordpress-woocommerce/problemes/tva-mal-calculee](/wordpress-woocommerce/problemes/tva-mal-calculee))
- **Cart emptying itself** — Sessions and caching: the other cause of a payment that never lands. ([/wordpress-woocommerce/problemes/panier-qui-se-vide](/wordpress-woocommerce/problemes/panier-qui-se-vide))

## FAQ

### Will the customer be charged twice if I reprocess their order?

No, if the payment has already been accepted by the bank it won’t be taken again. The work involves matching the existing transaction to the stuck order, not restarting a payment.

### Do I lose the order if it stays stuck for a long time?

No, the order stays recorded in WooCommerce even while pending. The risk is more that the associated stock stays reserved, or that the customer, seeing no confirmation, orders elsewhere.

### What access do I need to give you?

WordPress admin access, FTP or SSH access, and if possible access to your payment provider’s dashboard to check the notifications sent.

### How long does it take to fix a payment blockage?

A forgotten test mode or an API key issue is fixed in minutes. A webhook blocked by the server can need coordination with the host, so sometimes longer.

### Do I need to switch payment plugins?

Rarely as a first move. The cause is most often a configuration or network block, not the plugin itself. A switch is only recommended if the gateway is genuinely abandoned by its publisher.
