Fintech

Multi-Currency Payment Processing: Technical Challenges and Solutions

How to handle multi-currency payments correctly, covering exchange rates, settlement currencies, display, and accounting.

Multi-Currency Goes Beyond Display Formatting

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.

The Three Currency Concepts

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.

Store Amounts in Minor Units

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;

Currency Precision Varies

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,
    };
}

Exchange Rate Strategy

You have three options:

  1. PSP-managed conversion. Let your PSP handle FX. Simple but you have no control over rates or margins.
  2. Fixed-rate pricing. Set prices per currency manually. No FX risk but requires regular price reviews.
  3. Dynamic conversion. Fetch rates from an API and convert at checkout. Most flexible but adds complexity.

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.

Settlement and Reconciliation

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.

Practical Recommendations

  1. Start with EUR + USD + GBP. Cover 80% of European SaaS customers with three currencies.
  2. Use fixed pricing where possible. Less complexity, more predictable margins.
  3. Always store minor units as integers. Never use floats for money.
  4. Track settlement amounts separately. You need both presentment and settlement for reconciliation.
  5. Review exchange rates quarterly if using fixed pricing. Currency markets move.

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.

Let's talk about your fintech needs

Whether you're modernizing your infrastructure, navigating compliance, or building new software - we can help.

Book a 30-min Call