Introducción
Kaizen Payments es una librería NestJS para cobrar con distintas pasarelas de pago detrás de un contrato único. La instalas en tu API como una dependencia y la usas como una caja negra: no clonas su código ni la levantas aparte, solo la consumes.
Tú te quedas con tu lógica de negocio (pedidos, usuarios…); ella habla con cada pasarela, verifica los webhooks y guarda el estado de cada pago en su propio espacio de la BD.
Qué te aporta
- Una sola forma de cobrar, independiente de la pasarela. Hoy soporta Stripe, Redsys y PayPal.
- No gestionas su base de datos — ver Configuración.
- No gestionas la seguridad de los webhooks — ver Webhooks y eventos.
- Reaccionas con tus propios eventos de dominio.
La superficie que expone en tu API
Al registrar el módulo, tu app gana dos rutas HTTP:
| Método | Ruta | Quién la llama |
|---|---|---|
POST | /payments/charge | La llamas tú para iniciar un cobro. |
POST | /webhooks/:gateway | La llama la pasarela para notificarte. |
La pasarela no es un endpoint, es un dato
Para cobrar siempre llamas al mismo endpoint, POST /payments/charge. La pasarela va como un campo del cuerpo (gateway: "stripe" | "redsys" | "paypal"), no en la URL: se lo pasas al servicio junto con el importe y él enruta al gateway correcto.
El flujo de un pago
- Cobras.
POST /payments/chargecon{ gateway, amount, currency, reference, redirect }. La respuesta te dice cómo llevar al usuario a pagar (según la pasarela). - La pasarela notifica. Cuando el pago se resuelve, llama a
POST /webhooks/:gateway(esa URL se la das tú a la pasarela al configurarla). La librería verifica la firma y casa la notificación con el pago. - Reaccionas. Escuchas
payment.captured/payment.failedcon tu propio listener y haces lo tuyo: marcar el pedido como pagado, enviar un email…
Requisitos
- NestJS 11+ y TypeORM 0.3+ (van como
peerDependencies, deben ser los de tu app). - PostgreSQL (aporta tú el driver, p. ej.
pg). autoLoadEntities: trueyrawBody: true— ver Configuración.
Sigue con la Instalación.