Guides Payment troubleshooting

Field guide 14

WooCommerce Order Stuck on Pending Payment? Check These 5 Things

Find why an order remains Pending payment: confirm its status, compare order notes with Stripe evidence, check the connection and webhooks, then retest safely.

1. Confirm the status and record the failing path

Open the order and confirm it is Pending payment. This indicates that WooCommerce is awaiting payment; it does not independently prove that the gateway received no money. On hold means payment confirmation is pending, while Failed means the payment failed or was declined.

Record the order reference, payment method, amount, currency, timestamp and checkout message. Reproduce the problem only on staging with dummy details and Stripe test mode. The tutorial uses dummy orders #46 (Pending), #47 (On hold with bank transfer) and #48 (Failed); their statuses were reported as WP-CLI verified, not evidence of real transactions.

2. Compare order notes with Stripe payment evidence

Read the order notes for transaction references, errors and status changes. Missing notes alone do not establish the cause. Compare them with the corresponding payment in the correct Stripe account and mode: live mode for a real payment investigation, test mode for the staging exercise.

Match the order reference, amount, currency and time. Distinguish a successful captured payment from a pending payment or an authorization awaiting capture. If the result is uncertain, investigate before requesting another attempt; do not create a duplicate charge.

If Stripe confirms success while WooCommerce remains Pending, investigate callback delivery and reconcile the records before fulfillment. A browser return, customer message or unrelated test is not payment confirmation.

3. Check the Stripe connection and mode

Open WooCommerce → Settings → Payments → Stripe and inspect the configuration for the checkout path being tested. Confirm that the method is enabled and that the intended account and mode are connected. Where credentials are configured manually, test credentials belong with test mode and live credentials with live mode.

Use the documentation for your installed extension version. Keep test payments on staging and never expose keys in screenshots or support records.

4. Inspect webhook configuration and delivery

The Stripe extension sends API requests to Stripe, while Stripe sends event notifications back through webhooks. In the extension connection settings, inspect the Live and Test tabs and confirm the applicable webhook configuration. Modern versions configure webhooks when connecting; use the documented Reconfigure webhooks action if the configuration is missing or incorrect.

Configuration is only part of the investigation: inspect delivery attempts for the relevant event and correlate them with order notes. Verify the correct HTTPS endpoint can receive requests, and investigate failed responses with your host or gateway support. Do not disable security protections indiscriminately.

This tutorial did not demonstrate actual Stripe webhook delivery to a public staging endpoint. Its webhook panels are illustrative examples.

5. Retest safely and check order timing

Hold stock (minutes), under WooCommerce → Settings → Products → Inventory, can cancel eligible unpaid Pending payment checkout orders after its time limit and release held stock. It does not apply to On hold orders, confirm payment or repair webhook delivery.

Only after confirming that payment has not succeeded and no payment remains in flight should you consider sending the existing order payment link through Send order details or Customer payment page. Do not request another payment while the gateway result is uncertain.

After a relevant fix, place one controlled Stripe test-mode order on staging. Confirm the gateway result and the corresponding WooCommerce order notes and status. The expected status depends on the payment method and products; do not force Processing just to make the test appear successful.

If the problem still reproduces after configuration and delivery checks, investigate theme or extension conflicts on staging while preserving the dependencies needed for the test.

What to capture for support

Prepare a redacted record of the order status, payment method, installed versions, checkout type, time and timezone, gateway result, relevant order notes and webhook delivery outcome. Include the failing staging steps and the result of one controlled change. Exclude credentials and customer information.

If payment is confirmed but the expected email is missing, continue with the order emails troubleshooting guide.

Sources and further reading