How to handle multi-currency payments correctly, covering exchange rates, settlement currencies, display, and accounting.
When your SaaS serves customers across currency zones, multi-currency support affects payment processing, revenue recognition, reconciliation, and financial reporting. Getting it wrong leads to margin erosion through unfavorable exchange rates and accounting complications.
Every multi-currency payment involves three potentially different currencies:
Presentment currency: what the customer sees and pays. Customers expect their local currency.
Processing currency: what the card network or payment scheme uses. For European cards, usually the presentment currency.
Settlement currency: what your PSP deposits in your bank account. If different from presentment, FX conversion happens at the PSP level.
Always store monetary amounts as integers:
// Correct: 29.95 EUR stored as 2995 cents
$payment->amount = 2995;
$payment->currency = 'EUR';
// Wrong: floating point leads to rounding errors
$payment->amount = 29.95;
Not all currencies use 2 decimal places. JPY has 0 (no minor unit). BHD has 3. Your system must handle this:
function minorUnits(string $currency): int {
return match($currency) {
'JPY', 'KRW' => 0,
'BHD', 'KWD', 'OMR' => 3,
default => 2,
};
}
You have three options:
For most European SaaS companies, fixed-rate pricing per major currency (EUR, GBP, USD, SEK, PLN) combined with PSP conversion for everything else is the practical sweet spot.
When you accept 5 currencies but settle in EUR, you need to track the FX rate applied to each transaction. Without this, your revenue reporting will never match your bank statements.
$transaction->presentment_amount = 2995;
$transaction->presentment_currency = 'PLN';
$transaction->settlement_amount = 693;
$transaction->settlement_currency = 'EUR';
$transaction->exchange_rate = 4.3234;
Store all three values. Your accounting team will thank you.
Multi-currency is a business decision as much as a technical one. Start simple with fixed pricing in major currencies, and only add dynamic conversion when transaction volume justifies the complexity.
Whether you're modernizing your infrastructure, navigating compliance, or building new software - we can help.
Book a 30-min Call