DevLearn
Back to Payments & Banking
payments

Payment Gateway Internals

How gateways route, tokenize, and orchestrate multi-acquirer payments

Payment Gateway Internals — Overview

How gateways route, tokenize, and orchestrate multi-acquirer payments

A payment gateway sits between merchant and acquirer/processor. It handles tokenization, 3DS orchestration, routing rules (cost, success rate, geography), retry logic, and webhook delivery. Modern gateways are event-driven with Kafka for async settlement notifications.

@Service
public class PaymentGatewayOrchestrator {

  public PaymentResult authorize(PaymentRequest req) {
    // 1. Tokenize if raw card (vault call)
    String token = req.hasToken() ? req.getToken()
        : tokenVault.tokenize(req.getCard());

    // 2. Route to acquirer (smart routing)
    AcquirerRoute route = router.select(req.getAmount(), req.getCountry());

    // 3. 3DS if required
    if (route.requires3ds(req)) {
      return threeDS.initiate(req, route);
    }

    // 4. ISO 8583 / API call to acquirer
    AuthResponse auth = route.getAcquirer().authorize(token, req);

    // 5. Publish event for downstream
    kafka.send("payment-events", auth.toEvent());
    return PaymentResult.from(auth);
  }
}
Tip: Gateway idempotency keys prevent duplicate charges when merchants retry on timeout.