Disable the payment button after the first click, show a clear message that payment is processing, make a second submission of the same order harmless, and speed up whatever makes the final step slow.

Two charges for one order

A customer types in their card details, presses Pay now, and nothing seems to happen. Five seconds pass, then ten.

So they press it again. Or they refresh the page, or go back and try once more.

A few minutes later they have two order confirmations, or one confirmation and two charges on their card. The next email the shop receives is not a thank-you.

It happens most on shops where the last step is slow, which is often a hosting problem rather than a payment one.

How the second charge happens

The second catches owners out. Browsers do warn that refreshing sends the information again, but a customer staring at a frozen page reads that warning as the way out, and presses Continue.

Why the last step is slow

When the customer presses the button, the shop's server sends the card details to the payment gateway, waits for an answer, then records the order and builds the confirmation page.

The gateway's part usually takes a few seconds at most. The delay tends to be the shop's own work around it.

That work might be sending emails through a slow mail server, generating a PDF invoice, updating stock, or asking a shipping service for a rate.

On a crowded shared hosting plan each of those steps waits its turn, and the customer watches a page that appears to have frozen.

What a double charge costs

The refund takes someone's time, and the card fees on the original charge may not come back. The customer waits days to see their money, and may call their bank before they call you.

A call to the bank can become a chargeback, a formal dispute with its own fee and paperwork, even when the refund is already on its way.

And for a shop selling pieces that exist only once, a duplicate order can mean promising the same item to two buyers.

Even a customer refunded promptly remembers the scare the next time they reach that button.

Stop the second click

The simplest fix is a few lines of script: after the first click, the button greys out and cannot be pressed again.

Change its wording at the same moment, to something like "Processing payment, please wait". A button that visibly responds tells the customer their click registered.

Many shop systems already do this. Older or heavily customised checkouts often do not, and pressing the button twice yourself, on a phone and a computer, is how to find out.

Say what is happening

Beside the button, show a short message the moment payment starts: payment is processing, it can take a little while, please do not refresh or go back.

It sounds obvious. It helps because it speaks to the one thing the customer wants to know just then. Silence is what prompts the second click.

A worked example

A neon sign maker in an industrial unit bends glass tubing into signs for bars, shops and homes. Its online shop sells ready-made open signs and a few standard designs, and takes deposits on custom pieces.

Over the past year a handful of customers were charged twice, mostly for deposits, and each needed a refund, an apology and an explanation.

Timing the checkout showed the final step taking well over ten seconds at busy times. After taking payment, the shop generated a PDF invoice and sent three emails, one to the customer and two to staff, before showing anything.

Their developer disabled the button after the first click and added a processing message, moved the invoice and emails to just after the confirmation appeared, and switched on the gateway's duplicate check.

The final step now takes a few seconds, and someone checks each morning that payments and orders match, so any duplicate is refunded before the customer notices.

Make a second submission harmless

A disabled button stops most repeats, but not a refresh or a second tab. The server should also recognise when the same order arrives twice.

The usual method is a unique reference created when the checkout page loads and sent along with the payment. If that reference has already been paid, the second request is refused rather than charged.

Some payment gateways can also reject an identical charge to the same card within a few minutes. Ask whether yours can, and whether the setting is on.

And after payment, send the customer to a separate confirmation page. Refreshing that page only reloads it; it cannot resend the card details.

Speed up the step that stalls

Time the checkout yourself, from the click to the confirmation, at a busy hour. Anything more than a few seconds is worth investigating.

Emails and invoices can usually wait until the customer has seen the confirmation. Slow mail settings, an overloaded server or an outdated plugin are the usual suspects, and whoever maintains the shop can find which one.

If the hosting itself is the bottleneck, a better plan costs less than the refunds and the customers who never come back.

The counter-case

Shops whose customers pay on a page run by the payment provider are less exposed, since that page handles the button. The return to the shop can still be slow and create duplicate orders, though rarely duplicate charges.

And a shop with a few orders a week may never see a double charge. When one happens, a prompt refund and an honest note usually settle it.

For everyone else the fixes are cheap: one click per button, a clear message, a second submission that cannot charge, and a final step that does not stall.

This week

  1. Time the checkout at a busy hour.
  2. Press the pay button twice on a test order.
  3. Disable the button after the first click.
  4. Add a processing message beside it.
  5. Move emails and invoices after the confirmation.
  6. Switch on the gateway's duplicate check.
  7. Match payments to orders every morning.

Step two is where to start, because it shows in a minute whether the problem exists. Use the gateway's test mode, or a small real order you then refund, and watch what the second press does.

Shops selling single pieces have the most to lose here, as covered in selling one-of-a-kind items online.


Frequently asked questions

Why do customers get charged twice?

The final payment step stalls, so they click again, refresh, or go back and resubmit. Each repeat can send the card details to the payment gateway a second time.

Why is the last checkout step slow?

Usually the shop's own work around the payment: emails sent through a slow mail server, invoices generated, stock updated or shipping rates fetched, all on crowded hosting.

How do I stop the second click?

Disable the button after the first click and change its wording to say payment is processing, with a short message asking customers not to refresh or go back.

Does disabling the button solve it completely?

No. A refresh or a second tab can still resubmit. The server should refuse a repeated order reference, and the gateway's duplicate check should be switched on.

What does a double charge cost the shop?

Staff time for the refund, card fees that may not come back, the customer's patience, and sometimes a chargeback with its own fee if they call their bank.

How do I catch duplicates that slip through?

Match payments in the gateway against orders in the shop every morning, refund any duplicate at once, and email the customer before they notice it.

West Coast Media Solutions Inc. provides web design, web development, hosting, digital marketing, and business consulting to organisations across Canada, drawing on more than twenty-five years in the field.

Checkout that stalls after Pay now?

Tell us your shop address. We will time the final step, test a double click and fix what we find.

Start a Conversation