LifterLMS With WooCommerce: When to Use It and How It Changes Checkout
The LifterLMS WooCommerce add-on replaces the native checkout with the WooCommerce cart. See when that trade is worth making, what changes for…
Read articleStripe is the payment gateway most LifterLMS sites end up on, and for good reason: it handles one-time payments and subscriptions, keeps card details off your server, and supports the authentication rules banks now require in many countries.
This guide explains how to set up LifterLMS Stripe properly: connecting your account, testing with test mode, confirming webhooks, choosing a payment flow, and dealing with 3D Secure and Strong Customer Authentication (SCA). It also covers how recurring payments actually run, because that is where most Stripe problems on LifterLMS sites come from.
It is written for site owners and developers who already have courses and access plans. If you are still deciding how to price, read about payment plans and free trials first.
Stripe support is not part of the free LifterLMS plugin. It comes from LifterLMS Stripe, a paid add-on from the LifterLMS team. Once installed and connected, it adds Stripe as a payment method on your checkout and lets you:
Card numbers never touch your server. They go straight to Stripe, which keeps your PCI compliance burden low. You still need https across the site.
This is worth understanding before you set anything up. In LifterLMS, each subscription is a LifterLMS order with a billing schedule. When a payment is due, LifterLMS core triggers the charge from your WordPress site using its scheduled actions, and the Stripe add-on charges the card saved for that order.
That has three practical consequences:
Failed renewals are retried automatically when Retry Failed Payments is enabled on the Checkout tab, which it is by default. Stripe is one of the gateways LifterLMS lists as supporting retries.
Refund from WordPress, not only from Stripe. Open the order from the Orders menu, find the transaction in the Transactions box and refund through the gateway. LifterLMS records the refund on the order and, by default, a refunded order removes the student's enrollment. If you refund from the Stripe dashboard instead, the charge.refunded webhook is how LifterLMS finds out, so working webhooks matter.
Students can cancel a subscription from their dashboard. The order moves to Pending Cancellation, they keep access until the end of the period they paid for, and no further charges are taken.
Connect is the current method. Sites set up before September 2024 may still use manually entered secret and publishable keys; the LifterLMS documentation notes that keys can also be defined in wp-config.php instead of the database. Whichever you use, the LifterLMS Stripe getting started guide has the current screens.
Before going further, set your store Currency on the Checkout tab to the currency your Stripe account will charge in.
Tick Enable Stripe Test Mode in the Stripe section and save. Checkout now talks to Stripe's test environment and no real money moves. Switch your Stripe dashboard to test mode to see the payments arrive.
Stripe publishes test card numbers for every scenario. The three you need most:
| Card number | Result | What to check in LifterLMS |
|---|---|---|
| 4242 4242 4242 4242 | Succeeds | Order Completed or Active, student enrolled, receipt sent |
| 4000 0000 0000 3220 | Requires 3D Secure authentication | The authentication window appears and the order completes after you approve it |
| 4000 0000 0000 0002 | Declined | A clear error at checkout and no enrollment |
Use any future expiry date and any three-digit CVC. Test a one-time plan, a recurring plan, a plan with a trial and a plan with a coupon. Then turn test mode off. A launch with test mode still on looks fine until you notice no money has arrived.
Webhooks are how Stripe tells your site about events that happen after the buyer leaves checkout: a refund issued in the Stripe dashboard, a charge that fails later, or a hosted checkout session completing. LifterLMS Stripe creates its webhook automatically when you connect.
According to the LifterLMS documentation, the webhook should listen for six events: charge.failed, charge.refunded, checkout.session.async_payment_failed, checkout.session.async_payment_succeeded, checkout.session.completed and checkout.session.expired.
If Webhook Status does not show as installed:
Each environment needs its own webhook. Staging and live sites should never share one.
LifterLMS Stripe offers two ways to take the card:
define( 'LLMS_STRIPE_ENABLE_STRIPE_CHECKOUT', true ); to wp-config.php and then setting Payment Flow to Stripe Checkout in the Stripe settings.Additional payment methods are switched on in your Stripe dashboard, not in LifterLMS. Be careful with recurring plans: some payment methods only support one-time payments, and offering one on a subscription leads to failed renewals. Test the hosted flow on a staging site before switching a live store.
Strong Customer Authentication is a European rule that requires many card payments to be confirmed by the cardholder, usually through a banking app or a one-time code. Card networks implement it as 3D Secure. LifterLMS Stripe supports it; there is no LifterLMS setting to switch on.
What you control is in Stripe. The LifterLMS article on Stripe and SCA explains that 3D Secure is driven by Radar rules in your Stripe dashboard, that the default rule requesting 3D Secure when the card requires it should stay on, and that Stripe's Billing settings include an option to request 3D Secure for recurring payments that match Radar rules.
The part that affects your students is renewals. A recurring charge happens when the student is not at their computer. If their bank insists on authentication for that charge, it fails. LifterLMS then puts the order on hold and the retry rules kick in. The fix is for the student to log in, open the order on their dashboard and update the payment method, which re-authorises the card. Once a payment succeeds, the order returns to Active and access is restored.
Make that easy: mention in your renewal and failed-payment emails exactly where to update a card, and keep the Student Dashboard link visible in your site menu.
No. Core includes only the manual gateway. Stripe needs the LifterLMS Stripe add-on.
Yes. Recurring access plans, payment plans with a fixed number of payments, and trials all work with Stripe. LifterLMS schedules each renewal and Stripe charges the saved card.
The LifterLMS documentation describes wallets on the Stripe Checkout payment flow, which is in beta at the time of writing, with the payment methods enabled in your Stripe dashboard.
The most common reason in Europe is that the bank required authentication. The student needs to update or re-confirm their payment method from the dashboard.
Install the add-on, connect in test mode, run the three test cards against each type of plan you sell, confirm the webhook, then switch to live and make one small real purchase. Keep an eye on the first round of renewals.
If renewals are failing, payments are arriving in Stripe but not in LifterLMS, or you need Stripe connected to invoicing or tax tools, our LifterLMS integrations team can trace and fix it. Get in touch with what you are seeing.
The LifterLMS WooCommerce add-on replaces the native checkout with the WooCommerce cart. See when that trade is worth making, what changes for…
Read article
Start with payments and email, then add tools as real needs appear. See which LifterLMS integrations are official add-ons, which are third-party…
Read article
A practical tour of every LifterLMS settings tab, from General to Integrations, with the default values that ship with the plugin and the ones most…
Read articleSkip the trial and error. Get specialist LifterLMS help and ship faster.