Picking a payment gateway for your WooCommerce store feels simple until you face the actual decision. You need to accept credit cards, digital wallets, and maybe PayPal, but every provider charges different fees, handles refunds differently, and shows up differently in your dashboard. Small stores can't afford to get this wrong - transaction fees stack up quickly, and complicated setup eats time you don't have. This guide compares the four most practical gateways for WooCommerce stores doing under $100,000 per year, with the exact pricing, what breaks, and how to pick between them.
The setup
WooCommerce > Settings > Payments is where you enable and configure gateways. Each gateway requires its own plugin from the WordPress.org repository or the WooCommerce marketplace, then you activate it in this Payments tab and enter API keys or credentials. This setting does not handle tax calculation or subscription billing unless the specific gateway plugin supports those features.
WooCommerce Payments vs. standalone Stripe
WooCommerce Payments is the native option, powered by Stripe's infrastructure but built directly into WooCommerce. You install it from the Payments tab, connect your WordPress.com account (yes, you need one even for self-hosted stores), and it runs inside the WooCommerce dashboard. You see transactions, issue refunds, and manage disputes without opening a separate Stripe dashboard.
The plugin is free. Transaction fees are 2.9% plus 30 cents for U.S. cards, identical to Stripe's standard pricing. WooCommerce Payments offers a tightly-integrated solution that manages everything from one place, but you give up some control. You can't use Stripe's advanced features like Payment Links or Invoice tools unless you open the Stripe dashboard separately, and that dashboard is read-only for WooCommerce Payments users.

