You try to pay, or a customer tells you they tried, and checkout stops with “Payment nonce is missing” (sometimes worded “payment nonce is missing or invalid”). It is an unhelpful message, because it names a symptom rather than a cause. This guide explains what it means and gives you a short, ordered list of things to check.
What the error means
Many payment gateways do not let card details touch your server. Instead, a small piece of JavaScript from the gateway sits on your checkout page. When the customer clicks the pay button, that script sends the card details straight to the gateway and gets back a one-time token. That token is what some gateways call a payment nonce (a “number used once”).
WooCommerce then sends the token, not the card number, to your server. “Payment nonce is missing” means that step failed: the checkout form was submitted without the token. Nothing was wrong with the card. The gateway script either did not run, did not finish, or its result never reached the form.
You will see it most often with Braintree and with other gateways that tokenize card details in the browser. The cause is almost always on your site, not at the gateway.
The usual causes, most likely first
1. A JavaScript error on the checkout page
If any script on the page throws an error before the gateway script runs, the gateway form may not initialise. Open the checkout page, open your browser’s developer tools, and look at the Console tab for red errors. An error that names a plugin or theme file is your first lead.
2. A script optimisation or caching plugin
Minifying, combining, deferring or delaying JavaScript is the single most common cause. These features change the order in which scripts load, and a payment form can break quietly when they do. Exclude the gateway’s scripts, and your jQuery and checkout scripts, from minification, combination and delay. Then clear the cache and test again.
3. A cached checkout page
The cart, checkout and account pages should never be served from a page cache. A cached checkout can send out an expired security token or a stale form. Check your caching plugin and your host’s cache for exclusions on those pages.
4. Another plugin or the theme interfering
A checkout-field plugin, a one-page checkout tool, a theme with a custom checkout template, or another payment plugin can change the form so the token field is lost. To test, switch to a default theme and disable other plugins one at a time on a staging copy, testing a payment after each. Our guide on how to detect WooCommerce plugin conflicts covers a safe way to do this.
5. The gateway script is blocked
The gateway’s JavaScript is loaded from the gateway’s own address. An ad blocker, a privacy extension, a firewall rule or a Content Security Policy that does not allow that address will stop it. Test in a private window with extensions off, and ask your host whether a security rule is blocking it.
6. Wrong or mismatched keys and settings
Live keys with a sandbox setting (or the other way round), a missing merchant account ID, or a payment method that is enabled but not fully configured can all produce a form that never produces a token. Recheck the credentials in the gateway’s settings against your account.
7. Outdated plugin or WooCommerce version
If the gateway plugin and WooCommerce are not on compatible versions, the payment form can stop working after an update. Check the plugin’s changelog and your WooCommerce version, and update on a staging copy first.
A quick way to narrow it down
- Open checkout in a private window and watch the browser console while you click the pay button.
- Turn off script minification, combination and delay, clear the cache, and test again.
- Test on another browser and device, to separate your site from one customer’s extension.
- Test with a default theme and only WooCommerce and the gateway active, on a staging copy.
If it works at step 2, 3 or 4, you have found the layer that is responsible. If it still fails with nothing else active, check the gateway’s keys and settings, and contact the gateway’s support with the browser console output.
Why it often goes unnoticed
This error does not show up in a sales report. It appears in front of a customer, who usually leaves. It often starts right after an update or a change to your caching settings, and it may affect only some browsers. If you do not test checkout after every change, you can lose orders for days before anyone tells you. See our guide to what to check when a WooCommerce payment gateway is not working for the wider picture.
Catching it sooner
The free Kodenzo Commerce Health plugin runs read-only checks on demand across your store configuration, which helps rule out setup problems. Commerce Health PRO watches in the background for payment failures for each gateway and for JavaScript errors on the checkout page, so a broken payment form shows up on your dashboard soon after it starts. It reads real orders and visits, so it does not place test orders, and it cannot fix the problem for you. See how WooCommerce payment monitoring works.