Stripe says paid but WooCommerce says pending
The short answer
If Stripe shows a successful payment but WooCommerce leaves the order pending, do not charge the customer again. Match the payment to the order, then inspect webhook delivery, gateway logs and order notes. A blocked or rejected event is one possible cause. Confirm the payment state before retrying events or changing fulfilment.
The request usually sounds like this:
Stripe says paid, but the order still says pending. We check the PaymentIntent, order reference and event delivery first. A fix is handled by repairing the verified delivery or processing fault, then testing one matched event safely. Prevention adds webhook checks and checkout testing after gateway updates.
Start with the payment, not the order label
Confirm whether Stripe shows a successful charge, an authorisation or an incomplete payment. Check the amount, currency, account and order reference. Keep fulfilment paused until the records agree. Do not collect card details, issue a second charge or mark every pending order paid.
Reconcile without duplicate side effects
Take a backup and inspect gateway logs with sensitive values redacted. Correct the identified fault first. Event replay can trigger email, stock or fulfilment actions, so confirm the gateway handles repeated events safely. Test with Stripe test mode on staging, then reconcile the specific live payment with an audit note.
Keep checkout changes under care
Gateway updates need checkout tests, not just a successful homepage load. Commerce care is for WooCommerce and includes checkout, cart and payment monitoring. Agree checks for the gateway and extensions you actually use.
Trace the fault safely
| Symptom | Possible cause | Safe test | Fix |
|---|---|---|---|
| No matching delivery attempt | Wrong account, mode or webhook endpoint | Match the live PaymentIntent and configured destination | Correct the endpoint and selected events |
| Delivery gets 403 | Firewall or access rule blocks Stripe | Inspect delivery response and firewall logs | Adjust the specific verified rule without disabling protection sitewide |
| Signature check fails | Endpoint signing secret does not match | Compare endpoint configuration without exposing secrets | Configure the correct endpoint secret and retest |
| Delivery returns 500 | Gateway or extension error | Review redacted logs and reproduce in staging | Repair the identified conflict or handler |
| Delivery returns 200 but order stays pending | Reference mismatch or processing fault | Compare order notes, event ID and gateway logs | Repair mapping or processing and reconcile the matched order |
| Stripe payment is not succeeded | Authorisation or incomplete payment | Inspect the actual PaymentIntent state | Follow the gateway payment flow rather than forcing paid status |
Commerce is $349/mo. Review the plan on pricing.
Start with an Emergency Fix
Emergency Fix is $249. We confirm the technical scope before work starts. First response: 8 to 12 hours.
Discuss the Emergency FixChoose the next step
Frequently asked questions
Should I ask the customer to pay again?
Not until you have checked Stripe and matched the payment. A second attempt can create a duplicate charge.
Can I resend the webhook?
Only after matching the event to the order and correcting the fault. Check repeat handling and side effects before replaying a live event.
Is every pending order a webhook failure?
No. Payment may be incomplete, the order reference may not match or a gateway extension may fail while handling a delivered event.
