How to Connect WooCommerce and Stripe — A Working Guide
Setup guide · Payments & Fintech
How to connect WooCommerce and Stripe properly — and the cases where you shouldn’t.
A working guide to setting up Stripe on a WooCommerce store, written by someone who has spent eight years inside payment systems and seen most of the ways this integration breaks in production. Forty minutes to set up well. A weekend of unwinding if you set it up badly.
By Henrik Vance · Editor, Spent
Most of the WooCommerce + Stripe setup guides on the internet are wrong in the same way. They show you the happy path — install the plugin, click connect, paste your API keys, run a test transaction, done — without ever telling you what happens when something goes sideways at month two, or month six, or the morning of your biggest sale day. The setup is genuinely easy. Setting it up well requires twenty more minutes and a handful of decisions that nobody else seems to write down.
I spent eight years working on payments infrastructure at Stripe and Klarna, and a meaningful share of that time was spent inside the support tickets that came from WooCommerce stores in trouble. The patterns repeat. The same three or four things break, in the same order, for the same reasons. The good news is that almost all of it is preventable if you handle the setup correctly the first time. This guide walks through the setup as I would actually do it for a working store — not as the vendor documentation describes it.
A note before we start. The integration has changed meaningfully over the last two years. WooCommerce’s native Stripe extension has matured to the point where the third-party plugins that used to be necessary are now mostly redundant. If you’re reading older guides that recommend the WooCommerce Stripe Payment Gateway plugin as a separate install, those guides are outdated. The integration is now built into WooCommerce’s core extensions. Use the official Stripe extension, not the third-party alternatives.
§ 01 · Before you start
The three decisions to make before you install anything.
Most stores skip this step entirely and end up redoing their setup three months later. Take ten minutes now.
Decision 1: Are you actually a WooCommerce business?
For stores selling fewer than 30 products, with simple inventory, no complex variations, and standard payment workflows — WooCommerce is great. For stores selling primarily digital products, simple subscriptions, or running heavy variant logic, Shopify is genuinely a better fit and the payments integration is simpler. WooCommerce shines when you need control: custom checkout flows, deep theme customisation, specific tax handling, or integration with non-standard ERP or CRM systems. If you don’t need any of that, ask yourself honestly whether you’re on WooCommerce for the right reasons before investing in a Stripe integration that will outlast the question.
Decision 2: Which Stripe products do you actually need?
The basic Stripe extension handles card payments out of the box. Beyond that, you have to decide which Stripe products you’ll enable: Stripe Billing for subscriptions (adds 0.5% on top of standard rates), Stripe Tax for automated tax calculation (free up to a threshold, then per-transaction), Stripe Radar for fraud detection (typically already included), and various local payment methods. Every additional Stripe product adds an integration touchpoint that needs to be maintained. Enable what you genuinely need; resist the temptation to switch on everything.
Decision 3: Are you ready for the SSL and webhook requirements?
Stripe requires HTTPS on your store. That’s non-negotiable, and if you’re running on an older host without a valid SSL certificate, you need to fix that first. Stripe also requires webhooks to communicate transaction events back to your store — webhook misconfiguration is the single most common cause of payments-not-syncing problems I’ve seen. We’ll set this up properly below, but if your host blocks incoming webhook traffic or has unusual network configuration, identify that now.
Before you start
Don’t connect Stripe to a live WooCommerce store as your first action. Always run the connection on a staging environment first if you have one, or use Stripe’s test mode for at least one full day before going live. The integration is reliable, but the consequences of a misconfigured production setup — failed transactions, mis-routed payouts, missing webhook events — are worse than the time cost of a proper test run.
Figure 1 · Which integration approach to use
Three paths. Pick one based on the store you’re running.
§ 02 · The setup, properly
Six steps. Forty minutes for a standard store.
Assuming you’ve made the decisions above and you have an SSL certificate active on your domain, here’s the sequence I’d follow. The official documentation goes through similar steps; the value here is in the specific things I’d do differently and the configurations I’d apply that aren’t in the standard guide.
Step 1. Create your Stripe account before you touch WooCommerce.
Sign up at stripe.com first, complete the business verification, and add your bank account for payouts. Doing this before you touch the WordPress side means the WooCommerce connection process is a single click rather than a fifteen-minute interruption. Stripe will ask for your tax ID (EIN in the US, organisationsnummer in Sweden, equivalent elsewhere), business address, principal owners’ details, and a bank account. Have all of this ready in a tab.
If you’re in a country where Stripe requires additional documentation — certain jurisdictions in the EU, the UK post-Brexit, parts of Asia — expect the verification to take 24 to 72 hours rather than being instant. Plan accordingly.
Step 2. Install WooCommerce’s native Stripe extension, not a third-party plugin.
In your WordPress dashboard, navigate to Plugins → Add New, search for “Stripe”, and install the official one published by Stripe. This is the integration that’s built into WooCommerce’s core ecosystem and gets first-party support from both Stripe and WooCommerce. Older guides recommend “WooCommerce Stripe Payment Gateway” by various third parties; these are now redundant, and some of them are no longer maintained. Skip them.
After installing, activate the plugin and you’ll see Stripe appear under WooCommerce → Settings → Payments.
Step 3. Connect your Stripe account through OAuth, not by pasting API keys.
The current integration uses OAuth: click “Connect with Stripe” from the WooCommerce settings page, log into your Stripe account, and authorise the connection. This is the right way. Older guides instruct you to copy and paste API keys from your Stripe dashboard into WooCommerce; that workflow still works but it’s legacy and creates more surface area for mistakes. Use the OAuth flow. It also handles webhook setup automatically, which we’ll cover in step 5.
Step 4. Configure your payment methods explicitly.
Once connected, go to Settings → Payments → Stripe → Manage. Enable only the payment methods you’ll actually use. The default includes card payments; you can add Apple Pay, Google Pay, Klarna, Affirm, SEPA Direct Debit, iDEAL, and more depending on your region. My general rule: enable everything your typical customers will use, but don’t enable obscure methods you don’t understand — each enabled method adds a checkout option and a settlement currency that you’ll need to reconcile later.
For most stores serving US/UK/EU customers, enabling cards, Apple Pay, Google Pay, and Klarna gets you 98 percent of conversions. Don’t enable Alipay unless you have meaningful Chinese customer volume. Don’t enable Boleto unless you sell in Brazil.
Step 5. Verify your webhooks are actually working.
This is the step everyone skips and where most production problems originate. The OAuth flow should have created webhooks automatically, but verify it manually. Go to your Stripe dashboard → Developers → Webhooks. You should see at least one webhook endpoint pointing to your WooCommerce site, with events like payment_intent.succeeded, charge.refunded, and checkout.session.completed enabled.
If the webhook endpoint shows recent failed deliveries, that’s a sign your host is blocking incoming traffic from Stripe’s IPs or your firewall is too aggressive. Test by clicking “Send test webhook” from the Stripe dashboard — you should see a 200 OK response. If you see anything else, fix it before going live. A webhook that doesn’t fire reliably will mean orders don’t update, subscriptions don’t renew correctly, and refunds don’t reflect in your store.
Step 6. Test thoroughly before going live.
Enable test mode in the WooCommerce Stripe settings. Use Stripe’s test card numbers (4242 4242 4242 4242 for a successful Visa, 4000 0000 0000 0002 for a declined card, 4000 0000 0000 9995 for an insufficient funds decline, and a few others for international and dispute scenarios). Run a complete purchase flow including checkout, order confirmation email, refund processing, and customer self-service. Verify each step works.
Once you’ve done a clean test run, switch off test mode, complete the same flow with a real card for a small amount (you can refund it afterwards), and verify the funds appear in your Stripe balance and the order appears correctly in WooCommerce. Now you’re live.
§ 03 · The problems standard guides skip over
Five issues that bite you at month two, not month zero.
The setup works on day one. The problems show up later, often after a few weeks of normal operation, when an edge case finally surfaces. Here are the ones I’d watch for.
Currency mismatches and double conversion.
If your WooCommerce store sells in one currency but your Stripe account settles in another, every transaction goes through a currency conversion that costs you 1 percent. Worse, if you’ve set up a multi-currency plugin on WooCommerce that converts prices at the customer level but your Stripe account is in your home currency, you can end up double-converting — once at the store level and once at the Stripe level. The fix: configure Stripe to settle in the same currency you’re selling in, or enable Stripe Adaptive Pricing to handle conversion natively. Don’t use a separate WooCommerce currency-switcher plugin alongside a non-matching Stripe currency unless you understand exactly what you’re doing.
Subscription renewal failures.
If you’re using WooCommerce Subscriptions with Stripe, renewal failures will happen. Cards expire, banks decline charges, customers cancel cards. The default Subscriptions plugin handles retries reasonably, but the integration with Stripe’s Smart Retries (which uses ML to pick optimal retry times) requires explicit enabling. Go to Stripe → Settings → Subscriptions → Retries, and confirm Smart Retries is on. Without it, you’ll lose 30 to 40 percent of recoverable renewals to involuntary churn that better dunning would have saved.
Refunds that don’t propagate.
If you process a refund from inside Stripe’s dashboard rather than from inside WooCommerce, the refund completes correctly on Stripe’s side but the order in WooCommerce won’t update unless your webhooks are working perfectly. Best practice: always process refunds from inside WooCommerce. The refund flows out to Stripe via the API, the customer’s card gets credited, and the WooCommerce order updates correctly. Processing from inside Stripe directly is a habit some store owners develop because the Stripe dashboard is cleaner, but it creates reconciliation problems.
Tax confusion at international checkout.
If you sell internationally and use Stripe Tax for automated tax calculation, you need to make sure WooCommerce’s own tax settings are turned off for the regions Stripe Tax handles. Otherwise both systems try to calculate tax simultaneously and you end up either double-taxing customers or producing inconsistent invoices. Decide which system owns tax calculation and turn the other off completely for those regions.
Plugin conflicts at checkout.
WooCommerce’s ecosystem has thousands of plugins, many of which modify the checkout page. Stripe’s payment forms can break when other plugins inject JavaScript at the wrong point in the page lifecycle. If Stripe’s card field doesn’t load, the most likely cause is a conflicting plugin. Disable plugins one at a time to find the culprit, or use a browser developer console to identify JavaScript errors. This is the single most common cause of “Stripe doesn’t appear at checkout” complaints that aren’t actually Stripe’s fault.
Production tip
Set up email notifications for failed payments and webhook errors. WooCommerce will send order-status emails by default, but Stripe’s dashboard alerts for repeated webhook failures or unusual decline patterns are turned off unless you configure them. Enable them. The first hint that something is wrong with your integration is usually a notification you didn’t configure.
§ 04 · When this setup isn’t right
Three cases where you should consider something else.
The standard WooCommerce + Stripe integration is right for most stores. It’s not right for everyone.
If you’re selling primarily digital products with low margin per transaction.
The 30-cent per-transaction fee dominates economics on low-priced digital goods. A $3 digital download incurs a 39-cent fee — 13 percent effective rate. At this transaction size, consider Gumroad, Lemon Squeezy, or Paddle, all of which absorb payment processing into a slightly higher percentage rate but don’t carry the flat per-transaction fee. WooCommerce + Stripe is wrong economics for the $3-$15 digital goods price band.
If you need merchant-of-record services for international sales.
Selling digital products internationally creates VAT and sales tax obligations that Stripe Tax can help with but doesn’t fully solve. Merchant-of-record platforms like Paddle, Lemon Squeezy, or FastSpring take on the tax compliance themselves — they sell the product to the customer, you sell the product to them. This is genuinely simpler for international digital goods sellers and worth the slightly higher fee.
If your store is fundamentally a marketplace.
If you have multiple vendors selling on your store, with payouts going to different parties, WooCommerce alone isn’t the right architecture. You need Stripe Connect with proper marketplace setup, which is a meaningfully larger engineering project than the standard plugin integration. For most independent operators, either using a purpose-built marketplace platform (Sharetribe, Mirakl) or accepting that this is a custom development project is the honest answer.
§ 05 · Bottom line
The setup is easy. The maintenance is the work.
Connecting WooCommerce and Stripe is genuinely simple. Forty minutes of focused setup, executed in the right order, gets you a working production checkout that handles cards, digital wallets, and the standard cases reliably. The work that nobody tells you about is the ongoing maintenance — the webhook monitoring, the tax handling, the subscription renewals, the plugin conflicts that emerge when you add new extensions, the reconciliation between Stripe and WooCommerce when refunds happen.
If you’re setting up the integration from scratch today, follow the steps above and you’ll be in good shape. If you’re already running it and seeing intermittent issues, the troubleshooting section above covers most of what I’d look at first. And if you’re past the basic setup and starting to feel friction at scale — rising payment processing costs, complex tax requirements, marketplace ambitions — that’s usually a signal that you’ve outgrown the standard integration and need to think more carefully about which payment infrastructure actually fits where your business is going.
The next piece in this series covers Stripe payment integration for WordPress stores that aren’t running WooCommerce — for example, simple product sites, donation pages, or content sites selling premium access. The setup is different and so are the trade-offs.
Quick answers
Twelve common questions.
Is Stripe free to use with WooCommerce?
The Stripe extension itself is free to install. Stripe charges its standard processing rate per transaction (2.9% + 30¢ in the US for online card payments). No setup fees, no monthly fees, no minimum volume.
Do I need a separate plugin for Stripe with WooCommerce?
No. The official Stripe extension is now part of WooCommerce’s core ecosystem and replaces older third-party plugins. Older guides that recommend separate gateway plugins are outdated; use the official one published by Stripe.
Does Stripe work with WooCommerce Subscriptions?
Yes, but you need the WooCommerce Subscriptions extension separately ($279/year as of writing). Stripe handles the actual recurring billing reliably, and integrates with Stripe Billing for advanced features. Add 0.5% to your effective rate for subscription transactions.
Does Stripe support Apple Pay and Google Pay in WooCommerce?
Yes, both are supported and easy to enable. Enable them under Settings → Payments → Stripe → Express Checkouts. Apple Pay requires domain verification, which the integration handles automatically in most cases.
Why isn’t Stripe showing up at checkout?
Usually one of three things: SSL not active on your site, Stripe not enabled in WooCommerce payment settings, or a plugin conflict breaking the checkout JavaScript. Check SSL first, payment settings second, then disable other plugins one at a time to find conflicts.
Can I accept international payments with Stripe and WooCommerce?
Yes — Stripe supports 135+ currencies and over 50 countries for merchant accounts. Be aware of the additional fees: 1.5% on international cards, 1% on currency conversion. For internationally-focused businesses these add up materially.
How long does Stripe take to verify my account?
For US businesses with standard documentation, typically instant to 24 hours. For international businesses or businesses in higher-risk categories, 24 to 72 hours is normal. Verification is handled entirely by Stripe, not by WooCommerce.
What if my host blocks Stripe’s webhooks?
Test webhooks from your Stripe dashboard immediately after setup (Developers → Webhooks → Send test webhook). If they fail, the issue is on the host side — firewall configuration, IP blocking, or aggressive security plugins. Most reputable WordPress hosts handle this correctly; cheap shared hosts sometimes don’t.
Should I process refunds from WooCommerce or from Stripe?
Always from WooCommerce. Processing from Stripe directly creates reconciliation issues because the order status in WooCommerce won’t reflect the refund unless webhooks fire perfectly. Doing it from WooCommerce keeps both systems in sync automatically.
Is the Stripe + WooCommerce integration PCI compliant?
Yes — the integration uses Stripe.js which means card data goes directly from the customer’s browser to Stripe, never touching your server. Your store qualifies for SAQ A, the simplest PCI compliance level. You should still maintain basic security practices on your WordPress site, but the integration itself handles the hardest parts of compliance.
Can I customise the Stripe checkout’s appearance?
Yes, within limits. You can match colours, fonts, and basic styling via the Stripe extension settings or via custom CSS. For deeper customisation, Stripe Elements lets you control the card form rendering individually, but this requires developer involvement. The default look is clean and converts well; don’t over-customise without good reason.
When should I consider leaving WooCommerce + Stripe for something else?
Three signals: you’re selling primarily low-priced digital products where the 30¢ fee dominates, you need merchant-of-record international tax handling, or you’re operating a multi-vendor marketplace at scale. For typical online stores selling physical or higher-priced digital goods, the integration scales cleanly into the millions of revenue.
Based on Henrik Vance’s direct experience inside Stripe’s integrations team and ongoing observation of WooCommerce store implementations as of Q2 2026. WooCommerce, Stripe, and their respective extensions update frequently — specific UI paths and settings names may shift over time, but the underlying setup principles described here remain consistent. Spent is editorially independent and accepts no payment for coverage. No links in this article are affiliated.
