Skip to content
All articles
July 11, 2026·4 min read

Customers Say They Can't Pay on Your Site: How to Diagnose and Fix a Broken Checkout

A clear guide to diagnosing failed payments: where customers get stuck, what to check first, and how to fix your checkout without losing sales.

You keep getting messages from customers saying "payment won't go through" or "my card was declined," but when you test it yourself, everything seems fine. It's one of the most frustrating situations for an online shop: you can't see the error, yet sales vanish at the very last step, right when the customer was ready to hand over their money.

The good news is that checkout problems almost always have a concrete, verifiable cause. It's not magic and it's not "just the customer." In this article I'll show you exactly how to reproduce the problem, how to read both the errors you see and the ones your customer sees, and how to tell a card issue (the customer's bank) apart from a configuration issue (your site or payment processor). By the end you'll know what you can fix yourself and when to call someone.

First, reproduce the problem exactly like a real customer

Most of the time, the reason "it works for you" is that you test differently than your customer does. Make your test as realistic as possible:

  • Open the site on your phone, on mobile data, not on the office wifi.
  • Use an incognito window so you don't carry over saved data from old sessions.
  • Test across browsers: Chrome, Safari, and inside the Instagram or Facebook app (many customers arrive from there, and the in-app browser is the most fragile).
  • Go all the way through with a real card, for a small amount. Many processors have a "test mode" that never catches real-world problems.

If you can reproduce the block even once, you've won half the battle: now you have a concrete error to chase, not a vague story.

Separate the two kinds of failure: declined card vs. broken checkout

These are two different worlds and they get fixed in completely different ways.

A declined card means the payment reaches the bank, but the bank rejects it. Typical messages: "card declined," "insufficient funds," "transaction refused by bank," "do not honor." Here your site is working. The cause is the customer's card or bank: funds, an online-payment limit, a block on foreign transactions, or a 3-D Secure step (the SMS code from the bank) that never got completed.

A broken checkout means the payment never reaches the bank at all. Signs: the pay button does nothing, the page reloads endlessly, you get a blank page, or a technical "error 500" message. Here the problem is on your end: configuration, processor keys, or a technical conflict. The first question to always ask: does the payment reach the bank, or does it break before that?

Check the things that break checkout most often

Once you know which camp you're in, run through the usual suspects:

  • API keys in the wrong mode: many shops accidentally stay on the processor's "test" keys (Stripe, PayPal, local gateways) after launch. Payment looks like it works, but money never lands. Confirm you're on "live" keys.
  • Expired SSL certificate: if the padlock is missing or a security warning shows up, many customers bail instantly, and some processors refuse to load the payment form.
  • Plugin or update conflict: on WordPress/WooCommerce, a new plugin or an update can break the payment page. If it worked and suddenly broke, ask what changed last.
  • 3-D Secure set up wrong: SMS-based authentication is mandatory in the EU. If this step is poorly integrated, transactions fail in bulk.
  • Overly strict form fields: a field that rejects spaces in the card number or won't accept a foreign postal code blocks perfectly valid customers.

Read the errors in your processor dashboard, not just on the site

Your site shows you very little. The truth lives in your processor account: Stripe, PayPal, and every local gateway have a dashboard with the transaction history and the exact reason for each refusal.

Go in and look at the failed transactions from the last few days. You'll see clear codes: "insufficient_funds," "card_declined," "authentication_failed," "expired_card." If you see many refusals from different banks with different codes, the customers most likely do have card problems, and the fix is to offer other methods (bank transfer, cash on delivery).

If instead you see NO attempted transaction at all, even though the customer says they pressed "pay," then the payment never leaves the site: the problem is definitely in your setup, not the customer. This distinction saves you hours of looking in the wrong place.

When to fix it yourself and when to ask for help

You can handle plenty on your own: switching to live keys, renewing SSL, disabling a plugin that broke the page, or adding an alternative payment method. These are common-sense fixes that don't need a developer.

But if the payment breaks before it reaches the bank and you can't see why, if it's a repeating technical error, or if the processor integration needs rebuilding, it's time for someone who does this every day. Every day with a broken checkout means lost orders you never get back.

At MPO Web Studio we work remotely across the country and can check a checkout quickly, no travel needed. We'll tell you honestly whether it's something small you can do yourself or something worth taking over, with transparent pricing and no stories. If you'd like a second pair of eyes on your problem, send us a WhatsApp message and we'll look at it together.

Frequently asked questions

Why does my customer say they can't pay, but payment works for me?+

Usually because you test under different conditions: another browser, another device, a logged-in account, or even the processor's test mode. Reproduce it exactly like a customer: phone, mobile data, incognito window, a real card for a small amount. Also check whether they arrive from the Instagram or Facebook app, where the in-app browser breaks payments often.

How do I tell if it's the customer's card or my site?+

Check your processor dashboard (Stripe, PayPal, your local gateway). If you see the failed transaction with a bank code like "card declined" or "insufficient funds," it's the customer's issue. If NO transaction attempt appears at all, even though the customer pressed pay, then the payment breaks on your site and it's a configuration problem.

What is 3-D Secure and why does it cause payments to fail?+

It's the bank's SMS-code authentication step, mandatory in the EU. If it's poorly integrated, the customer never receives or can't complete the code, and the transaction is rejected. If you see many "authentication failed" errors, the 3-D Secure integration needs to be checked.

Is it worth adding more payment methods?+

Yes, almost always. If some customers have troublesome cards or simply don't trust paying by card online, an alternative like bank transfer or cash on delivery recovers orders you'd otherwise lose. Adding options costs little and covers more people.

How long does it take to fix a broken checkout?+

It depends on the cause. A wrongly set key, an expired SSL, or a conflicting plugin can be sorted the same day. A processor integration rebuilt from scratch takes longer. The first useful step is diagnosis: once you know whether the payment leaves for the bank or not, the path to a fix is much shorter.

Free guide

7 mistakes that drive clients away from your website

Leave your email and get the guide right here, instantly. No spam.

By submitting, you agree to the Privacy Policy.
Free · no obligation

Want to see what your business's website could look like?

Message us on WhatsApp and we'll prepare a FREE demo website with your business name. See it first — decide after.

Request a free demo websiteWe reply on WhatsApp within minutes