Standalone Stripe uses the official Stripe plugin from WooCommerce. You create a Stripe account directly, generate API keys in the Stripe dashboard, and paste them into WooCommerce > Settings > Payments > Stripe. This gives you full access to Stripe Radar for fraud detection, support for Apple Pay and Google Pay through the same plugin, and the ability to use Stripe's entire product suite outside WooCommerce if you expand later.
The choice matters for reporting. WooCommerce Payments keeps everything inside WordPress, so your Orders list shows payment status, refund history, and payout schedules without leaving wp-admin. Standalone Stripe splits reporting between WooCommerce and the Stripe dashboard, which means reconciling two sets of data if you need to track monthly revenue or dispute trends.
PayPal Standard and PayPal Checkout
PayPal comes in two flavors for WooCommerce. PayPal Standard is the free option bundled with WooCommerce core. Customers leave your site, pay on PayPal's hosted page, then return. It works, but the redirect kills conversion for stores that rely on a smooth checkout flow. You enable it in WooCommerce > Settings > Payments, enter your PayPal email address, and it's live.
PayPal Checkout (formerly PayPal for WooCommerce) is a separate plugin that keeps the payment form on your site. Customers see PayPal and Venmo buttons inline at checkout, and the plugin handles card payments through PayPal's card processing, not just PayPal balance transfers. You install the plugin, connect your PayPal business account, and choose whether to show PayPal buttons on product pages, cart, and checkout.
The fee structure is the same for both: 2.9% plus 30 cents for U.S. transactions when you use PayPal's card processing. If a customer pays with their PayPal balance, the fee stays the same. PayPal is almost always a secondary gateway - you run Stripe or WooCommerce Payments as the primary card processor and add PayPal because a segment of customers won't buy without it. PayPal is a highly recognized brand that customers specifically look for, even if your store accepts all major cards through another gateway.
Square for hybrid stores
Square makes sense in one scenario: you run a physical location and a WooCommerce store, and you need inventory to sync between both. The Square for WooCommerce plugin connects your Square account to WooCommerce, and when someone buys a product in-store using a Square terminal, the stock count decrements in WooCommerce. When someone orders online, Square's inventory updates.
You install the plugin, authenticate with your Square account, and map WooCommerce product categories to Square categories. The plugin imports your Square catalog or pushes WooCommerce products to Square, depending on which system holds your master inventory. Transaction fees are 2.9% plus 30 cents for online card payments, matching Stripe and WooCommerce Payments.
The limitation is speed. Square's API can be slow for stores with over 500 SKUs, and inventory sync sometimes lags by several minutes. If you sell fast-moving products both online and offline, you risk overselling unless you build in buffer stock. Square also doesn't support subscription billing natively - you need a separate WooCommerce Subscriptions license and a compatible payment method within Square's system, which adds complexity most small stores don't need.
How fees compound across gateways
Every WooCommerce payment gateway charges per transaction. The plugins themselves are free, and there are no monthly account fees for small stores, but the 2.9% plus 30 cents standard applies to WooCommerce Payments, Stripe, PayPal, and Square. That percentage fee is fixed - you can't negotiate it down unless you're processing over $80,000 per month, which puts you outside small-store territory.
The 30-cent flat fee hits harder on low-value orders. If you sell a $5 product, the fee is 2.9% of $5 (14.5 cents) plus 30 cents, totaling 44.5 cents, or 8.9% of the sale. At $50, the fee is $1.75, or 3.5%. At $200, it's $6.10, or 3.05%. Small stores selling budget items feel the flat fee more than the percentage, and no gateway waives it for micro-transactions.
Currency conversion adds another layer. If you accept international orders and the customer pays in euros or pounds, WooCommerce Payments and Stripe charge an additional 1% to 1.5% for currency conversion. PayPal's international fee structure is higher - 4.4% plus a fixed fee that varies by currency. Square doesn't support multi-currency payments well; customers pay in U.S. dollars and their bank handles conversion, which can confuse international buyers.
What breaks
WooCommerce Payments is active but customers see no payment option
This happens when your WordPress.com account connection expires or when the WooCommerce Payments plugin updates and invalidates the stored token. You check WooCommerce > Settings > Payments, and WooCommerce Payments shows as enabled, but the checkout page displays "No payment methods available."
Go to WooCommerce > Settings > Payments > WooCommerce Payments > Manage, and look for a reconnection banner. Click "Connect" and authenticate with WordPress.com again. If the banner doesn't appear, deactivate the WooCommerce Payments plugin, reactivate it, and walk through the setup wizard from scratch. The plugin stores connection state in the database, and sometimes a failed background update corrupts that state without throwing an error in the dashboard.
PayPal transactions complete but orders stay in Pending status
PayPal sends an Instant Payment Notification (IPN) to your site after a customer pays, and WooCommerce listens for that IPN to mark the order complete. If your site blocks the IPN URL or PayPal's server can't reach it, orders never update from Pending to Processing.
Check WooCommerce > Status > Logs and filter for PayPal IPN logs. If you see "IPN request failed" or no entries at all, your server is blocking PayPal's POST requests. Go to your hosting control panel, whitelist PayPal's IPN IP ranges (PayPal publishes these in their developer documentation), or disable any firewall rule that blocks external POST requests to wp-admin/admin-ajax.php. Some hosts aggressively block admin-ajax to prevent brute-force attacks, and that breaks PayPal IPN silently.
Stripe test mode works but live payments fail with "Invalid API key"
You switched from test mode to live mode in WooCommerce > Settings > Payments > Stripe, entered your live API keys, and saved. Customers try to pay, and the checkout form returns "Your card was declined" even though the card is valid. The WooCommerce > Status > Logs > Stripe log shows "No such token" or "Invalid API key provided."
You copied the wrong key type. Stripe has four keys: test publishable, test secret, live publishable, and live secret. The publishable key starts with pk_, the secret key starts with sk_ or rk_. If you paste the publishable key into the secret key field, Stripe accepts it during save but rejects it when processing a real transaction. Go back to your Stripe dashboard, reveal the live secret key, copy it exactly, and paste it into the "Live Secret Key" field in WooCommerce. Clear your browser cache and test a $1 transaction to confirm.
FAQs
Can I use multiple payment gateways at the same time?
Yes, and most small stores do. You enable WooCommerce Payments or Stripe for card processing, add PayPal as a second option, and customers choose at checkout. Each gateway processes independently - there's no conflict as long as both plugins are active and configured. The order of gateways in WooCommerce > Settings > Payments determines the display order on the checkout page, so put your primary gateway first.
Do I need an SSL certificate to accept payments?
Absolutely. WooCommerce won't activate any modern payment gateway without HTTPS. Stripe, WooCommerce Payments, PayPal Checkout, and Square all require SSL because they handle sensitive card data, even when tokenized. If your site runs on HTTP, install a free Let's Encrypt certificate through your hosting panel, update your WordPress site URL to HTTPS in Settings > General, and force HTTPS in your wp-config.php by adding define('FORCE_SSL_ADMIN', true); above the "stop editing" line.
Which gateway has the fastest payout schedule?
WooCommerce Payments and Stripe both deposit funds within two business days for new accounts, moving to daily payouts after a few months of clean transaction history. PayPal holds funds for 24 hours, then makes them available in your PayPal balance, but transferring that balance to your bank takes another one to three business days. Square pays daily for established accounts but holds the first few transactions for seven to ten days as a rolling reserve.
Can I avoid the 30-cent flat fee on small orders?
No gateway waives it for individual transactions, but you can offset the impact by setting a minimum order value or adding a small-order surcharge. WooCommerce doesn't let you apply fees conditionally by payment gateway in the core settings, so you need a plugin like Payment Gateway Based Fees to charge an extra dollar when the cart total is under $10 and the customer chooses a card gateway. This pushes customers toward PayPal balance payments or encourages larger orders.
What happens to pending orders if I switch gateways?
Pending orders tied to the old gateway stay in Pending status forever unless you manually mark them complete or failed. If you switch from PayPal to Stripe mid-month, any customer who started checkout with PayPal but didn't finish will see an error if they return to complete the order, because the PayPal gateway is no longer active. Go to WooCommerce > Orders, filter by Pending, and either cancel old pending orders or leave the old gateway enabled but hidden (some gateway plugins let you disable new payments while still processing IPNs for in-flight transactions).
Verdict: Use WooCommerce Payments if you want one dashboard and never plan to use Stripe outside WooCommerce. Use standalone Stripe if you need fraud tools or might expand to invoicing or subscriptions later. Add PayPal as a secondary gateway no matter which card processor you choose. Use Square only if you run a physical store and need real-time inventory sync.