Migration and Payment Gateways

When you import subscriptions from WooCommerce Subscriptions, WP Swings, YITH, Flexible, or Sublium, Milo Subscriptions decides which payment gateway each migrated subscription will renew through. This page explains the default behavior, how to tell whether your migrated subscriptions will actually auto-renew, and how to keep your existing gateway.

How gateways are mapped by default

By default, each source gateway is remapped to its Milo Payments equivalent so that renewals route through Milo Payments:

Source gatewayMigrated to
stripe, stripe_cc, stripe_sepamilo_stripe
paypal, ppcp-gatewaymilo_paypal
mollie_*milo_mollie
square, square_credit_cardmilo_square
no equivalent (e.g. Authorize.net)manual renewal

Milo Payments handles the off-session mandate and SCA requirements that recurring card payments need, which is why it is the default target. On the free plan, subscription renewals go through Milo Payments.

Check that migrated subscriptions can renew

A migration can report success while subscriptions silently fall to manual renewal, for example if subscriptions are mapped to milo_stripe but Milo Payments is not installed or its gateway is not connected. Milo Subscriptions surfaces this so you are never caught out:

  • Dry run (before importing) warns when subscriptions map to a Milo Payments gateway that is not installed or connected.
  • Verification report (after importing) counts each still-billing subscription as renewable, manual, or not_renewable, and lists the gateways that cannot charge.
  • WP-CLI: wp milo migrate run <source> --dry-run prints the same warnings.

If you see not_renewable subscriptions, install and connect Milo Payments for the relevant gateway, or keep your existing gateway with the Any Gateway add-on (below).

Keep your existing gateway (Any Gateway add-on)

If you already run a working gateway (for example the official WooCommerce Stripe plugin) and would rather keep it than adopt Milo Payments, install the Any Gateway add-on.

With Any Gateway active, migrated subscriptions keep their existing gateway by default, with no configuration. A subscription’s stored token and customer id belong to the source gateway’s account, so renewing through that same gateway is the most reliable path: it avoids account mismatches and keeps your current integration in charge of renewals and card changes.

Any Gateway only keeps a source gateway when that gateway is still installed and able to take recurring payments. If it is not, the subscription falls back to the default Milo Payments mapping so it is never pinned to a gateway that cannot charge it.

Consolidate onto Milo Payments instead

If you have Any Gateway but want migrated subscriptions to move onto Milo Payments anyway, opt out of keeping the source gateway:

// Option (set to 'no' to consolidate onto Milo Payments).
update_option( 'milo_any_gateway_keep_source_on_migration', 'no' );

// Or per-migration, via a filter.
add_filter( 'milo_any_gateway_keep_source_gateway', '__return_false' );

Developer reference: the migration mapping filter

Advanced integrations can control the mapping directly with the milo_subscriptions_migrate_payment_method filter. It is only consulted when the Any Gateway capability is enabled (milo_subscriptions_allows_any_gateway), so it has no effect on the free plan, where subscriptions are always routed through Milo Payments.

add_filter(
    'milo_subscriptions_migrate_payment_method',
    function ( $mapped, $source_method, $subscription ) {
        // Return the source method to keep the existing gateway,
        // $mapped (a milo_* id) to remap to Milo Payments,
        // or '' to force manual renewal.
        return $source_method;
    },
    10,
    3
);

Did this page miss something?

Tell us and we rewrite it, usually the same day.

Send a note