Usually, such issue has a few possible causes:

1. The payment plugin ignores the order currency and takes the base currency instead

Since WooCommerce was designed to support only a single currency, without exceptions, some payment gateway plugins ignore the currency passed with the order and take the base currency from configuration instead. In most cases, the solution consists in modifying the affected payment gateway plugin, by replacing every occurrence of get_option('woocommerce_currency') with get_woocommerce_currency()

Important: please note that this operation may not always be enough, as it depends on how the payment plugin was designed.

2. The payment gateway does not accept multiple currencies

Some payment gateways, such as 2Checkout can only handle one currency per account. They also assume that any order amount passed to them is in such currency. For example, a 2Checkout account in EUR will interpret all payments sent to it as being in EUR, regardless of the actual currency. Unfortunately, since this limitation is on the payment provider side, it's no possible to circumvent it. 

When this is the case, we would recommend to contact the payment provider to see if they can allow your account to accept multiple currencies. If that is not possible, then we suggest to use a different payment providers for the unsupported currencies.

3. A 3rd party plugin is interfering with the Currency Switcher

Some 3rd party plugins may force the wrong currency at checkout. One of such plugins is the WooCommerce Custom Currencies, which tends to force the checkout currency to USD and should not be used together with the Currency Switcher.

Further reading

You can purchase the Currency Switcher from our online shop.