If you want to sell recurring payments, do the whole setup on a staging copy first: install the Subscriptions extension, enable a gateway that explicitly supports automatic recurring charges, confirm webhooks and scheduled actions are working, then run full lifecycle tests (purchase, renewal, failed payment, cancellation, refund). The rest of this guide gives a short, sourced checklist and concrete verification steps you can run yourself.
Quick checklist — run these sections first
- Install and configure on staging
- Choose and enable a supported payment gateway
- Configure gateway webhooks (test & live)
- Create WooCommerce webhooks for external systems
- Ensure reliable background processing (Action Scheduler & cron)
- Configure subscription emails and templates
- Run full lifecycle tests in sandbox
- Monitoring and go-live checklist
- Fictional example — TeaClub
Install Subscriptions on staging and configure subscription products
Work on a non-production copy. Install WooCommerce and the official Subscriptions extension, then create one or two subscription products with the billing interval, optional trial and any sign-up fee you plan to offer. The official Subscriptions documentation shows the product and store-manager settings to check, including how customers see and manage subscriptions in My Account: Subscriptions (docs).
Choose and enable a subscriptions-capable payment gateway
Only enable gateways that explicitly support automatic recurring payments. WooCommerce documents which gateways are compatible and how to enable a gateway for subscriptions: Enabling gateways for Subscriptions and the gateway compatibility list: Subscriptions payment gateways.
Install the official extension for your chosen gateway when available, then switch that extension to its test/sandbox mode before creating test charges.
Register and verify gateway webhooks (test & live)
Gateways commonly deliver events (renewal success, failed payment, card expiry) to a webhook endpoint. Follow the gateway extension’s or provider’s webhook instructions to register both test and live endpoints and confirm the endpoint status. As an example of an extension-specific guide, see Stripe webhooks setup for the Stripe extension: Stripe webhooks. For gateway-specific event names, signing headers and verification, consult the payment provider’s developer docs (those details are provider-specific).
Create WooCommerce webhooks for CRM, fulfilment and accounting endpoints
If other systems (CRM, fulfilment, accounting) must react to subscription events, create WooCommerce webhooks for the relevant topics (orders, subscriptions). WooCommerce documents webhook topics, delivery logs and retries here: WooCommerce webhooks. When you register endpoints, prefer signed/HMAC verification if the receiver supports it and keep a copy of webhook delivery logs while you test.
Ensure reliable scheduled processing: Action Scheduler and cron
Subscriptions uses scheduled actions for renewals. WooCommerce explains how Action Scheduler processes scheduled events and the difference versus WP-Cron; rely on a real cron or a hosting-managed scheduled task on low-traffic sites rather than only on WP-Cron: Scheduled events with Subscriptions and WordPress’s documentation on wp-cron: WP-Cron. While testing, monitor the Action Scheduler queue for stuck or failed actions and consult the Subscriptions scheduled-action errors guide if a renewal fails: Scheduled action errors.
Configure subscription emails and templates
Enable and customise the subscription-related emails (new subscription, upcoming renewal, renewal success, failed payment, cancelled). Send test emails to confirm dynamic subscription data (amount, next payment date, subscription ID) renders clearly. The Subscriptions docs list the built-in email types and where to configure them: Subscriptions (docs).
Run full lifecycle subscription tests on staging (sandbox)
On staging with the gateway in test mode, run these checks and record the results. Do not use real customer cards in test mode.
Staging test cases you must run
Initial purchase
Subscription created in WooCommerce, customer sees the subscription in My Account, the payment method is tokenised (if applicable), and the initial invoice/email is sent.
Scheduled renewal
Action Scheduler runs the renewal, a renewal order is created and the gateway charges the stored payment method; renewal email sent and the gateway delivers the renewal webhook event.
Failed renewal & retry
Use gateway test tools to simulate a failed renewal, observe WooCommerce’s retry sequence and failed-payment emails, and confirm failed-renewal webhook events are sent or logged.
Customer cancellation
Customer-initiated cancellation in My Account cancels future renewals; confirm cancellation email and cancellation webhook are delivered.
Admin cancellation & refund
Admin cancels and issues a refund; the refund appears on the order, the gateway logs the refund event, and any refund webhook is delivered.
When testing webhooks, capture the requests at a secure test endpoint (or use the gateway’s webhook testing/debug tools) and confirm delivery, timestamps and attempt/retry behaviour. Verify that any signature or HMAC header is present and follows the provider’s verification steps (see your gateway developer docs for exact header names and verification code).
How to check results yourself (observable checks)
- Confirm subscription and renewal orders in WooCommerce admin.
- Check scheduled actions for pending/failed renewals in Action Scheduler (Tools > Scheduled Actions if available) and note any error messages.
- Inspect WooCommerce logs (WooCommerce > Status > Logs) and your gateway extension logs for webhook deliveries and responses.
- Record the webhook deliveries at your receiver (or use gateway test delivery reports) and compare event types and timestamps to renewal times.
- Check email reception and the presence of relevant dynamic fields (amount, next payment date, subscription ID).
Monitoring and go-live checklist
- Confirm webhooks are registered in the live gateway dashboard and switch the extension to live mode (re-register live endpoints if required).
- Ensure reliable cron/Action Scheduler on production per your host’s guidance (do not rely only on low-traffic WP-Cron).
- Run a short live-mode end-to-end test (minimal charge) where feasible, then refund it if allowed by your payment provider and policy.
- Keep operational logging enabled for an initial period and monitor scheduled actions, webhook failures and payment decline patterns.
- Document the owner-facing billing language (when billing occurs, how to cancel, refund policy) and display it clearly at signup.
Example: TeaClub test run (fictional)
Imagine TeaClub creates a monthly subscription product on a staging copy, installs the Stripe extension in test mode, and registers a test webhook endpoint. They purchase the subscription with a test card, confirm the subscription appears in My Account, then use Stripe’s test tools to simulate a failed renewal. TeaClub observes the scheduled renewal attempt in Action Scheduler, receives a failed-payment email, and captures the gateway webhook showing the failed payment event. They then cancel the subscription from the customer account and confirm the cancellation email and a cancellation webhook were delivered. This is a hypothetical example intended to show the checks you should perform; follow your gateway docs for exact test controls.
What to record during tests (test record checklist)
Product: name — Gateway: name — Environment: staging/test
Initial purchase: date/time — subscription ID — renewal schedule shown in My Account
Renewal attempt: date/time — Action Scheduler entry status — gateway webhook(s) received (yes/no)
Failed renewal: date/time — email sent (yes/no) — retry behaviour observed
Cancellation: date/time — customer/admin — webhook delivered (yes/no)
Refund: date/time — order updated — gateway refund event logged
Keep these records while testing. They make support conversations and a later live switch far less stressful.
Related practical guides: Configure and test WooCommerce order and low‑stock emails (useful for email checks) and Use WooCommerce webhooks to keep inventory synchronized with marketplaces (webhook examples and monitoring ideas).
Done: pick a staging copy now and run the initial purchase and renewal test. Record the results with the template above and fix any Action Scheduler or webhook failures before switching to live mode.

