Plugin screenshot thumbnail 1/4
Plugin screenshot thumbnail 2/4
Plugin screenshot thumbnail 3/4
Plugin screenshot thumbnail 4/4

Stripe Reconciler

"I paid, so where's my order?"

A customer pays by card, the money leaves their account, and then they close the tab before the browser makes it back to your site. Stripe has the payment. Craft Commerce knows nothing about it. The order sits there unpaid, or it never became an order at all and is still sitting in the carts table where nobody will ever look at it. The first you hear of it is the customer asking where their stuff is.

Commerce hands the customer off to Stripe for 3D Secure, iDEAL, Bancontact and the like, and waits for the browser to come back and finish the job. If it never comes back, Commerce has no way of knowing the payment went through.

Stripe Reconciler finds those payments, asks Stripe what really happened to each one, and completes the ones that genuinely succeeded. It does what Commerce would have done if the customer's browser had come back, and no more.

Payments that never finished

Check first, then decide

Go to Utilities and you'll see every payment that never finished, with a count in the sidebar so you know when something's waiting. Nothing is sent to Stripe when the page loads. Press Check Stripe and it tells you what happened to that payment without changing anything. Only if the money is there and the amount lines up do you get a button to complete the order.

If you'd rather not be pressing buttons, the same checks run from the command line on a cron. It exits with an error code when something needs a person to look at it, and it can send one email per run listing the payments where money was taken but the order was never finished.

I already have the Stripe webhook set up

Keep it. The webhook finishes an order within seconds, and when it works this plugin has nothing to do. But webhooks go missing: an endpoint moved during a redesign, a signing secret rotated and never updated, the site down while Stripe was retrying, a staging site Stripe can't reach at all. This is what notices afterwards. The two don't get in each other's way, and neither can complete the same payment twice.

Careful with your money

  • An order is never marked paid unless Stripe confirms, at that moment, that the money arrived
  • Every call to Stripe is a read; it never creates, captures, refunds or cancels anything
  • A dry run shows what a real run would do, and changes nothing
  • Refunded and disputed payments are left alone and flagged for you
  • A second successful payment on an order that's already paid is flagged as a possible double charge, never completed
  • A payment is held for review if the amount doesn't match, or the order total changed after the customer started paying
  • Carts are only completed by a scheduled run if you turn that on
  • Checking and reconciling are separate permissions, so support staff can look without being able to complete orders

What's in it

FeatureWhat it does
Utility pageLists unfinished Stripe payments on orders and carts
Stripe checkFor one payment, or a whole backlog through the queue
Console commandsReport, dry run and reconcile, for a cron
Slow payment methodsHandles SEPA Direct Debit and Bacs, which can take days to settle
NotificationsAn optional email when money is waiting on an unfinished order
Audit recordEvery check and every reconciliation, kept for good where money was taken

You can try it free on any dev domain before you buy. It needs Craft CMS 5, Craft Commerce 5, the Stripe for Craft Commerce plugin 5 and PHP 8.2 or later.

Accessibility

What's been checked, and anything that still needs work, is in the accessibility statement.

Standard

Plus $19/year after one year.

Installation Instructions

To install this plugin, copy the command above to your terminal.

Reviews

This plugin doesn't have any reviews.

Active Installs
3
Version
1.1.0
License
Craft
Compatibility
Craft 5
Last release
September 28, 2026
Activity (30 days)
0
Closed Issues
0
Open Issues
0
Merged PRs
0
Open PRs