| Service | Responsibility | Tech Stack (example) | |--------|----------------|----------------------| | | Create, store, and expire payment intents. | Go + Redis (TTL) | | QR/Deep‑Link Generator | Encode intent payload in QR/URL. | Node.js + qrcode lib | | UPI Orchestrator | Central routing, idempotency, retry logic. | Java‑Spring Boot, gRPC | | PSP SDK Wrapper | Abstract NPCI/Bank APIs (collect, request‑to‑pay). | Python SDK (thin wrapper) | | Callback Receiver | Async webhook endpoint (verified via HMAC). | Kotlin + Spring WebFlux | | Ledger Service | Double‑entry accounting, per‑order ledger entries. | PostgreSQL + Debezium for CDC | | Event Bus | Publish/subscribe for payment events (Paid, Failed, Refunded). | Apache Kafka (replication factor 3) | | Notification Service | SMS/Email/Push to shopper & seller. | AWS SNS + Twilio | | Risk Engine | Real‑time fraud scoring (velocity, device fingerprint). | Flink + Redis Bloom filter |
Before we dive into the "how-to," it’s important to understand why the method is often superior to traditional cards: