The average ecommerce store loses between 5% and 15% of transactions to payment failures — and the majority of those failures aren’t the customer’s fault. A failed payment in checkout is a customer with money who wanted to give it to you, and your system refused the transaction. On a store doing $30,000/month, a 10% payment failure rate is $3,000 in lost revenue. That number is recoverable.
Here’s what causes payment failures, how to diagnose which type you’re dealing with, and what to fix.
The Three Types of Payment Failure
Not all failed payments are the same problem. Conflating them leads to wrong fixes.
Hard Declines
A hard decline means the card’s issuing bank rejected the transaction definitively. Common causes: card is canceled, account is closed, reported as stolen, or blocked for international transactions. Hard declines cannot be retried — the transaction will fail every time with the same card.
Hard declines account for roughly 30–40% of payment failures. There’s no optimization fix for a canceled card. The customer needs to use a different payment method. Your checkout should communicate this clearly: “Your card was declined by your bank. Please try a different card or payment method” — not “Payment error. Please try again” which leads the customer to retry the same rejected card.
Soft Declines
Soft declines are temporary rejections — usually due to suspected fraud, insufficient funds at that moment, bank’s velocity limit hit, or card’s international use not enabled. These transactions can succeed if retried, often with a different payment method, after a short delay, or with additional customer authentication.
Soft declines account for 40–55% of failures and are where most optimization opportunity lives. Many soft declines that end a transaction could be recovered with the right retry logic, alternative payment method offer, or 3DS (3D Secure) authentication prompt.
Technical Failures
Technical failures include timeout errors, connection issues between your payment gateway and the card network, invalid request formatting from your checkout code, and session expiration mid-checkout. These are not bank declines — they’re infrastructure problems.
Technical failures should be under 1–2% of transaction attempts. If you’re seeing higher rates, your gateway integration or checkout code has a problem.
An outdoor gear WooCommerce store was showing a 13% payment failure rate in their analytics. Manual review of the failure types revealed: 4% were hard declines (nothing to fix), 7% were soft declines being shown a generic error with no recovery path, and 2% were technical timeouts from a gateway plugin that hadn’t been updated in 14 months. The soft decline recovery and timeout fix — combined with adding PayPal as an alternative payment method — brought their effective failure rate to 5.5% within 60 days.
Diagnosing Your Payment Failure Rate
WooCommerce’s native order reporting doesn’t surface payment failure rates well. You need to look in multiple places:
Your payment gateway dashboard: Stripe’s dashboard shows decline rates by decline code. PayPal has similar reporting. Look at the breakdown of soft vs. hard declines, and identify which specific decline codes appear most often. “do_not_honor” (generic soft decline), “insufficient_funds,” and “card_velocity_exceeded” have different implications and different fixes.
WooCommerce order notes: Failed orders in WooCommerce log the failure reason in order notes if your gateway plugin is configured correctly. Filter orders by “Failed” status and review a sample of 20–30 to categorize the failure types.
Checkout funnel analytics: GA4 funnel exploration can show where customers drop in the checkout flow. If customers are adding payment information and then dropping without a completed order, payment failures are likely part of the cause — but session expiration and checkout UX problems look similar in funnel data.
Fixing Soft Decline Recovery
Soft declines are the highest-recovery opportunity because the customer still wants to buy. Most checkout flows treat a soft decline exactly like a hard decline — show an error, let the customer try again with the same card, watch them leave.
Better soft decline handling:
Surface alternative payment methods immediately after a decline: If a credit card is declined, immediately show PayPal, Apple Pay, Google Pay, or Buy Now Pay Later options as alternatives. Don’t make the customer hunt for alternatives — surface them in the error message itself: “Your card was declined. You can also check out with PayPal.”
Explain what happened without blaming the customer: “Your bank flagged this transaction as unusual. This sometimes happens for online purchases. Try completing the purchase with a different card, or contact your bank to authorize the transaction.” This is more accurate and less demotivating than “Payment failed.”
Implement smart retry logic: Stripe’s Payment Intents API includes built-in retry logic for soft declines when configured correctly. If you’re using Stripe and not using Payment Intents, you’re leaving automatic retry capability on the table.
3D Secure Authentication
3D Secure (3DS) adds an extra authentication step for card transactions — typically a bank verification popup or SMS code. In the EU and UK, Strong Customer Authentication (SCA) makes 3DS mandatory for most card transactions. In the US, it’s optional but increasingly triggered by banks for high-risk or high-value transactions.
The common concern: 3DS adds friction to checkout and reduces conversion. The data is more nuanced. Transactions authenticated via 3DS have lower chargeback rates and higher approval rates because authenticated transactions shift liability from the merchant to the issuing bank — meaning banks approve them at higher rates.
For WooCommerce stores using Stripe: Stripe’s 3DS support via Payment Intents handles this automatically. It triggers 3DS only when required or when the risk profile of the transaction warrants it. Configure this in your Stripe Dashboard settings — don’t disable 3DS by default in an attempt to reduce checkout friction. You may be reducing approvals at the same time.
Kate’s WooCommerce jewelry store had an elevated decline rate on orders over $200. Investigation showed that her Stripe integration was using the legacy Charges API, not the Payment Intents API. The Charges API doesn’t handle 3DS correctly — high-value transactions were being declined by issuing banks that required 3DS authentication before approval. Updating to the Payment Intents API (a gateway plugin update) brought her decline rate on high-value orders from 18% to 7% within two weeks.
Common WooCommerce Payment Configuration Problems
Mismatched Billing Address
AVS (Address Verification System) checks the billing address the customer enters against what’s on file with their bank. A mismatch doesn’t always decline the transaction, but AVS mismatches increase soft decline rates. Common causes: customer enters a new address, doesn’t update their billing address to match, or enters a work address vs. their card’s registered home address.
Make your billing address field clearly labeled as the address on the card, not necessarily the shipping address. The “Same as shipping address” checkbox should default to checked but be easy to uncheck and edit separately.
Session Expiration During Long Checkouts
If a customer spends more than 30–60 minutes in your checkout (paused to check their bank statement, took a call, went away and came back), their WooCommerce session may expire. When they attempt to complete the purchase, the cart data is gone and the payment attempt generates an error that looks like a payment failure.
Extend session timeout for checkout pages. WooCommerce’s default session duration is configurable via the woocommerce_session_expiring and woocommerce_session_expiration filters. Set checkout-specific sessions to 2–4 hours minimum.
Currency and Country Mismatches
If your store is configured for USD but a customer’s card is set for a different currency, or if your gateway account is registered in one country but processing transactions from a different country without cross-border configuration, expect elevated decline rates. Verify your gateway’s country and currency settings match your store configuration.
Adding Backup Payment Methods
Single payment method stores have unnecessary fragility. If Stripe is down, your store is down. If a customer’s credit card is having issues, they have no alternative.
The payment method stack for most WooCommerce stores:
- Primary: Stripe (credit/debit cards, Apple Pay, Google Pay — all through one integration)
- Secondary: PayPal (large user base, especially older demographics; alternative option when cards decline)
- For B2B or high-AOV stores: Bank transfer / ACH via Stripe ACH or a dedicated ACH plugin
- For younger demographics: Buy Now Pay Later via Klarna or Afterpay/Clearpay WooCommerce integrations
Adding PayPal alongside Stripe typically increases completed checkout rate by 5–12% according to Stripe’s published data. The implementation adds one line to your checkout but captures customers whose Stripe payment declined or who prefer PayPal for online purchases.
For WooCommerce stores with checkout infrastructure that’s not handling payment failures cleanly, the fix is sometimes plugin configuration and sometimes a deeper code issue. Our WooCommerce development service diagnoses and resolves checkout payment problems at the code level. Or if you’re building from scratch, our fixed-price packages include correct payment gateway setup and multi-method checkout configuration.
FAQ
What is a normal payment failure rate for an ecommerce store? Industry benchmarks suggest 5–8% is typical for B2C ecommerce, with some variance by product category and average order value. High-value stores (AOV over $200) typically see higher decline rates because banks apply more scrutiny to large transactions. Rates above 10% indicate specific problems worth investigating — gateway configuration, lack of alternative payment methods, or missing 3DS support.
Why is Stripe declining my customers’ cards when they have money available? The most common causes: (1) the billing address entered doesn’t match the card’s registered address, (2) the bank flagged the transaction as suspicious (common for first-time purchases at unfamiliar merchants), (3) the card has international purchase restrictions, or (4) 3DS authentication is required but not being triggered. Check your Stripe Dashboard’s decline codes for the specific reason.
Should I force 3D Secure on all transactions to reduce chargebacks? No. Forcing 3DS on all transactions adds checkout friction that reduces conversion — some customers abandon when presented with the authentication step. Modern gateway integrations (Stripe Payment Intents) apply 3DS dynamically based on risk and regulatory requirements. This balances approval rates, chargeback protection, and conversion better than blanket 3DS application.
How do I recover customers who left after a payment failure? If the customer had an account or entered their email before the failure, trigger a recovery email: “You left something in your cart — and we noticed your payment didn’t complete. Here’s how to try again.” Include a direct link back to checkout. Recovery email sequences for payment failures generate 10–20% completion rates when sent within 2 hours of the failure.
Does WooCommerce log payment failures? WooCommerce logs failed order status and records gateway error messages in order notes, but it doesn’t provide a built-in payment failure analytics dashboard. To get a proper failure rate, you need to combine WooCommerce order data (count of orders with “Failed” status) with your total order attempts, or pull failure data directly from your payment gateway’s reporting interface.