Fix “Your card was declined” in WooCommerce Stripe (and “Card does not support this purchase”)

If Stripe is showing “Your card was declined” or “Your card does not support this type of purchase” during WooCommerce checkout, the message comes from the customer’s bank or Stripe’s risk checks, not WooCommerce. The fastest path to a fix is to pull the decline_code from your logs/order notes, then apply the matching remedy below.

This guide shows how to find the exact decline reason in WooCommerce/Stripe logs, common codes and what they mean, and the configuration checks (live keys, webhooks, SCA/3-D Secure) that resolve many failures.

Stripe in WooCommerce keeps saying “Your card was declined.” Sometimes it says “Your card does not support this type of purchase.” How do I troubleshoot and fix this?

Quick wins (start here)

  1. Enable Stripe debug logging: Go to WooCommerce → Settings → Payments → Stripe → Settings and enable logging (Advanced section). Reproduce the payment, then open WooCommerce → Status → Logs and pick the latest stripe-*.log. You’ll see the WooCommerce order number, PaymentIntent ID, and the decline_code if it failed. This is the shortest route to the root cause. (Official WooCommerce Stripe troubleshooting recommends using the logs.)
  2. Check the Order notes: Open the order and read the Stripe note (e.g., “Charge failed: card_declined (do_not_honor)).”
  3. Confirm you’re in Live mode: In Stripe settings, make sure live keys are entered (not test keys) and that your site is using HTTPS.
  4. Verify webhooks: In Stripe Dashboard → Developers → Webhooks, confirm your site’s webhook endpoint exists, is live, and recent deliveries are 2xx. Broken webhooks can leave payments incomplete or mis-reported.
  5. Re-try with another card or Payment Request Button (Apple Pay/Google Pay). Some bank declines are card-specific; alternate rails often pass.

What the message actually means

Stripe returns a generic “Your card was declined” when the bank or Stripe’s risk checks refuse the charge. The decline_code provides the exact reason (e.g., do_not_honor, insufficient_funds, card_not_supported, transaction_not_allowed, authentication_required). Use the code to pick the right fix below.

Fixes by decline code (copy-paste cheat sheet)

Decline code What it means Action to fix
do_not_honor / generic_decline Bank refused without specifics. Ask customer to contact card issuer or try a different card/payment method (Apple Pay/Google Pay). Multiple rapid retries usually fail.
insufficient_funds Not enough funds/limit. Customer must use a different card or add funds; retry later.
card_not_supported or transaction_not_allowed Card can’t do online/e-commerce, international, or MCC-restricted transactions. Customer contacts bank to enable e-commerce/international use or tries a different card/method. If you sell subscriptions or foreign currency, advise a card that allows it.
authentication_required SCA (3-D Secure) challenge needed and wasn’t completed. Ensure your Stripe checkout prompts 3-D Secure. Customer must complete the bank’s popup. If it times out, retry and finish the challenge.
stolen_card / lost_card / fraudulent High risk or reported lost/stolen. Don’t retry; use another payment method. Consider enabling additional risk tools and alternative methods.
incorrect_cvc / incorrect_number / expired_card Card details failed validation. Have the customer re-enter details or use another card.
testmode_charges_only / invalid API keys Using test keys for a live transaction or wrong keys. Paste live Publishable and Secret keys in Stripe settings and save. Retry.

Configuration checks that fix many declines

  1. Live keys + HTTPS: Enter live keys (both publishable/secret), disable test mode, and use a valid SSL certificate site-wide.
  2. Webhooks working: Create/confirm a live webhook endpoint for your site and verify recent deliveries show “200 Delivered”. If they’re failing, re-add the endpoint from the WooCommerce Stripe settings (it auto-lists required events) and test again.
  3. SCA/3-D Secure enabled: Make sure your checkout can prompt for 3-D Secure when required. The official Stripe extension handles this; failures tagged authentication_required usually clear after a successful challenge.
  4. Currency/card support: If you sell in a currency some cards can’t settle, consider enabling multi-currency or offering wallets (Apple Pay/Google Pay) that better handle cross-border authorization.
  5. Theme/JS conflicts: If no bank popup appears for 3-D Secure, temporarily switch to a default theme and disable optimization scripts to rule out JS conflicts blocking the SCA modal.

Where to read the exact reason

  • WooCommerce logs: WooCommerce → Status → Logs → pick the latest stripe- log. Search for your order number or pi_ PaymentIntent; read last_payment_error and decline_code.
  • Order notes: Open the order and check the Stripe note (“Charge failed: card_declined (do_not_honor)).
  • Stripe Dashboard: Open the PaymentIntent → “Events” and “Logs” to confirm the bank’s response and SCA status. If the status is requires_action, the customer didn’t complete the challenge.

Recommended store-owner responses (templates)

  • Generic bank refusal (do_not_honor): “Your bank declined the transaction. Please contact the number on your card or try another card/payment method such as Apple Pay or Google Pay.”
  • Card not supported (card_not_supported/transaction_not_allowed): “This card isn’t enabled for online or cross-border payments. Your bank can usually enable this instantly, or you can use another card/payment method.”
  • SCA required (authentication_required): “Your bank needs a quick 3-D Secure verification. Please try again and finish the popup challenge.”
  • Insufficient funds: “Please use another card or add funds and try again.”

Hardening & preventing future declines

  • Offer alternative methods: Enable Apple Pay/Google Pay and local methods; they often succeed where cards fail.
  • Display clearer errors: Keep Stripe’s detailed messages enabled; customers complete SCA more reliably with explicit prompts.
  • Risk tools: Use Stripe Radar rules if you see repeated fraudulent flags.

References

  • WooCommerce: Stripe troubleshooting, logging, and reading decline reasons. (See the “Reviewing Stripe Logs” section.)
  • Stripe: Decline codes and handling (e.g., do_not_honor, card_not_supported, authentication_required), and SCA flows with PaymentIntents.

Need human WordPress help?

WP Assistant is a free tool created by Atiba Software, a WordPress design and development company located in Nashville, TN. If you need more personalized WordPress assistance let us know, and we’ll get back to you ASAP!