2026年11月12日

2026年11月12日

WooCommerce Payment Failed? Check Order Status, Logs, Test Mode, HTTPS

This article is a localized edition of the Japanese original. Read the Japanese original

When "payments won't go through" in WooCommerce, the cause can be many things: the card issuer's decision, the payment plugin's settings, site settings (HTTPS or caching), or a conflict with another plugin. This article shows how to narrow down where things stop, using the order status and the logs, and then check each cause in turn.

Screen names were checked against the files of WooCommerce 11.2 and WooCommerce Stripe Payment Gateway 11.1 as distributed on WordPress.org as of November 2026.

1. Start with the order status

Open "WooCommerce → Orders" and check the status of the problem order. Where you look next depends on the status.

Order status Meaning What to check
Pending payment The order was created, but no completed payment has been recorded Whether the customer abandoned the payment screen. If the payment succeeded on the payment provider's side, whether the notification to your site (webhook) is arriving
Failed The payment provider declined the payment, or it stopped with an error The reason left in the order notes and the logs
On hold Waiting for payment confirmation, for example a bank transfer Whether this is how the payment method is supposed to work
Processing Payment is complete The payment went through. The problem is elsewhere, such as emails or stock

The "Order notes" box on the right side of the order edit screen may contain records written by the payment plugin (the decline reason or the payment provider's IDs). Look there first.

Note that if stock management is enabled, Pending payment orders are cancelled automatically after the "Hold stock (minutes)" value (default 60 minutes) under "WooCommerce → Settings → Products → Inventory".

2. Read the WooCommerce logs

Most payment plugins write their errors to the WooCommerce log.

  • Where to look: "WooCommerce → Status → Logs". Logs are grouped by source (the plugin that wrote them). For the Stripe extension the source is woocommerce-gateway-stripe; PHP fatal errors are under fatal-errors.
  • Storage: by default logs are saved as files in wp-content/uploads/wc-logs/. You can check and change the storage location and retention period under "Settings" on the same screen.
  • If you cannot find any entries, check that "Enable logging" is on under "Settings" (it is on by default).

If you can log in to the server over SSH, you can also read the files directly.

# List log files, newest first
ls -lt wp-content/uploads/wc-logs/ | head

# Show the end of the Stripe extension's log (file names include a date and an identifier)
tail -n 100 wp-content/uploads/wc-logs/woocommerce-gateway-stripe-*.log

The Stripe extension always logs errors. When you need more detailed records, turn on "Log debug messages" under "Debug mode" in the Stripe settings, then try the payment again. Turn it back off when you are done.

3. Mixing up test mode and live mode

Most payment plugins have a test setting (test mode or sandbox).

  • While test mode is on, real cards cannot be charged and no sales are made.
  • Conversely, test card numbers do not work in live mode.

Check this on each payment method's settings screen, reached from "WooCommerce → Settings → Payments". In the Stripe extension the setting is "Enable test mode". Test mode defaults to on in this extension, so before you start accepting real payments right after setup, confirm that it is off.

If WP-CLI is available, you can check the Stripe extension's setting like this (yes means test mode).

wp option pluck woocommerce_stripe_settings testmode

To test the whole flow in test mode, use the test card numbers published by the payment provider. For Stripe, 4242 4242 4242 4242 (any future expiry date and any 3-digit security code) gives a successful payment without authentication.

4. Check HTTPS and the site address

A checkout that handles card details must be served over HTTPS. If the site address is still http://, the certificate has expired, or HTTP and HTTPS are mixed, the payment form may not work and the redirect back from the payment provider or its notifications may fail.

# Check that the WordPress Address and Site Address start with https://
wp option get siteurl
wp option get home

# Certificate expiry date (replace example.com with your domain)
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -enddate

Also open the checkout page in a browser and check that the address bar shows no warning.

5. A payment method does not appear at checkout

  • Check that the payment method is enabled under "WooCommerce → Settings → Payments".
  • Some payment methods only work with certain currencies or countries. If your store currency ("Settings → General") or the customer's country is not supported, the method is not shown. Check the conditions in each payment plugin's documentation.
  • Checkout in new stores is built with the "Checkout" block. Payment plugins that do not support blocks are not shown in the block checkout. When you open the checkout page in the block editor, unsupported payment methods are labeled "Incompatible with block-based checkout". Update the plugin to a version that supports blocks, or go back to the classic checkout with "Switch to classic checkout" in the block settings.

6. The payment form does not work (JavaScript errors and conflicts)

If the card number field does not appear, or nothing happens when you press the "Place order" button, check the browser developer tools console for JavaScript errors. Errors in other plugins or the theme, the settings of an optimization plugin that combines scripts, or a setting that caches the checkout page can all cause this.

Deactivating every plugin on a live site also affects your customers. With the troubleshooting mode of the official "Health Check & Troubleshooting" plugin, you can deactivate plugins and switch to a default theme only for your own logged-in session. If payments go through with only WooCommerce and the payment plugin active, turn the remaining plugins back on one at a time to find the cause.

Logging PHP errors also helps narrow down the cause. Add the following to wp-config.php above the /* That's all, stop editing! */ line.

<?php
// Log errors to wp-content/debug.log without showing them on screen
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

When you are done, set WP_DEBUG back to false and delete debug.log.

7. The payment succeeded at the provider but the order stays Pending payment

If the payment provider's dashboard shows a successful payment but the WooCommerce order stays Pending payment, the notification (webhook) from the provider to your site may not be arriving. Check the following.

  • Whether the webhook is set up correctly on the payment plugin's settings screen (the Stripe extension sets it up automatically when you connect)
  • Whether the site is behind Basic authentication, an IP address restriction or maintenance mode
  • Whether a security plugin or WAF is blocking POST requests from the payment provider

If you use Stripe, detailed steps (connection status, reconfiguring webhooks, reading the validation errors in the log, and refund caveats) are covered in "How to fix WooCommerce Stripe errors".

8. Check versions

As of November 2026, the WordPress.org plugin pages list WooCommerce 11.2 as requiring WordPress 7.0 or later and PHP 7.4 or later, and WooCommerce Stripe Payment Gateway 11.1 as requiring WordPress 6.9 or later and WooCommerce 11.0 or later. If you update only the payment plugin while staying on an old combination, it may not work.

php -v
wp core version
wp plugin list --fields=name,status,version

Notes

  • Do not put the payment provider's secret key (for Stripe, the key starting with sk_live_) in theme files, posts or support emails. When you show logs to someone, check that they contain no keys or customer personal data.
  • Most card declines come from the card issuer's decision or input mistakes, and changing site settings will not fix them. Ask the customer to try another card or contact their card issuer.
  • After changing settings, run one payment in test mode and confirm that the order reaches "Processing" before switching back to live mode.

Questions about WordPress? The publisher of this site is based in Japan and replies in Japanese. Contact (Japanese)

お気軽にご相談ください

お見積りへ お問い合わせへ
▲