Docs

Flujo de Pagos

Documento tecnico que describe la integracion de pagos en Nvito con Stripe: creacion de PaymentLinks, flujo de checkout con Stripe Elements, procesamiento de webhooks, estados de pago, contribuciones a la mesa de regalos y medidas de seguridad.

CampoValor
Version1.0
FechaMarzo 2026
EstadoPublicado
AudienciaEquipo de desarrollo, arquitectos

1. Vision General

Nvito integra Stripe como procesador de pagos para dos casos de uso principales:

Caso de usoDescripcionFlujo
Mesa de regalos (Cash Fund)Los invitados contribuyen dinero a un fondo definido por el organizadorPaymentLink publico → Stripe Checkout → Webhook → Registro
Paquetes del eventoPagos de servicios adicionales asociados al eventoPaymentLink interno → Stripe Elements → Webhook → Activacion

2. Arquitectura de Pagos


El organizador crea un PaymentLink desde el panel de administracion.

3.1 Flujo de Creacion

CampoTipoDescripcion
idUUIDIdentificador interno
tokenstring (32)Token publico para la URL
eventIdUUIDEvento asociado
typeenumCASH_FUND, PACKAGE
amountnumberMonto en centavos (o null si es abierto)
currencystringMXN, USD
descriptionstringDescripcion visible al pagador
stripeProductIdstring?ID del producto en Stripe
stripePriceIdstring?ID del precio en Stripe
isActivebooleanSi acepta pagos
expiresAtDateTime?Fecha de expiracion opcional
createdByUUIDUsuario que lo creo

4. Flujo de Checkout

4.1 Mesa de Regalos (Cash Fund)

4.2 Metodos de Pago Soportados

MetodoPaisesTipo
Tarjeta de credito/debitoGlobalInmediato
OXXOMexicoDiferido (hasta 3 dias)
SPEIMexicoDiferido (minutos a horas)
Apple PayGlobalInmediato
Google PayGlobalInmediato

5. Webhooks de Stripe

5.1 Flujo de Webhook

5.2 Eventos de Webhook Procesados

Evento StripeAccion en Nvito
checkout.session.completedMarcar sesion como completada
payment_intent.succeededRegistrar pago exitoso, enviar recibo
payment_intent.payment_failedRegistrar fallo, notificar si corresponde
charge.refundedRegistrar reembolso
charge.dispute.createdAlertar al organizador

5.3 Seguridad del Webhook

MedidaDescripcion
FirmaValidacion con stripe.webhooks.constructEvent() usando el webhook secret
IdempotenciaCada evento tiene un ID unico; se ignoran duplicados
TimeoutRespuesta en menos de 5 segundos (procesamiento asincrono via colas)
IP whitelistSolo IPs de Stripe permitidas (configurado en infraestructura)

6. Estados del Pago

EstadoDescripcionFinal?
PENDINGCheckout creado, esperando pagoNo
PROCESSINGStripe procesando el pago (OXXO, SPEI)No
SUCCEEDEDPago completado exitosamenteSi (salvo reembolso)
FAILEDPago rechazado por el banco o procesadorSi
REFUNDEDReembolso completo procesadoSi
PARTIALLY_REFUNDEDReembolso parcial procesadoSi
CANCELLEDCheckout abandonado (timeout de 30 minutos)Si
EXPIREDPaymentLink expiro antes del pagoSi

7. Mesa de Regalos (Gift Registry)

7.1 Tipos de Items

TipoDescripcionPago
Producto fisicoItem con precio fijo (ej. licuadora)Monto fijo
Cash FundFondo abierto (ej. luna de miel)Monto libre o sugerido
ExperienceExperiencia (ej. cena romantica)Monto fijo o libre

7.2 Contribuciones

Cada contribucion se registra como un Payment asociado a un GiftRegistryItem:

CampoTipoDescripcion
paymentIdUUIDReferencia al pago
giftRegistryItemIdUUIDItem de la mesa de regalos
guestIdUUID?Invitado que contribuyo (si identificado)
amountnumberMonto contribuido
messagestring?Mensaje del contribuyente

7.3 Progreso del Fondo

Para Cash Funds, se calcula el progreso:

progress = (sum of contributions) / targetAmount * 100

El frontend muestra una barra de progreso con el porcentaje alcanzado.


8. Reembolsos

8.1 Flujo de Reembolso

8.2 Reglas de Reembolso

ReglaDescripcion
Solo SUCCEEDEDSolo se pueden reembolsar pagos exitosos
Max montoNo se puede reembolsar mas del monto pagado
Multiples parcialesSe permiten multiples reembolsos parciales (sum no excede total)
RolesSolo OWNER y ADMIN pueden procesar reembolsos
AuditoriaSe registra quien proceso el reembolso y cuando

9. Seguridad

AspectoImplementacion
PCI ComplianceStripe maneja todos los datos sensibles de tarjeta (nivel 1 PCI DSS)
Webhook signaturestripe.webhooks.constructEvent() valida firma HMAC
IdempotenciaIdempotency keys en creacion de PaymentIntents
Token no predeciblePaymentLink tokens generados con nanoid (32 chars, cripto-random)
ExpiracionPaymentLinks expiran automaticamente si se configura expiresAt
Rate limitingEndpoints de checkout limitados (10 req/IP/min)
MontosValidacion server-side de rangos permitidos (min/max por organizacion)
MonedaSolo monedas habilitadas para la organizacion (MXN, USD)

10. Metricas y Reportes

El organizador puede ver metricas de pagos en el dashboard:

MetricaDescripcion
Total recaudadoSuma de pagos SUCCEEDED
Numero de contribucionesTotal de pagos exitosos
Monto promedioTotal recaudado / numero de contribuciones
Tasa de exitoSUCCEEDED / (SUCCEEDED + FAILED) * 100
Progreso por itemContribuciones vs meta para cada item de regalo
Top contribuyentesInvitados que mas han contribuido

11. Archivos Clave

ArchivoUbicacionResponsabilidad
payments.service.tssrc/modules/payments/Logica de negocio de pagos, checkout, reembolsos
payments.controller.tssrc/modules/payments/Endpoints REST de pagos
payments-webhook.controller.tssrc/modules/payments/Handler de webhooks de Stripe
stripe-client.service.tssrc/modules/payments/services/Wrapper del SDK de Stripe
gift-registry.service.tssrc/modules/gift-registry/Mesa de regalos, items, contribuciones
gift-registry.controller.tssrc/modules/gift-registry/Endpoints REST de mesa de regalos

12. Relacion con Otros Flujos

Flujo relacionadoRelacion
Ciclo de Vida del EventoLos PaymentLinks solo funcionan para eventos ACTIVE
Flujo del InvitadoLos invitados acceden a la mesa de regalos desde la invitacion o la app
Flujo de ComunicacionesLos recibos de pago se envian via el sistema de comunicaciones
Ciclo de Vida de la InvitacionLa seccion GiftRegistry de la invitacion incluye links de pago
Esta pagina fue util?