PRO Features

Stuck Payments Monitoring

How PRO notices payments that start but don’t finish, the default thresholds, and what it cannot see.

The problem it looks for

A declined card leaves a record: WooCommerce marks the order Failed, and Payment Gateway Monitoring sees it. The harder case is a payment that starts and never finishes. The customer leaves during the redirect, the return page doesn’t load, or the gateway’s confirmation never arrives. The order stays unpaid, nothing is marked Failed, and nobody is told.

Stuck Payments Monitoring looks at your orders for exactly that pattern.

How it works

For each enabled payment gateway, PRO counts orders (counts only, never customer details) and compares two numbers:

  • Unfinished: orders that are still Pending payment, or were cancelled without ever being paid. (WooCommerce cancels unpaid orders after its stock-hold time, so stuck orders often end up there.)
  • Finished: orders that were paid (Processing, Completed, On hold or Refunded) or marked Failed.

The unfinished share is unfinished orders divided by all orders in the period. PRO compares the last hour’s share with that same gateway’s own usual share over the previous 7 days, so a gateway that normally loses many abandoned carts is not flagged for behaving normally.

The defaults

These values are fixed in this version and can’t be changed in settings. They are starting points that may be tuned as more real-store data is seen.

Signal Medium High Critical
Unfinished spike (last hour, against the gateway’s usual share) At least 3 unfinished orders, a share of 30% or more, and at least 2 times the usual share At least 5 unfinished, 50% or more, and at least 3 times the usual share At least 8 unfinished, 75% or more, and at least 4 times the usual share
Not enough history (fewer than 10 orders in the previous 7 days) At least 3 unfinished and a share of 50% or more At least 5 unfinished and 60% or more At least 8 unfinished and 75% or more
Silent gateway (last 24 hours, none paid or marked Failed) 3 or 4 orders started 5 to 9 orders started 10 or more orders started

The highest severity that applies wins. Examples of the tiers: 3 unfinished orders raise Medium, 5 raise High and 8 raise Critical, as long as the share and the comparison with the usual level also hold.

  • The last hour means orders created between 75 and 15 minutes ago. Orders younger than 15 minutes are not judged, because the customer may still be paying.
  • The usual share is measured over orders from 7 days ago up to 2 hours ago.
  • The silent-gateway signal uses 24 hours so that stores with few orders are covered. Three orders with none paid or failed over a whole day is unusual even for a small store.
  • The highest severity wins when both a spike and a silent gateway apply.
  • If a gateway normally loses more than about a quarter of its orders to abandonment, a spike can never reach “twice the usual share”, so only the silent-gateway signal can warn you.
  • The issue resolves by itself when the share returns to normal, or when the gateway is disabled.
  • The checks run at most every 10 minutes, and an issue is titled “[Gateway] Payments Not Finishing”.

Which gateways are checked

Every enabled gateway except offline methods, where a Pending order is normal: bank transfer (bacs), cheque and cash on delivery are skipped. A developer can skip more gateways with the kodenzo_ch_pro_stuck_payments_excluded_gateways filter.

What it does with the result

  • It appears on the Issues screen and in the weekly summary, with the counts behind it and a note that this can be normal abandonment.
  • It lowers the Checkout Health Score (Medium −10, High −25, Critical −40) and is ranked on the Recommendations screen.
  • It emails you according to your Issue Emails setting, with the severity in the subject: by default High and Critical, and Medium too if you lower the setting. Each rise in severity sends a new email.

Examples

What happens Does PRO notice?
Usually 10% of a gateway’s orders end unpaid. This hour, 5 of 10 did. Yes. A High issue: 50% against a usual 10%.
The same gateway: 8 of 10 end unpaid. Yes. A Critical issue: 80% against a usual 10%.
A small store gets 4 orders through a gateway in a day. All stay Pending. None is paid or fails. Yes. A Medium “silent gateway” issue (High at 5 orders, Critical at 10).
A store always loses about 40% of orders to abandonment. Today is 40%. No. It matches the gateway’s own usual level.
Customers pay, but the gateway’s confirmation never reaches your site, so paid orders stay Pending. Yes, as an effect: the unfinished share rises. PRO can’t tell you the cause.
The checkout fails before WooCommerce creates an order. No. There is no order to count.
A bank transfer order stays Pending for two days. No. Offline methods are excluded.

What it cannot see

  • A payment that never creates an order. Most redirect gateways create the order first, but any that don’t are invisible to this monitor.
  • The cause. It can’t tell abandonment from a gateway fault or a webhook problem. The alert text says so.
  • Whether your payment provider can reach your site. Check the provider’s dashboard and its webhook delivery log.
  • Caching and phone behaviour. Place a test order on a real phone yourself.
  • Traffic. It doesn’t know how many visitors you had, only how many orders were created.

Limits to know about

  • Cancelled orders have to be read one by one to see whether they were ever paid, so in each time window only up to 100 cancelled orders are examined. If more exist, they are ignored for that window and only Pending orders count, which keeps the result conservative.
  • With no orders for a gateway, there is nothing to evaluate. A quiet store is not an alarm.

When you see this alert

  1. Open your payment provider’s dashboard and look for payments that succeeded there but are Pending in WooCommerce.
  2. Check the provider’s webhook delivery log for failed or rejected deliveries.
  3. Check that your checkout and cart pages are not cached.
  4. Place a test order on a real phone with each payment method.
Was this article helpful?

Still need help?

Search the docs first — or open a ticket and our team will pick it up from the Support screen.