Stripe is the most popular and feature-rich payment gateway for WooCommerce subscription billing. This guide walks through the complete Stripe integration with WPSubscription — from connecting API keys to configuring webhooks, enabling Smart Retries for failed payments, and setting up SCA-compliant 3D Secure authentication.
The entire integration takes 30-45 minutes for a careful setup and produces a subscription billing system that runs reliably at scale.
Why This Matters
Stripe offers the best combination of features for subscription businesses: Smart Retries (ML-optimized retry logic that recovers 10-20% more failed payments than basic retry), Card Updater (automatic refresh of expired cards without customer action), strong 3DS support for SCA compliance, and the most reliable webhook delivery in the industry. Stripe also has the best developer documentation, lowest decline rates from issuing banks, and broadest international coverage (40+ countries).
For most WooCommerce subscription stores, Stripe is the clear default choice — competitors like PayPal serve specific use cases but Stripe is the workhorse.
Before You Start
- A Stripe account (create one free at stripe.com)
- WPSubscription installed and activated
- Admin access to both WordPress and your Stripe dashboard
- Business verification completed in Stripe (required before going live)
- SSL certificate active on your WordPress site (required for live mode)
Step-by-Step Instructions
Get your Stripe API keys
Log into your Stripe dashboard at dashboard.stripe.com. Go to Developers → API keys.
You will see two sets of keys: test mode (for development) and live mode (for production). Copy your Publishable key (starts with pk_) and Secret key (starts with sk_).
During initial setup, use test-mode keys (pk_test_ / sk_test_) — you will switch to live keys after verifying the integration works end-to-end. Keep your secret key private; treat it like a password.
Enter API keys in WooCommerce
In your WordPress admin, go to WooCommerce → Settings → Payments → Stripe. If Stripe is not listed, you may need to install the WooCommerce Stripe Payment Gateway extension first.
Paste your Publishable key into the "Publishable key" field and your Secret key into the "Secret key" field. Enable "Test mode" toggle for now.
Configure additional Stripe features as desired: Stripe Link for one-click checkout, Apple Pay, Google Pay. Save changes.
Configure Stripe webhooks
In your Stripe dashboard, go to Developers → Webhooks → Add endpoint. Set the endpoint URL to: https://yoursite.com/wc-api/wc_stripe (replace yoursite.com with your actual domain — must include https).
Under "Events to listen to," select at minimum: payment_intent.succeeded, payment_intent.payment_failed, customer.subscription.created, customer.subscription.updated, customer.subscription.deleted, invoice.payment_succeeded, invoice.payment_failed. Save and copy the Signing secret that Stripe generates (starts with whsec_).
Add webhook signing secret to WooCommerce
Paste the Stripe webhook Signing secret into WooCommerce → Settings → Payments → Stripe → Webhook secret field. This step is critical — without it, WooCommerce cannot verify that incoming webhook events are genuinely from Stripe, and renewals may not fire.
The signing secret is different for test mode and live mode webhooks — you will need to update this when switching to live mode. Save changes.
Enable Smart Retries and Card Updater
In your Stripe dashboard, go to Settings → Subscriptions and billing. Enable "Smart Retries" — Stripe's ML-powered retry logic that optimizes retry timing based on the specific decline reason and bank patterns.
Also enable "Card Updater" if available — automatically refreshes expired card details from the customer's bank without requiring customer action. Both features significantly reduce involuntary churn and are essentially free improvements.
Test and switch to live mode
Complete a test subscription using Stripe's test card 4242 4242 4242 4242 with any future expiry and any 3-digit CVC. Verify it appears in WooCommerce → Subscriptions and in Stripe under Customers.
Check the Stripe webhook dashboard for successful event deliveries (200 responses). Test a renewal using Stripe Test Clocks to advance time.
When confirmed, return to WooCommerce → Settings → Payments → Stripe, disable Test mode, replace test keys with live keys, update the webhook URL to use live mode signing secret, and run one final small real-money test.
Pro Tips
- Enable Smart Retries immediately — Stripe's ML retry optimization recovers 10-20% more failed payments
- Configure Stripe Tax to automatically calculate and remit sales tax/VAT on every renewal
- Use Stripe Radar for fraud detection — ML-based risk scoring catches fraudulent subscriptions before they activate
- Set up Stripe Sigma queries for custom subscription analytics beyond what the dashboard shows
- Enable Stripe Customer Portal for self-service subscription management as a backup to WooCommerce My Account
Result
Stripe is fully integrated with WPSubscription, handling subscription creation, automatic recurring billing, payment failure detection and recovery via Smart Retries, SCA-compliant 3D Secure authentication, and seamless webhook-based event handling — all without manual intervention.
Troubleshooting
Problem:Webhook events show as "failed" in the Stripe dashboard
Solution:The most common cause is an incorrect endpoint URL or SSL certificate issue. Confirm the URL is exactly your-store.com/wc-api/wc_stripe (no trailing slash issues, must be https). Verify your site has a valid SSL certificate (not self-signed or expired). Also check that your site is not blocking webhook requests via a firewall, security plugin (Wordfence, Sucuri), or rate limiting.
Problem:Subscriptions show as active but renewal charges are not firing
Solution:Check WooCommerce → Status → Logs for Stripe-related entries. This often indicates missing or expired webhook signing secret. Re-copy the signing secret from Stripe → Developers → Webhooks → your endpoint → Signing secret and update the field in WooCommerce. Also verify that WordPress cron is functioning — go to WooCommerce → Status → Scheduled Actions.
Problem:Customers seeing 3D Secure authentication errors
Solution:This is normal for EU/UK customers due to PSD2/SCA requirements. WPSubscription with Stripe handles 3DS automatically — but the customer must complete bank-side authentication (SMS code, banking app push, biometric). If the customer cannot complete 3DS, contact their bank to verify the authentication method is set up correctly. Some banks require enrollment in 3DS before it can be used.
Problem:Stripe charging customers but no orders appearing in WooCommerce
Solution:This indicates webhook delivery failure — Stripe charged but did not notify WooCommerce. Check Stripe webhook logs for failed deliveries. Common causes: webhook endpoint URL mismatch, server downtime, security plugin blocking the request, or webhook signing secret mismatch. Replay failed webhooks from the Stripe dashboard to manually sync.
Frequently Asked Questions
Why Stripe over PayPal for WooCommerce subscriptions?
What does Stripe cost for subscriptions?
How do I handle Stripe Tax with subscriptions?
What is Stripe Radar and should I enable it?
Can I use Stripe in test mode while accepting real payments through PayPal?
Related Glossary Terms
More Guides
How to Set Up Recurring Payments in WooCommerce
6 steps · Connect your payment gateway and configure automatic billing schedules for subscription products.
How to Handle Failed Payments in WooCommerce
6 steps · Configure automatic retry logic and customer notifications to recover failed subscription payments.
How to Automate Subscription Renewals in WooCommerce
6 steps · Set up fully automated subscription renewal billing with WPSubscription so revenue runs on autopilot.