WooCommerce

Payment Gateway Missing From the Checkout Block: A Diagnosis

A gateway is enabled and absent from the checkout. The decision tree: block support, availability rules, currency and country, SSL, JavaScript errors, caching.

5 min read
WooCommerceCheckoutDebugging
902 words5 min read

The symptom

The gateway is installed, activated and enabled in WooCommerce, Settings, Payments. The checkout shows no payment options, or shows every gateway except that one. Sometimes it appears for some customers and not others. The store is losing sales while someone toggles settings.

Payment gateways decide for themselves whether to appear, on every checkout load, based on a set of conditions. Any one failing hides the gateway silently. Here is the tree, in the order that finds the cause fastest.

1. Does the gateway support the checkout block?

The checkout block renders payment methods through the Store API and a client-side integration each gateway must provide. Gateways built only for the shortcode checkout do not appear in the block at all.

Check: the gateway's documentation or changelog for "checkout block" or "block-based checkout" support. In WooCommerce, Status, the block compatibility notice lists incompatible extensions.

Fix: update the gateway to a version with block support; switch the checkout page to the classic shortcode [woocommerce_checkout] as an interim; or change gateway. Since WooCommerce 8.3 new stores default to the block, so this catches older gateways constantly.

2. Is it available for this cart?

Gateways check is_available() before rendering, and that method applies filters:

  • Minimum or maximum order amount set in the gateway's settings.
  • Currency. Many gateways support a fixed list. A store in a currency the gateway does not process hides it.
  • Billing or shipping country. Gateway settings, or WooCommerce's selling locations, or the gateway's own regional availability. A customer entering an unsupported country sees the gateway vanish when the address is filled in.
  • Cart contents. Subscriptions or pre-orders require gateways that support them; a cart containing one hides gateways that do not. Virtual-only carts may hide COD.
  • Shipping method. Cash on delivery can be restricted to specific shipping methods.

Check: each of those settings against a test cart that reproduces the customer's. Add the WooCommerce logging call or a quick filter to print WC()->payment_gateways->get_available_payment_gateways() for the current session.

3. Is the gateway in test mode with a live key, or vice versa?

Some gateways hide themselves when credentials are missing or invalid for the current mode, rather than showing an error.

Check: the gateway's settings for a warning about keys; WooCommerce, Status, Logs for the gateway's log file, which usually records the reason.

4. Is SSL required and missing?

Several gateways refuse to render on a non-HTTPS checkout, or when WooCommerce's "Force secure checkout" mismatch occurs behind a proxy that terminates SSL and passes plain HTTP to the server.

Check: the checkout URL is HTTPS; is_ssl() returns true in PHP. Behind a load balancer, wp-config.php may need the HTTP_X_FORWARDED_PROTO handling.

5. Is JavaScript failing?

The block checkout renders payment methods client-side. A JavaScript error anywhere in the page, from a theme, an optimisation plugin, a consent tool or the gateway itself, can stop the payment section rendering.

Check: browser console on the checkout. Any error is a suspect. Common: a script minifier or combiner breaking the gateway's script; a "defer everything" optimisation delaying a script the checkout expects synchronously; a consent plugin blocking the gateway's script until cookies are accepted.

Fix: exclude the checkout page and the gateway's scripts from optimisation and combination; configure the consent tool to treat payment scripts as necessary.

6. Is caching serving a stale checkout?

A page cache that caches the checkout, or a caching layer that caches the Store API responses, shows one customer's available gateways to another or shows none.

Check: response headers on the checkout page and on /wc/store/v1/cart for cache hits. Test logged out, in a private window, with the cache cleared.

Fix: exclude cart, checkout, my-account and /wc/store/ from page caching. Most caching plugins do this by default; hosts' server-level caches sometimes do not.

7. Is another plugin hiding it?

Plugins that conditionally restrict gateways (by role, by product, by cart total) do exactly what they say, and the rule someone set two years ago is still running.

Check: the plugin list for anything payment-conditional; a filter search for woocommerce_available_payment_gateways in active plugins and the theme.

8. Is the gateway's own service down or the account restricted?

Some gateways check account status on load. A restricted or unverified merchant account hides the method.

Check: the gateway's merchant dashboard for account status; the gateway's log in WooCommerce.

The fast version

  1. Console errors on the checkout? Fix those.
  2. Block-compatible gateway? If not, that is it.
  3. Test cart in the right currency, country and amount, with a plain product. Does it appear? Then it is an availability rule.
  4. Gateway log in WooCommerce, Status, Logs. It usually says.
  5. Caches cleared, checkout excluded.

Most cases resolve at step 1 or 2. The rest are almost always a rule in step 3 that nobody remembered setting.

Preventing the surprise

After every plugin update, load the checkout as a guest with an item in the cart and confirm every enabled gateway appears. It takes thirty seconds and it is on the post-update checklist for every store we maintain, because a checkout with no payment options is a store that is closed without a sign in the window. If you are staring at one now, this tree is the WooCommerce diagnosis we run, and the console and the gateway log are the two places the answer is usually written.

All writingHire me for this