Skip to content
Gaurav TiwariDocs

Match Payment Gateways to Currencies

Updated October 17, 2026

Once you sell in several currencies, not every gateway can take every one of them. A shopper paying in Indian rupees sees PayPal, picks it, and the payment fails because PayPal doesn’t settle INR. Or you’d simply rather send euro payments through Stripe and dollar payments through PayPal.

Currency-Aware Payment Gateways lets you choose which gateways handle each currency and which one shows first. Gateways that can’t take the cart’s currency are removed at checkout, and they’re rejected on the server too, so a forced request can’t get through.

Turn It On

This module needs Multi-Currency Checkout. Switch on both from Stackless > Dashboard, then open Stackless > Settings and choose Currency-Aware Payment Gateways under Currency.

The Gateways per currency section lists two fields for every enabled currency, including your store currency:

  • “EUR gateways” style field: the gateways allowed for that currency. Leave it empty for every gateway that supports it.
  • “EUR preferred gateway” style field: the gateway listed first at checkout. Keep WooCommerce order leaves your normal order alone.

Every registered gateway appears in the list. Gateways that are switched off in WooCommerce show “(disabled)” after their name.

How Gateways Are Allowed

The rules depend on whether you’ve saved a list for that currency.

With a saved list:

  • Exactly the gateways you chose are allowed. Nothing else shows.
  • Your list wins even over a known limit. If you add PayPal to a currency PayPal doesn’t list, it will show, so confirm exceptions with your gateway account first.

With an empty list:

  • Gateways with known limits only get the currencies they accept.
  • Gateways Stackless knows nothing about are trusted to run their own checks, so they stay.
  • If a gateway declares its own supported currencies through a supported_currencies() method, that list is used.

Under each currency’s gateway field, a “Not known to support this currency” note names any gateway with a known limit that excludes it.

The Built-In Capability List

These are the defaults Stackless starts from:

  • Direct bank transfer (bacs), Check (cheque), Cash on delivery (cod), Stackless Stripe and WooCommerce Stripe: any currency.
  • PayPal (paypal, ppcp-gateway and Stackless PayPal): AUD, BRL, CAD, CNY, CZK, DKK, EUR, HKD, HUF, ILS, JPY, MYR, MXN, TWD, NZD, NOK, PHP, PLN, GBP, SGD, SEK, CHF, THB and USD.
  • Razorpay: INR.
  • Paystack: NGN, GHS, ZAR, USD, KES, XOF and EGP.
  • Square (square_credit_card): AUD, CAD, EUR, GBP, JPY and USD.
  • Mercado Pago: ARS, BRL, CLP, MXN, COP, PEN, UYU and USD.

Developers can change this map with the stackless_currency_gateways_capabilities filter. It receives an array of gateway IDs, each with a list of currency codes, or ['*'] for any.

What Customers See

On the classic and block checkout, the payment list only shows allowed gateways, with your preferred one first. If a disallowed gateway is submitted anyway, checkout stops with “[Gateway] is not available for payments in EUR. Choose another payment method.”

On the order-pay page, the order’s own currency decides, not the visitor’s current currency. That matters for invoices and renewal pay links created in another currency.

Good to Know

  • Filtering only happens on the storefront. Admin screens, WP-CLI and REST routes other than the Store API see every gateway.
  • Carts that don’t need payment, such as a free order, skip the check.
  • A gateway you remove from a currency also disappears from the order-pay page for orders in that currency.
  • For currency setup and exchange rates, see Sell in Multiple Currencies.
Share

Was this helpful?

Still stuck? Open a support ticket