Milo Failed Payment Retry
Automatic dunning: when a renewal payment fails, the charge is retried on a schedule you control, with customer emails at each step, before the subscription is cancelled.
Installation
- Install and activate the free Milo Subscriptions plugin.
- Upload and activate Milo Failed Payment Retry (Plugins → Add New → Upload).
- Enter your license key under Subscriptions → Licenses to enable updates.
WooCommerce is required; the add-on hooks into WooCommerce renewal orders and gateways.
Configuration
Under Subscriptions → Settings → Checkout & Payments → Failed Payment Retry:
| Setting | Description |
|---|---|
| Enable automatic payment retries | On/off switch for the whole retry engine. |
| Retry schedule | Repeater of up to 5 retry attempts. Each attempt has a delay (number + minutes/hours/days) and an email choice (Retry notice, Final notice, or None). |
| After all retries fail | What happens once every attempt is exhausted: Cancel subscription (default) or Expire subscription. |
The default schedule retries after 12 hours, then 3 days, then 5 days, then 7 days, each delay counted from the previous failure.
How the retry schedule works
- A renewal payment fails. Instead of the subscription simply going on hold, the add-on picks the next rule in your schedule, puts the subscription on hold, and schedules a retry via Action Scheduler.
- When the retry time arrives, the renewal order is reset to pending and the stored payment method is charged again through the subscription’s gateway.
- If the charge succeeds, the subscription resumes normally and all retry state is cleared.
- If it fails again, the next rule in the schedule takes over. After the last rule fails, the final action runs (cancel or expire) and the final email is sent.
Every step is logged as a note on both the subscription and the renewal order, so you can follow the whole sequence from the admin.
If the customer manually pays the failed renewal order in the meantime, pending retries are cancelled and the retry state is cleared. A retry is also skipped automatically if the order is no longer failed or pending.
Customer emails
Two WooCommerce emails ship with the add-on. Enable, disable, and customize them under WooCommerce → Settings → Emails, like any other store email:
| When it is sent | |
|---|---|
| Payment Retry Scheduled | A renewal payment failed and a retry is scheduled (for schedule rules set to “Retry notice”). Includes the attempt number out of the total. |
| All Payment Retries Failed | Every retry attempt has failed and the subscription was cancelled or expired. Invites the customer to resubscribe with a valid payment method. |
Both use standard WooCommerce email templates (HTML and plain text) and can be overridden in your theme.
FAQ
Does this work with every gateway? Retries reuse the same mechanism as regular automatic renewals, so any gateway that supports Milo Subscriptions automatic payments (a stored payment token) can be retried. Manual-payment subscriptions are not retried automatically.
What if I disable the add-on mid-sequence? Scheduled retries check the enable toggle before running; with retries disabled, nothing is charged.
Developer reference
milo_retry_payment_retry_notification– Action fired when a retry is scheduled; triggers the retry notice email.milo_retry_all_retries_failed– Action fired after the final action (cancel or expire) is applied; triggers the final email.- Retry jobs run through Action Scheduler on the
milo_retry_payment_attempthook, groupmilo-failed-payment-retry.
Billing modes
Works in WooCommerce mode only. Standalone (Stripe-driven) subscriptions handle failed payments through Stripe’s own retry logic.
Did this page miss something?
Tell us and we rewrite it, usually the same day.