Payment recovery guide
Payment succeeded but WooCommerce order is pending: recovery checklist
Current decision
Do not manually complete, refund, delete, or re-run payment actions until you verify the gateway transaction, WooCommerce order status, webhook delivery, captured amount, shipping, tax, discounts, refunds, and customer-facing receipt. The goal is to avoid turning one payment-state mismatch into duplicate fulfillment, duplicate refunds, or incorrect accounting.
Use this when
Use this checklist when the payment processor shows activity but WooCommerce does not clearly match it. Common examples:
- Stripe shows a successful or captured payment, but the WooCommerce order stayed Pending payment.
- PayPal, Mollie, WooPayments, or Stripe shows a different total than the WooCommerce order total.
- The customer says they paid, but the store did not send the expected order confirmation.
- Checkout failed or timed out, but the payment gateway still shows an authorization, capture, payment intent, transaction, or refund activity.
- Shipping, tax, coupon, currency, refund, or payout numbers do not reconcile.
15-minute recovery checklist
- Freeze the evidence first. Save the WooCommerce order ID, customer email, checkout time, payment gateway, plugin versions, order notes, gateway transaction ID, error message, and any screenshots before clearing caches or changing plugin settings.
- Check the payment gateway record. Open Stripe, PayPal, Mollie, or WooPayments and confirm whether the payment was authorized, captured, failed, refunded, disputed, cancelled, or still pending. Record the exact amount and currency.
- Check the WooCommerce order state. Compare order status, order total, payment method, transaction ID, order notes, stock changes, email events, shipping total, tax total, discount total, and refund records.
- Check webhook or notification delivery. Payment gateways often update store state through webhooks or server notifications. Look for failed deliveries, missing events, duplicate endpoints, blocked requests, or verification/signature errors.
- Reconcile money before fulfillment. Compare gateway captured amount to WooCommerce order total. Check item subtotal, shipping, shipping tax, product tax, coupon, fees, currency, exchange rate, partial refunds, and payouts.
- Make the smallest safe correction. Only after the records agree, choose one action: update order status, capture payment, refund, re-send invoice, contact customer, reconfigure webhooks, update plugin, or escalate to gateway/plugin support with evidence.
- Log the final state. Record what changed, who changed it, the before/after order status, payment state, amount, refund state, and whether the customer or accountant needs follow-up.
Gateway → store reconciliation map
| Compare | Why it matters | What to write down |
|---|---|---|
| Gateway transaction state | The processor is the source for whether money was authorized, captured, failed, refunded, or disputed. | Transaction/payment ID, status, amount, currency, time, fees, refund/dispute state. |
| WooCommerce order state | The store controls fulfillment, emails, inventory, and customer support workflow. | Order ID, status, order notes, transaction ID, email logs, stock notes. |
| Webhook / IPN / notification delivery | Many order-status mismatches happen when the gateway paid event does not reach or verify on the store. | Event ID, endpoint URL, HTTP status, delivery attempts, signature/verification errors. |
| Amount breakdown | Undercollection can hide in shipping, taxes, discounts, fees, currency, or rounding. | Item subtotal, shipping, tax, discounts, fees, total captured, total expected. |
| Refund and payout records | A payment can look fixed in the order screen while payout/accounting data remains wrong. | Refund IDs, payout IDs, balance/report line items, accounting notes. |
Search your site records
Look for these terms in order notes, logs, plugin logs, server logs, and support tickets:
pending payment
payment_intent.succeeded
payment_intent.payment_failed
checkout error
webhook verification failed
OrderProcessor.php
amount mismatch
shipping not included
tax mismatch
captured amount
transaction id
refund failed
Known issue records
| Symptom | Record | First check |
|---|---|---|
| Stripe paid, WooCommerce pending | WooCommerce Stripe payments stuck in Pending Payment | Reconcile successful Stripe payments against WooCommerce order status. |
| Stripe checkout error after update | WooCommerce Stripe 10.8.3 checkout error | Check cache layers, Stripe.js, Adaptive Pricing, and WooPayments conflicts. |
| Gateway charged less than order total | Stripe charged without shipping cost | Compare captured amount against shipping, VAT/tax, discounts, and total. |
| PayPal and WooCommerce totals disagree | WooCommerce PayPal amount mismatch | Audit discounted, gift-card, tax-sensitive, and negative-fee orders. |
Safety note
This is independent research, not official support, accounting advice, tax advice, legal advice, or a replacement for gateway/plugin support. When real money is involved, preserve evidence and verify the official processor record before making irreversible changes.
Get future revenue-breakage alerts
The product being tested is simple: save your WooCommerce payment stack and get notified when a plugin, gateway, checkout, webhook, refund, total, or reconciliation issue could affect real orders.