Can Double-Clicking Charge a WooCommerce Customer Twice?
The Built-In WooCommerce Protections
WooCommerce's checkout script disables and visually greys out the Place Order button the instant it's clicked, blocking a second click while the first request is still processing. On top of that, most payment gateways implement their own idempotency handling — recognizing a duplicate request with the same order/transaction reference and refusing to charge it twice even if a second request somehow reaches their API. These two layers together make a genuine double-charge uncommon.
When It Can Still Happen
- A slow server response (a heavily loaded host, a slow database query during checkout) leaving a window where the button hasn't yet visually updated to disabled, occasionally allowing an impatient double-click through before the JavaScript catches up.
- A JavaScript conflict from another plugin or theme interfering with the checkout script's button-disable behavior specifically, which is a real (if uncommon) cause worth checking if this happens more than once.
- The customer using their browser's back button and resubmitting a cached checkout page, which behaves differently from a simple double-click but can produce a similar duplicate-order outcome.
- A network retry at the browser or proxy level resending the request transparently, outside of anything the checkout page's own JavaScript controls.
If a Duplicate Charge Actually Happens
- Check the gateway's transaction log first to confirm whether two separate charges genuinely occurred, versus one order simply appearing twice in WooCommerce without two actual charges.
- Refund the duplicate charge promptly once confirmed, since this is a straightforward, sympathetic case to resolve for the customer.
- Check for a JavaScript conflict if this has happened more than once, since a single incident is more likely a slow-response edge case than a genuine bug.
- Confirm checkout page load times aren't unusually slow, since a consistently slow checkout increases the odds of this edge case occurring.
Seeing this happen repeatedly? See WooCommerce fixes for a proper investigation.