Chykalophia Docs
WooCommerce

Troubleshooting payment problems

How to diagnose and fix common WooCommerce payment failures — declined cards, gateway errors, and checkout issues.

Difficulty
Beginner

Payment problems are stressful — both for you and your customers. Most have a clear cause. This guide walks you through the most common payment issues and how to resolve them quickly.

Quick summary

When a payment fails, check these in order: (1) What do the order's notes say? That's where the gateway records its own reason. (2) Is the payment gateway enabled and properly connected? (3) Is the site using HTTPS? (4) Is an out-of-date or incompatible plugin or theme in the way? Most payment problems are gateway configuration or compatibility issues, not code problems.

Quick diagnostic checklist

Before diving deep, run through this list:

  • HTTPS is active — and not just on checkout. WooCommerce recommends running the whole store over https://
  • The payment gateway is enabled in WooCommerce → Settings → Payments (each provider has an Enable button, or Manage once it's on)
  • The gateway is connected to a live account, and the connection status shows as enabled
  • If your gateway uses API keys rather than an account connection, they're entered correctly — no extra spaces
  • The gateway's test mode is turned off
  • WordPress, WooCommerce, the gateway extension and your theme are all up to date
  • No recent plugin or theme change that might have caused a conflict

Problem: "Payment could not be processed" error at checkout

This generic error covers many causes. Work through these:

Read the order's notes first. Open the order in WooCommerce → Orders. The Order notes panel usually carries the gateway's own message — a transaction ID, a decline reason, an authentication failure or a timeout. If there are no payment notes at all, that's a signal in itself: the gateway probably never finished responding to your site.

Check the WooCommerce logs. Logging is enabled per gateway, in that gateway's own settings. Once it's on, go to WooCommerce → Status → Logs and open the log for your payment gateway, on the day the order was placed. Logging only captures transactions from the point you switch it on, so you may need to place a test order. Turn verbose logging off again when you're done — logs grow.

Check your payment gateway dashboard. Log in to Stripe/PayPal and look at the failed payments section. The gateway usually gives a specific reason (declined, invalid card, insufficient funds, etc.).

Try with a different card or payment method to rule out a bank-side decline.

Try in an incognito/private browser window to rule out browser extensions or cookies interfering.

Problem: Stripe declines and errors

Stripe attaches a decline code to a declined card payment, and it's the code — not the wording the customer saw — that tells you what happened. You'll find it in the order notes or the Stripe dashboard. The common ones, with Stripe's own guidance:

Decline codeWhat it meansWhat to do
generic_decline, do_not_honor, call_issuerThe card was declined for an unknown reasonThe customer needs to contact their card issuer
insufficient_fundsThe card has insufficient fundsThe customer needs to use another payment method
incorrect_cvc / invalid_cvcThe security code is wrongThe customer should try again with the correct code
expired_cardThe card has expiredThe customer needs to use another card
incorrect_numberThe card number is wrongThe customer should re-enter it
incorrect_zipThe billing postcode doesn't matchThe customer should re-enter their billing postcode
card_velocity_exceededA balance, credit limit or transaction limit was hitThe customer needs to contact their card issuer
authentication_requiredThe payment needs 3D Secure authenticationUsually the customer is prompted to authenticate and can retry
fraudulentStripe suspects fraudStripe's advice is not to tell the customer anything more specific than a generic decline

Two error codes point at your setup rather than the customer's card: api_key_expired means the API key in your settings has expired, so get the current keys from the Stripe dashboard; resource_missing means an ID Stripe was given doesn't exist, which is worth sending to us.

Don't diagnose from the checkout wording

The message a customer reads at checkout isn't the decline code, and similar-sounding messages can come from different codes. Always work from the code in the order notes or the Stripe dashboard.

Problem: PayPal not appearing at checkout

Check that PayPal is enabled in WooCommerce → Settings → Payments. An enabled provider shows a Manage button; one that isn't on yet shows Enable or Complete setup.

Clear your site's cache. Caching plugins can serve an old version of the checkout without the PayPal button.

Disable other plugins temporarily to check for a JavaScript conflict. PayPal's checkout button relies on JavaScript — another plugin may be blocking it.

Check the browser console for errors. Right-click the checkout page, select "Inspect" (or "Developer Tools"), and click the Console tab. Red errors here give clues. Share a screenshot with us if you see errors.

Problem: Customer was charged but order not created

This happens when the payment gateway sends a confirmation (webhook) to your site, but something went wrong receiving it.

Check the gateway's webhook status in WooCommerce. Recent versions of the Stripe extension set webhooks up automatically when you connect, so there's usually nothing to configure by hand. Go to WooCommerce → Settings → Payments, select Manage next to Stripe, open the Settings tab, and click Configure connection in the Account details section. The Live and Test tabs should each say "Configured." If one doesn't, use Reconfigure webhooks. The endpoint looks like https://www.example.com/?wc-api=wc_stripe.

Look at recent webhook events in the gateway's dashboard. In Stripe that's Workbench → Webhooks: select your endpoint, then the Event deliveries tab, which shows each event as Delivered, Pending or Failed. If deliveries are failing, the URL may be wrong or your site may be blocking the request. Stripe keeps retrying a failed delivery for up to three days in live mode, so a short outage often resolves itself.

Contact us. Webhook configuration issues are a common cause and require a bit of technical knowledge to fix correctly.

If the customer was charged but has no order

Confirm this with your payment gateway before telling the customer anything. If they were charged, process their order manually (WooCommerce → Orders → Add order) and refund any duplicate charge. Do not ask them to pay again until you're sure.

Problem: No payment methods show at checkout

Start with the likely cause, not test mode. WooCommerce's own answer is that this usually comes down to an incompatible extension: if your only active payment gateways don't support the block-based checkout, no payment options appear at all, and customers see "There are no payment methods available." Check whether your gateway extension is listed as compatible with the Cart and Checkout blocks.

For the Stripe extension specifically, WooCommerce says missing payment methods are most often a theme compatibility problem, and can also come from plugin conflicts or site misconfiguration. Worth checking:

  • The checkout caches which payment methods are enabled, and that cache refreshes every ten minutes. Reloading WooCommerce → Settings → Payments → Stripe → Payment Methods clears it sooner.
  • Your site needs a working SSL certificate in live mode, or Force secure checkout enabled under WooCommerce → Settings → Advanced. Checkout URLs should be https.
  • Check the Templates section of your System Status Report for outdated checkout templates coming from your theme.
  • If none of that explains it, a conflict test will show which plugin is responsible.

Problem: Test mode is still on

If real customers see test-mode warnings, check your gateway's test setting.

Go to WooCommerce → Settings → Payments.

Select Manage next to your payment gateway (e.g. Stripe).

Open the Settings tab and look in the General section for Enable test mode. Make sure it is unticked.

Confirm the connection is a live one. With Stripe, live and test are separate connections — check the status under Configure connection. If your gateway uses API keys instead of an account connection, confirm they're the live keys (Stripe's live keys start pk_live_ and sk_live_; sandbox keys start pk_test_ and sk_test_).

