Design a Payment System
Design a payment processing system like Stripe or PayPal handling transactions, refunds, and fraud detection.
Use event sourcing for transaction history, idempotency keys for exactly-once processing, and async reconciliation.
Think about exactly-once payment processing
How do you handle partial failures?
Consider audit and compliance requirements
functional
- •Process payments
- •Refunds
- •Multiple payment methods
- •Recurring billing
- •Fraud detection
non functional
- •Strong consistency
- •Exactly-once processing
- •PCI compliance
- •Audit trail
Architecture diagram visualization
(Diagram generation coming soon)
patterns
saga
Distributed transaction across payment provider + internal systems
idempotency
Client-generated idempotency key prevents duplicates
event sourcing
Immutable transaction log, derive state from events
components
- •Payment Gateway
- •Transaction Service
- •Ledger Service
- •Fraud Detection
- •Notification Service
retry logic
Exponential backoff with circuit breaker
pci compliance
Tokenization, encryption at rest, audit logs
fraud detection
ML models + rules engine, real-time scoring
double entry
Every transaction has debit and credit entries
immutability
Never update, only append correction entries
reconciliation
Daily reconciliation with payment providers
steps
- •Validate request
- •Fraud check
- •Reserve funds
- •Execute payment
- •Update ledger
- •Send confirmation
failure handling
Compensating transactions for rollback