uz-pay-sdk — Unified Payment SDK for Uzbekistan
Lead Backend Engineer & Maintainer · npm i uz-pay-sdk
Problem
Every company in Uzbekistan that wants to accept payments integrates each provider separately: different auth schemes, different webhook formats, different error semantics. Teams spend weeks per provider and re-implement the same fragile logic in every project.
Architecture
your app
│ one consistent API surface
▼
┌──────────────────────────────────────────────┐
│ uz-pay-sdk │
│ payments · webhooks · logging · analytics │
├──────────────────────────────────────────────┤
│ driver registry │
└───┬───────┬─────────┬─────────┬─────────┬────┘
▼ ▼ ▼ ▼ ▼
Payme Click UzCard Humo Apelsin
│ │ │ │ │
└───────┴────┬────┴─────────┴─────────┘
▼
normalised webhook + idempotent handler
▼
Redis · Winston (rotating logs)Key technical decisions
- Driver / adapter pattern — each provider is an isolated driver behind one interface, so a new provider is added without touching consumer code.
- Normalised webhook layer with signature verification and idempotent handling, preventing duplicate charge processing on provider retries.
- Redis-backed caching and analytics for transaction lookups and provider health.
- Winston structured logging with rotation so production payment failures stay traceable.
- Full Swagger / OpenAPI documentation plus Jest tests over the core payment flows.
- Companion React Native SDK (@uz-pay/react-native-sdk) for in-app checkout.