<p>We found a quickfix by editing the <code>Commerce_PaymentsService.php</code> file in <code>craft/plugins/services/</code>.</p>

<p>We changed to following:</p>

<pre><code>$request = [
    'amount'               =&gt; $transaction-&gt;paymentAmount,
    'currency'             =&gt; $transaction-&gt;paymentCurrency,
    'transactionId'        =&gt; $transaction-&gt;id,
    'description'          =&gt; Craft::t('Order').' #'.$transaction-&gt;orderId,
    'clientIp'             =&gt; craft()-&gt;request-&gt;getIpAddress(),
    'transactionReference' =&gt; $transaction-&gt;hash,
    'returnUrl'            =&gt; UrlHelper::getActionUrl('commerce/payments/completePayment', ['commerceTransactionId' =&gt; $transaction-&gt;id, 'commerceTransactionHash' =&gt; $transaction-&gt;hash]),
    'cancelUrl'            =&gt; UrlHelper::getSiteUrl($transaction-&gt;order-&gt;cancelUrl),
];
</code></pre>

<p>To:</p>

<pre><code>$request = [
    'amount'               =&gt; $transaction-&gt;amount,
    'currency'             =&gt; $transaction-&gt;currency,
    'transactionId'        =&gt; $transaction-&gt;id,
    'description'          =&gt; Craft::t('Order').' #'.$transaction-&gt;orderId,
    'clientIp'             =&gt; craft()-&gt;request-&gt;getIpAddress(),
    'transactionReference' =&gt; $transaction-&gt;hash,
    'returnUrl'            =&gt; UrlHelper::getActionUrl('commerce/payments/completePayment', ['commerceTransactionId' =&gt; $transaction-&gt;id, 'commerceTransactionHash' =&gt; $transaction-&gt;hash]),
    'cancelUrl'            =&gt; UrlHelper::getSiteUrl($transaction-&gt;order-&gt;cancelUrl),
];
</code></pre>

<p>This way the request sends the amount based on the base currency (in our case EUR) to Mollie.</p>

<p>This seems a bit hacky to us so maybe an exception for the Mollie gateway can be added to future updates to Craft Commerce.</p>

CC BY-SA 3.0
2017-03-17T10:36:33.203Z
2017-03-17T10:36:33.203Z
Floriskoch
<p>If you can't charge someone in a certain currency with your gateway, then it shouldn't be selectable as a payment currency option for the order. The feature is called 'multi currencies payments' - it allows your customer to optionally pay the total of the order in a different currency at the conversion rate you specify. </p>

<p>The change you made to charge in the primary currency defeats the purpose of the feature. Set the payment currency to Euros before charging the user.</p>

CC BY-SA 3.0
2017-06-22T02:08:27.587Z
2017-06-22T03:46:37.680Z
2017-06-22T03:46:37.680Z
Luke Holder
<p>We built a multicurrency website on Craft Commerce that uses both Euros and Dollars. The base currency is EUR. We use Mollie as payment gateway. However, Mollie only supports Euros on their platform and does not convert other currencies to euros. The conversion has to take place on the website before the user arrives on their platform. </p>

<p>The problem is: when a user checks out on our website with dollars, say 100USD, the amount will show up on Mollie as 100EUR. Obviously this is a big issue as the amounts will be off by several percents.</p>

<p>How do we properly fix this?</p>

<plugin-craftcommerce>
How to handle payments on a multicurrency website using Mollie gateway?
# How to handle payments on a multicurrency website using Mollie gateway?

(Asked by: username_0 on 2017-03-17)

We built a multicurrency website on Craft Commerce that uses both Euros and Dollars. The base currency is EUR. We use Mollie as payment gateway. However, Mollie only supports Euros on their platform and does not convert other currencies to euros. The conversion has to take place on the website before the user arrives on their platform.

The problem is: when a user checks out on our website with dollars, say 100USD, the amount will show up on Mollie as 100EUR. Obviously this is a big issue as the amounts will be off by several percents.

How do we properly fix this?

**Tags:** plugin-craftcommerce


---

## 2 answers

### Answer by username_0 on 2017-03-17. Score: 1

We found a quickfix by editing the Commerce_PaymentsService.php file in craft/plugins/services/.
We changed to following:
$request = [
    'amount'               => $transaction->paymentAmount,
    'currency'             => $transaction->paymentCurrency,
    'transactionId'        => $transaction->id,
    'description'          => Craft::t('Order').' #'.$transaction->orderId,
    'clientIp'             => craft()->request->getIpAddress(),
    'transactionReference' => $transaction->hash,
    'returnUrl'            => UrlHelper::getActionUrl('commerce/payments/completePayment', ['commerceTransactionId' => $transaction->id, 'commerceTransactionHash' => $transaction->hash]),
    'cancelUrl'            => UrlHelper::getSiteUrl($transaction->order->cancelUrl),
];

To:
$request = [
    'amount'               => $transaction->amount,
    'currency'             => $transaction->currency,
    'transactionId'        => $transaction->id,
    'description'          => Craft::t('Order').' #'.$transaction->orderId,
    'clientIp'             => craft()->request->getIpAddress(),
    'transactionReference' => $transaction->hash,
    'returnUrl'            => UrlHelper::getActionUrl('commerce/payments/completePayment', ['commerceTransactionId' => $transaction->id, 'commerceTransactionHash' => $transaction->hash]),
    'cancelUrl'            => UrlHelper::getSiteUrl($transaction->order->cancelUrl),
];

This way the request sends the amount based on the base currency (in our case EUR) to Mollie.
This seems a bit hacky to us so maybe an exception for the Mollie gateway can be added to future updates to Craft Commerce.


---

### Answer by username_1 on 2017-06-22. Score: 1

If you can't charge someone in a certain currency with your gateway, then it shouldn't be selectable as a payment currency option for the order. The feature is called 'multi currencies payments' - it allows your customer to optionally pay the total of the order in a different currency at the conversion rate you specify.

The change you made to charge in the primary currency defeats the purpose of the feature. Set the payment currency to Euros before charging the user.


---

