An order sitting at Pending Payment means WooCommerce created it and never heard that the payment succeeded. The money may well have been taken.
Understanding the flow
The customer is sent to the payment provider, pays, and is returned to your site. Separately, the provider sends a message directly to your shop confirming the payment – a webhook or callback. It is that second message, not the customer returning, that moves the order forward. If it does not arrive, the order stays Pending even though payment went through.
The usual causes
- The webhook is not configured, or points at an old address. This is the most common cause after a site move – the shop works, but the callback still goes to the old domain.
- The customer closed the browser before being returned, on a gateway that relies on the return rather than a webhook.
- Something is blocking the callback – a security plugin, a firewall rule, or a maintenance mode page.
- The shop is in test mode while the gateway is in live mode, or the other way round.
What to do
Check the gateway's own dashboard first – it will tell you whether the payment succeeded and whether it attempted to notify you, often with the response it received. That single check usually identifies the problem.
Then check the webhook address configured at the gateway matches your current site, and look at the WooCommerce logs under Status, Logs, which record gateway activity.
Do not just mark them complete
Confirm at the gateway that each payment actually succeeded before changing an order status by hand. Otherwise you will eventually ship something nobody paid for.