Checkout Bouncer

Notes

What your gateway tells you in the order notes panel

The decline reason your gateway gave is rarely on the order screen. It is in the notes panel beside it, written by machinery rather than by a person.

5 min read

When an order goes wrong, the first thing worth opening is not the order itself. It is the panel beside it. Because WooCommerce order notes record what happened to that order and in what sequence, the entries nobody typed are usually the useful ones. So before you guess at a cause, read the trail.

The panel sits on the right of the edit screen, under the heading Order notes. Although it looks like a comment box, it is the closest thing a WooCommerce store keeps to an audit log for a single order.

Three kinds of note, and only one you wrote

WooCommerce splits the panel into three categories, and the documentation is precise about them.

  • System notes. "WooCommerce or extensions add these automatically for events such as status changes, payment results, and webhook callbacks." Nobody types these.
  • Private notes. "Store administrators add these for internal reference. They appear on a white background and are not visible to the customer."
  • Customer notes. "Store administrators add these for customers, and WooCommerce sends them by email."

That third one deserves care, because it leaves the building. And the documentation is equally direct about the consequence: "Deleting a customer note does not recall the email." So a note written in the wrong box is already in somebody's inbox.

What WooCommerce order notes record on their own

The panel "stores details about events such as payment results and stock changes", and, as the docs put it, "Some payment gateways also add notes for debugging." Although that reads like a footnote, it is the reason this panel earns your time.

A gateway that declines a card usually says why, in its own words, in a system note. Not in the order status, which only records failed. Nor in the customer's email, which says something gentler. In the note. So the raw decline reason, the gateway's own reference, and sometimes an issuer response code all land in WooCommerce order notes and nowhere else in the admin.

Stock movements land there too. If an order reduced stock and a later status change put it back, both events leave a line, in order, with a timestamp.

Reading a run of orders instead of one

One order's notes tell you about one order. But a run of them tells you about a pattern, which is a different and far more useful thing.

So open five or six consecutive failures and read only the system notes. Then ask three questions of what you find.

  1. Is the decline reason the same on all of them, or does it vary? A single repeated reason points at configuration. Meanwhile, varying reasons point at varying cards.
  2. Do the timestamps cluster inside a few seconds of each other, or spread across the day?
  3. Does the gateway reference change every time, or does one reference turn up on several orders?

Because these lines come from the gateway rather than from your store, they are harder to fake than anything the shopper typed. Consequently they make the better evidence when you are working out what a wall of failed orders actually means.

Where WooCommerce order notes stop being enough

Notes have real limits, and it pays to know them before you lean on them.

First, they only exist once an order exists. So a request rejected before order creation leaves nothing here at all, which is exactly the case with most blocked bot traffic. An empty panel is therefore not evidence that nothing happened.

Second, they record what a gateway chose to send. Because detail varies from gateway to gateway, a quiet integration can leave you with a status change and little else. And since notes hang off orders, anything that never became an order stays invisible to them. For that traffic you want your server access log, or your plugin's own log, instead.

Getting them out of the admin

Reading notes one order at a time gets old quickly. So pull them instead. The WooCommerce REST API exposes them per order at GET /wp-json/wc/v3/orders/<id>/notes, and the order notes reference lists what comes back: author, date_created, the note text, and a customer_note boolean separating the ones a shopper received from the ones only you can see. That is enough to pull a week of failures into a spreadsheet and sort by reason.

If you would rather not write code, the admin still helps. Filter the orders list to failed, open each in a new tab, and read only the grey lines. Twenty orders takes about ten minutes and usually settles the question.

Where Checkout Bouncer fits

Checkout Bouncer works one step earlier than any of this. Because it scores the checkout request with Google reCAPTCHA v3 before an order exists, the traffic it turns away never reaches WooCommerce order notes, or your gateway, or your decline ratio. The plugin is free, GPL and listed on WordPress.org.

Its limits are worth stating plainly. It guards the WooCommerce checkout only, so login, registration, comments and contact forms fall outside its remit. Nor is it a firewall or a malware scanner. And it uses reCAPTCHA v3 only, never v2 or another provider.

Notes and a checkout guard answer different questions. One tells you what already happened to an order. Meanwhile the other decides whether the order should exist at all. If you want to know which routes into your checkout currently answer, the free scanner will tell you in about two minutes.

See which doors into your checkout are standing open