WooCommerce payment webhook not firing (orders stuck)
Quick answer
When a payment succeeds but the WooCommerce order stays on "pending" or "on-hold", the gateway's webhook (IPN) isn't reaching your site. The usual causes are a wrong webhook URL after a migration, a security plugin or firewall blocking the gateway's IP, or a fatal PHP error on the webhook endpoint. Confirm the webhook URL in the gateway dashboard, unblock the provider, and replay the missed events.
Symptoms
- Customer paid but the order stays "pending payment" or "on-hold"
- Stock isn't reduced and confirmation emails don't send
- Payments appear in Stripe/PayPal but not as completed WooCommerce orders
Common causes
- Webhook/IPN URL wrong or stale after a site migration or URL change
- Security plugin, WAF, or host firewall blocking the gateway's callback IPs
- A PHP fatal error on the webhook handler (often after a plugin update)
- Caching layer serving the webhook endpoint instead of executing it
How to check
- 1.Compare the webhook URL in your gateway dashboard to your live site URL
- 2.Check the gateway's webhook delivery log for failed/blocked attempts
- 3.Look for PHP errors in your server/WooCommerce logs at the payment time
- 4.Exclude the webhook/API endpoints from full-page caching
How to fix it
1. Fix the webhook URL
Set the gateway's webhook to your current site endpoint. After any migration or HTTPS change this is the #1 cause.
2. Unblock the provider
Allowlist the gateway's callback IPs in your security plugin/WAF so the webhook isn't rejected.
3. Replay missed events
Most gateways let you re-send recent webhooks — replay them so stuck orders complete and emails/stock sync.
4. Auto-recover next time
For sites Liulum manages, a failed webhook path triggers a safe, allow-listed repair (e.g. clear a stale cache on the endpoint, restart the worker) and re-verifies the order flow — logged and reversible.
How Liulum helps
Liulum watches this path continuously, tells you in plain English the moment it breaks, and on sites it manages can run a safe, allow-listed, reversible repair automatically — so an outage lasts seconds, not hours.
Protect your storeFrequently asked questions
Why is my WooCommerce order stuck on hold after payment?
The payment gateway's webhook isn't reaching your site, so WooCommerce never gets told the payment cleared. It's usually a wrong webhook URL, a firewall blocking the gateway, or a PHP error on the endpoint.
How do I test a WooCommerce webhook?
Use your gateway's webhook delivery log to see attempts and responses, then re-send a test event. A 200 response that completes the order confirms it's fixed.
Can Liulum fix a broken webhook automatically?
On WooCommerce sites Liulum manages, yes — it monitors the order/automation path, and when a webhook fails it can run a safe, allow-listed recovery (cache clear, service restart) and re-verify, every action logged and reversible. On sites it only monitors, it alerts and diagnoses so you fix it fast.