Click Save changes.

Common questions

A customer says their card was declined but their bank says it's fine. Why?

Card declines come from the card issuer, not from WooCommerce. "The bank says it's fine" usually means the customer's bank didn't decline it — but the decline may have come from the issuer's fraud checks without appearing as a block in the customer's app, or from Stripe's own fraud tools. The decline code tells you which: a generic_decline, do_not_honor or call_issuer is Stripe's way of saying the issuer gave no reason, and Stripe's advice in all three cases is for the customer to contact their card issuer. Trying a different card is the quickest test.

Payments were working yesterday and now they're not. What changed?

Check for any WordPress, WooCommerce, theme or plugin updates that happened recently. An update may have broken something, and WooCommerce's own troubleshooting starts with outdated software and theme or plugin conflicts. Also check your Stripe/PayPal account for any alerts — occasionally payment processors flag accounts. Then go to WooCommerce → Status and use Get system report. WooCommerce says to check whether WordPress and WooCommerce are on the latest versions, whether PHP is up to date, and whether your store pages (checkout included) are properly configured.

How do I tell if the problem is on my site or with the payment gateway?

Try a test payment using the gateway's test or sandbox mode and its test card numbers. If test payments work but real ones fail, the issue is likely on the gateway side (wrong account, fraud rules, and so on). If test payments also fail, the issue is your site configuration. WooCommerce recommends doing this on a staging site rather than your live store, so test payments can't tangle with real orders.

WooCommerce also gives rough pointers for gateway errors: a 400-type error usually means the contact URL is wrong, and a blank page usually means a PHP problem rather than a payment one.

Need a hand?

If you're stuck, email support@chykalophia.com and we'll help. Include your website address and a screenshot if you can.

Learn more

Last updated

On this page