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.
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
-
Reproducing the journey
I place a test order under the same conditions as the blocked customer, to observe the actual behaviour rather than guess.
-
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.
-
Checking the webhooks
I verify the gateway’s notifications reach the site, checking the WooCommerce logs and the payment provider’s dashboard.
-
Looking for a plugin conflict
I temporarily disable recently installed plugins that could interfere with the payment confirmation hook.
Worth reading next
-
Setting up a payment webhook
The piece almost always missing behind a stuck order.
-
Reading WooCommerce error logs
Gateways record there the exact refusal the bank returned.
-
VAT miscalculated
A wrong total can block payment confirmation.
-
Cart emptying itself
Sessions and caching: the other cause of a payment that never lands.
Describe your need in one minute
A few targeted questions so I can reply with an estimate rather than another questionnaire.