Skip to content

WooCommerce · Payment status troubleshooting

WooCommerce Payment Received but Order Still Pending

A payment in the provider dashboard and a pending order in WooCommerce can describe different stages of the same checkout. Confirm that money was actually captured, identify the exact order, and then investigate why the store did not record the result.

Monitoring without changing ordersYou control every correction

Why the payment and order can disagree

Investigate the event path rather than changing the order status immediately.

01

Notification did not arrive

A webhook or callback can be blocked by a firewall, fail validation or reach an outdated address.

02

The update failed inside WordPress

A gateway exception or conflicting extension can prevent the order update even when the provider accepted the notification.

03

The payment is not final

An authorization or delayed payment may legitimately precede the status you expect in the store.

Diagnosis path: four questions, in this order

Each answer rules out a group of causes. Stop at the first “no” — that is where the fix belongs.

  1. 1

    Is there a capture for this amount and currency in the provider account?

    If yes: Money was collected — go to question 2.

    If no: Only an authorization, a pending or a failed attempt. The pending order may be right; do not mark it paid.

  2. 2

    Does the capture carry this order’s reference (order number, PaymentIntent or PayPal order ID)?

    If yes: Go to question 3.

    If no: The payment may belong to another order or a repeated checkout. Find the order by the reference first.

  3. 3

    Did the provider deliver a notification to the shop after the capture?

    If yes: The event arrived — go to question 4.

    If no: A delivery problem: webhook address, signing secret, firewall or security plugin. Fix it, then re-send the event.

  4. 4

    Do the order notes or the gateway log show the event being processed?

    If yes: The shop processed it; something changed the status afterwards. Read the notes in time order.

    If no: The update failed inside WordPress. Look for an exception or a conflicting plugin in the gateway log at that minute.

Example: a capture the shop never recorded

A Stripe card payment where a security plugin rejected the webhook and the buyer closed the tab before the return page loaded.

Timeline (UTC)

10:41:58  WooCommerce  Order #10482 created — Pending payment
10:42:03  Stripe       pi_3Q8xY2… succeeded · ch_3Q8xY2… captured 89.90 EUR
10:42:04  Stripe       payment_intent.succeeded → /?wc-api=wc_stripe · HTTP 403
10:42:05  Browser      buyer closes the tab before “Order received”
10:43:10  Stripe       retry → HTTP 403 (live mode retries for up to three days)
11:30:00  WooCommerce  Order #10482 still Pending payment, no Stripe note

Illustrative sequence: identifiers, amounts and times are made up; the formats follow WooCommerce order notes and the providers’ dashboards. No customer data.

What this shows

The money is in Stripe and the reference is right; only the delivery failed. The fix is an allow rule for the webhook path and a re-send from the Stripe dashboard — not a second payment and not a manual “Processing” before the capture is confirmed.

Check the payment and the order side by side

  1. Open the payment in the correct Stripe or PayPal account and in the same test or live mode as the checkout.
  2. Inspect the actual capture, its amount and currency. Check whether a refund or reversal has already followed it.
  3. Locate the WooCommerce order by its payment reference. Read the timestamped notes, not just the badge in the order list.
  4. Inspect the provider notification history and WooCommerce gateway logs around that time. Record the error without sharing customer data or secrets.

Official references for the checks above:

Restore the missing update without charging twice

Resolve the confirmed cause

Correct the confirmed endpoint, signature or gateway error. Use the gateway’s documented notification retry procedure only after checking that it handles repeated events safely. Do not ask the buyer to pay again merely because the order is pending.

Verify the result

Re-read the order and provider record after recovery. Confirm that the captured amount was recorded once and that stock, e-mails and fulfillment follow your store’s normal workflow. Test the underlying fix in sandbox or staging.

How Business Watchdog can detect this mismatch

For a supported, linked payment, Business Watchdog can identify a provider capture that the store has not recorded after its grace period. It reads the order and independent Stripe or PayPal evidence; it does not rely on the store’s paid marker alone.

  • Order and payment data are compared only within the connected, supported coverage.
  • Missing or stale data is shown as incomplete, not as a healthy result.
  • Alerts can be delivered by e-mail or Telegram when the corresponding supported rule applies.

Where the coverage stops

A pending badge by itself is not an incident. Detection needs fresh sources, a reliable payment-to-order link and the appropriate coverage. The service does not repair webhooks or change order statuses.

How to connect monitoring safely

  1. Add WooCommerce with a read-only REST API key; the optional plugin adds checkout observation and faster store events.
  2. Connect Stripe with a restricted read key or PayPal with the permissions and warning shown in the dashboard.
  3. Wait for the initial synchronization and review live/test coverage. Enable notifications for the supported financial checks.

PayPal cannot provide strictly read-only credentials; Business Watchdog restricts its own requests and explains this before connection. Read the security and access details

Questions worth separating

Can I mark the order paid manually?

Only after independently verifying the capture and checking your gateway’s recovery procedure. A manual status change can trigger stock, e-mail or fulfillment actions.

Does a broken webhook always mean lost money?

No. Payment and notification delivery are separate events. Check the provider’s capture before deciding what happened.

Related troubleshooting guides

Keep the next discrepancy visible

Connect your store and the supported payment provider. Review the coverage and first synchronization before relying on the results. Features and limits depend on your plan.