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.