Customers reach checkout, enter a card, and get There was an error processing your payment. Please try again, or Your card was declined on cards that work everywhere else, or the card field never appears at all. Each failed checkout is a lost sale. Two checks tell you whether Stripe saw the payment and refused it, or whether the request never reached Stripe.
Open your Stripe Dashboard, make sure the Test mode switch matches what the shop uses, and go to Payments, filter Failed or Incomplete. Find the attempt by time or amount. If it is there, Stripe's own reason is on it: a bank decline code (insufficient_funds, do_not_honor), Blocked by Radar, a failed security check (CVC or postcode), or requires authentication where 3D Secure was never completed. If there is no attempt at all, the payment never left your site, so go to Check 2.
In WordPress, go to WooCommerce > Settings > Payments > Stripe, turn on Log debug messages, and place one test order logged out in a private window. Then read WooCommerce > Status > Logs and pick the newest woocommerce-gateway-stripe log. An Invalid API Key or No such customer line means the keys are wrong or from the other mode. No log line at all, with a red error in the browser console (F12), means a script on the checkout page stopped the card form before it could talk to Stripe.
| What you see | Cause | Fix |
|---|---|---|
| Card field missing or blank | Stripe's script blocked by a script-delay or combine setting, a console error from another plugin, or the page not on HTTPS | Exclude Stripe and WooCommerce checkout scripts from delay and combine, fix the console error, force HTTPS on checkout |
| Invalid API Key in the log | Keys pasted from the wrong mode, an old key that was rolled, or test mode left on | Reconnect the account from the Stripe settings page, or paste the live publishable and secret keys together |
| Declined in Stripe with a bank code | The customer's bank refused it | Nothing to fix on the site; the message should ask them to use another card or call their bank |
| Blocked by Radar | A Radar rule blocks the country, a failed CVC or postcode, or a high risk score | Review the rule in Radar > Rules; collect the billing postcode at checkout so the check can pass |
| Incomplete, requires authentication | The 3D Secure pop-up never opened or was closed, often because a script error or a page reload killed it | Fix the console error, exclude checkout from caching, update the Stripe plugin |
| Paid in Stripe, order stays Pending or Failed | The webhook does not reach the site, or its signing secret is wrong | Add the webhook URL shown in the plugin settings to Stripe, paste its signing secret, and allow it through the firewall |
| Apple Pay or Google Pay button missing | The domain is not registered for Apple Pay, or the browser has no saved card | Register the domain in the plugin or Stripe settings, and test on a device with a card in the wallet |
| "Error processing" only for some currencies or amounts | The currency is not enabled on the account, or the total is below Stripe's minimum charge | Check the currency settings and the minimum amount for that currency |
In test mode, pay with Stripe's test card 4242 4242 4242 4242 and the 3D Secure test card 4000 0025 0000 3155: both orders should reach Processing and appear as Succeeded in Stripe. Then switch to live mode and make one small real purchase and refund it. Watch the next few real orders in Stripe's Payments list.
If you would rather someone else finds why Stripe payments fail and fixes it, that is what the box below is for. Related: checkout not working, orders stuck on Pending payment, no available payment methods.