DEV Community

Amanur Rahman
Amanur Rahman

Posted on Originally published at amanurrahman.com

WooCommerce Subscription Charged Twice? How to Find the Cause

A WooCommerce subscription customer gets billed twice on renewal. Before you touch any plugin, work out which kind of double charge you have. Each points to a different cause.

First 15 minutes

  1. List every duplicate charge in your payment gateway dashboard for the last billing cycle.
  2. Refund the extra charge from the gateway. WooCommerce often cannot see it, because the duplicate was never recorded as an order.
  3. Message the affected customers quickly. A refund plus a short apology prevents most chargebacks.
  4. If renewals are due again soon, protect the next run (see the last section).

Which double charge is it?

What you see Likely cause Check first
One WooCommerce order, two gateway payments Gateway or multi-currency/multilingual plugin sent the payment twice Payment IDs in order notes vs the gateway log
Two renewal orders for the same date Renewal job ran twice WooCommerce > Status > Scheduled Actions
Extra charge seconds after a "Pay now" click or login Double-click, or renewal plus cart item processed together Timestamps of both charges
Repeat charge after a failed payment Retry logic plus a webhook that updates late Order notes: "failed" then "paid"

Narrowing it down

Update first. Many reported duplicates are bugs that were already fixed. WooCommerce's release notes for a recent Subscriptions update describe a fix where a double-click on an early renewal "Pay now" link could charge a saved payment method twice for one billing period. Back up, test on staging, then update.

Test plugin conflicts on staging. Support-forum reports tie some renewal double charges to a multi-currency or multilingual plugin update used with a third-party Stripe gateway plugin. Clone the store, deactivate the suspect plugin, trigger a test renewal with a test gateway account, and see whether you get one payment or two.

Check the scheduler. Renewals run as scheduled actions. Look for two actions for the same subscription and date, or one stuck "in-progress" and retried. WP-Cron and a real server cron both firing, or an overloaded server timing out mid-renewal, can both cause overlap.

Check webhooks. Gateways can send the same event more than once. A sound integration verifies the renewal is not already paid before charging again.

Protect live billing while you debug

  • Pause or reschedule renewals due in the next window if you safely can.
  • Switch affected subscriptions to manual renewal for one cycle.
  • Turn on gateway alerts for two payments from one customer in a short window.
  • Keep a list of refunded charges so accounting matches the gateway.

I wrote the complete guide, with fix cost ranges and a hire-or-DIY checklist, here: WooCommerce subscription charged twice: the fix

Have you tracked down a duplicate-renewal bug in your own stores? What turned out to be the cause?

Top comments (0)