Initial assessment without passwords Quote before intervention One accountable specialist from start to finish

WooCommerce Critical

WooCommerce Creating Duplicate Orders: Double Submission, Retries and Webhooks

Duplicate orders can be two checkout submissions, a gateway retry or custom code creating twice. Compare IDs, timestamps and transaction references.

What matters first: Two orders that look identical are not necessarily the same incident. One may have no payment attempt, both may share a transaction ID, or a webhook may have repeated an idempotent operation incorrectly.

Establish whether the duplicate orders share one payment

The creation interval and request logs distinguish double-clicks from server retries and integration duplication.

Evidence that separates browser and server retries

  • Export duplicate order IDs, timestamps, customer, cart hash and transaction IDs.
  • Compare browser checkout requests and gateway/webhook deliveries.
  • Inspect custom hooks attached to checkout and payment completion.
  • Check whether the client retried after a timeout or blank confirmation page.

Where duplicate order creation begins

  • Double submission: The checkout button remains active or JavaScript sends twice.
  • Network retry: A proxy, client or integration repeats a non-idempotent request.
  • Custom code duplication: A hook or API consumer creates another order.
  • Webhook misuse: A repeated event runs order-creation logic instead of updating existing state.

Make order creation idempotent

  1. Make the checkout submission idempotent and disable repeated clicks.
  2. Use unique transaction or idempotency keys in gateway integrations.
  3. Correct custom hooks to update the existing order.
  4. Reconcile historical duplicates before cancelling, refunding or restoring stock.

Double submission or network retry?

Double submission originates in the customer/browser path and usually shows two near-identical checkout requests. A network or integration retry may repeat the same non-idempotent request without a second user action. Compare request timing, transaction IDs, cart hashes and webhook deliveries before deciding which layer must own the idempotency guard.

Duplicate orders and duplicate charges are related but not the same incident. Use the duplicate-payment reconciliation flow when more than one capture exists. If the customer retried because the final page failed, inspect the order-received confirmation path as a possible trigger for the second attempt.

Do not delete the audit trail

Do not bulk-delete duplicates. They contain payment, stock, tax and audit evidence needed to decide which record is authoritative.

Verify one customer action creates one order

  • One customer action creates one order.
  • Repeated webhook delivery does not create another order or side effect.
  • Historical duplicates are reconciled with documented stock and payment decisions.

The incident is resolved when one customer submission creates one order, replayed callbacks and technical retries cannot create another order or repeat side effects, and every historical duplicate has a documented payment, stock and cancellation decision.

WP REPAIR INCIDENT STANDARD

How to narrow the fault without guessing

The creation interval and request logs distinguish double-clicks from server retries and integration duplication.

WP RepairDiagnostic model
1Browser2Session3Gateway4Order
Follow the chain until you find the first point that stops behaving as expected.
01

Export duplicate order IDs, timestamps, customer, cart hash and transaction IDs.

02

Compare browser checkout requests and gateway/webhook deliveries.

03

Inspect custom hooks attached to checkout and payment completion.

04

Check whether the client retried after a timeout or blank confirmation page.

What must be verified

  • One customer action creates one order.
  • Repeated webhook delivery does not create another order or side effect.
  • Historical duplicates are reconciled with documented stock and payment decisions.

Official technical sources

ABOUT THIS SYMPTOM

Frequently asked questions about this guide.

Are two identical-looking orders always the same underlying incident?+

No. One duplicate order may have no payment attempt at all, both may share the same transaction ID, or a webhook may have repeated an operation that should have been idempotent, so each pair needs its own evidence rather than a blanket assumption.

How do I tell a double-click duplicate from a server or webhook retry?+

The creation interval and request logs are the deciding factor: a double submission typically shows two near-simultaneous requests from the same browser session, while a network or webhook retry shows a gap tied to a timeout or a repeated delivery from the gateway or integration rather than the customer's browser.

Is it fine to bulk-delete the duplicate orders once I've spotted them?+

No, this is called out as a mistake. Duplicate orders contain payment, stock, tax and audit evidence needed to determine which record is authoritative, so they should be reconciled and resolved deliberately rather than deleted in bulk.

Can custom code or a webhook integration actually be the root cause instead of the checkout button?+

Yes. A custom hook attached to checkout or payment completion can create a second order, and webhook misuse can trigger order-creation logic on a repeated event instead of simply updating the existing order, so inspecting custom hooks and webhook handling is a required check, not just checkout UI behavior.

BEFORE YOU SEND THE REQUEST

Frequently asked questions.

Do you ask for passwords in the form?+

No. The public form never requests access. Secure credentials are requested only after the scope and quote are approved.

Who reviews the incident?+

The request goes to Jordi Ensenyat, founder of Code Barcelona and a WordPress specialist with more than 15 years of experience.

Is anything changed before the quote?+

No. Visible symptoms and scope are reviewed first. Intervention begins after approval and with a rollback path prepared.

Do you work internationally?+

Yes. WP Repair handles WordPress and WooCommerce incidents in English and Spanish through a remote service.

Assess my incident↗