Docs

Configurar Sobre de Regalo con Stripe Connect

Guía interna paso a paso para configurar cuentas Stripe Connect Express por evento, activar contribuciones y gestionar el ciclo de vida completo.

PublicadoMarzo 2026Equipo de Nvito (operaciones)

1. Visión General

El Sobre de Regalo permite a los invitados contribuir dinero directamente al anfitrión del evento via Stripe Connect Express. Nvito actúa como intermediario tecnológico y cobra una comisión automática (application_fee).

1 cuenta = 1 evento

Cada evento tiene su propia cuenta Connect porque cada evento tiene un beneficiario distinto (el cliente que contrató el evento). La cuenta Connect NO es por organización.


2. Requisitos Previos

Antes de configurar el Sobre de Regalo para un evento:

PrerequisitoVerificación
Stripe Connect habilitado en DashboardSettings → Connect → Platform Settings
Variables de entorno configuradasSTRIPE_CONNECT_WEBHOOK_SECRET, URLs de onboarding
Webhook de Connect registrado en StripeEndpoint /webhooks/stripe-connect
Evento creado en NvitoEstado DRAFT o ACTIVE
Contrato firmado con el clienteDatos del beneficiario disponibles

Datos necesarios del cliente

  • Nombre legal completo del beneficiario (persona física o moral)
  • Email de contacto (recibirá notificaciones de Stripe)
  • RFC (10 a 13 caracteres, formato XAXX010101000)
  • Tipo de persona: física (INDIVIDUAL) o moral (COMPANY)

3. Paso a Paso en el Admin

3.1 Activar el Sobre de Regalo

  1. Abrir admin → seleccionar evento → Mesa de Regalos → tab Sobre de Regalo
  2. Clic en "Activar Sobre de Regalo"
  3. Aparecen 3 secciones configurables con indicador de progreso

3.2 Configurar el Fondo (Sección 1)

  1. Ingresar Meta del fondo en MXN (ejemplo: $50,000)
  2. Escribir Mensaje para invitados (visible en la app: "Fondo para nuestra luna de miel")
  3. Clic "Guardar fondo"
  4. El indicador del paso 1 cambia a ✓ verde

3.3 Crear la Cuenta de Cobro (Sección 2)

  1. Abrir sección "Cuenta de cobro del cliente"
  2. Llenar datos del beneficiario:
    • Nombre legal: Tal como aparece en documentos fiscales
    • Email: Email del cliente
    • Tipo de persona: Física o Moral
    • RFC: Formato válido
  3. Clic "Crear cuenta de cobro"
  4. Estado: "Verificación pendiente"

3.4 Completar Verificación en Stripe

  1. Clic "Completar verificación" → nueva pestaña en Stripe
  2. Completar formulario de onboarding:
    • Datos personales o de la empresa
    • Información bancaria (CLABE)
    • Verificación de identidad (INE/pasaporte)
  3. Regresar al admin → clic "Actualizar estado"
  4. Estado cambia a "Verificada" (badge verde)

3.5 Configurar Comisiones (Sección 3)

  1. Comisión Nvito (%): Default 15%, mínimo 3.6% (costo base de Stripe)
  2. Máximo por contribución: Límite por invitado (default $50,000 MXN)
  3. Máximo del fondo: Tope total (default $500,000 MXN)
  4. Clic "Guardar comisiones"

3.6 Checklist Pre-Publicación

Antes de publicar el evento, verificar:

  • ✓ Los 3 pasos están en verde (3/3 completados)
  • ✓ Status card dice "Listo para recibir contribuciones"
  • ✓ Preview muestra mensaje y barra de progreso correctamente
  • ✓ Comisiones y límites configurados según el paquete del cliente

4. Estados de la Cuenta Connect

EstadoSignificadoAcción
Sin cuentaNo se ha creadoCrear con datos del cliente
Onboarding pendienteCreada, falta verificaciónCompletar en Stripe
RestringidaStripe requiere documentosRevisar requisitos y completar
VerificadaLista para recibir pagosNinguna — contribuciones activas
DeshabilitadaStripe rechazó la cuentaContactar soporte o archivar y crear nueva
CompletadaEvento terminóAutomático — disputes activos 120 días
Archivada6+ meses post-eventoPII anonimizado, stripeAccountId se mantiene

5. Flujo de Contribución del Invitado

Conversión de Unidades (crítico)

Punto del flujoUnidadEjemplo
UI del invitado (selecciona monto)Pesos$100
DTO al API (amount)Centavos10,000
Validaciones backendCentavos10,000 vs maxContribution
Payment.amount en BDPesos (Decimal)100.00
Stripe PaymentIntent.amountCentavos10,000
cashFundCurrent en BDCentavosincrementado por 10,000
API mobile responsePesos100.00 (convertido /100)

Regla de oro

La API mobile convierte TODO a pesos antes de enviar al cliente. El backend valida TODO en centavos. Stripe recibe TODO en centavos. Payment.amount se almacena en pesos.


6. Webhooks

Evento StripeEndpointAcción
payment_intent.succeeded/webhooks/stripeMarca SUCCEEDED + incrementa cashFundCurrent
payment_intent.payment_failed/webhooks/stripeMarca FAILED
charge.dispute.created/webhooks/stripeDecrementa cashFundCurrent + marca REFUNDED
charge.refunded/webhooks/stripeDecrementa cashFundCurrent + marca REFUNDED
account.updated/webhooks/stripe-connectSincroniza estado de cuenta Connect

7. Troubleshooting

La cuenta queda en "Restringida"

  1. Revisar requisitos pendientes en la sección 2
  2. Clic "Completar verificación" → subir documentos faltantes
  3. Clic "Actualizar estado"

El invitado ve "Este fondo no está disponible aún"

Causas: cuenta Connect no verificada, evento no ACTIVE, o cashFund desactivado.

Error al crear la cuenta

Verificar: email válido y único, RFC formato correcto, evento no tiene ya una cuenta activa.

Cambio de beneficiario

Solo un Super Admin puede archivar la cuenta actual (botón "Cambiar cuenta") y crear una nueva. Los pagos anteriores se conservan vinculados a la cuenta original.


8. Protecciones Financieras

ProtecciónImplementación
cashFundCurrent inmutableSolo el webhook y confirm pueden modificarlo. El admin no puede resetearlo
Desactivar preserva datosAl desactivar el fondo, los datos financieros y la cuenta Connect se conservan
Confirmación con fondosSi hay fondos recaudados, se pide confirmación antes de desactivar
Meta no menor que recaudadoEl backend rechaza cashFundGoal menor que cashFundCurrent
Eliminación protegidaNo se puede eliminar un evento con pagos PROCESSING
Auto-desactivaciónSi Stripe deshabilita la cuenta, cashFundEnabled se desactiva automáticamente
Disputes decrementanUn chargeback decrementa cashFundCurrent (atómico en transacción)

9. Archivos Clave

ArchivoResponsabilidad
stripe-connect.service.tsGestión cuentas Connect (crear, sync, archivar, verificar)
stripe-connect.controller.tsEndpoints admin + archivo (Super Admin)
payments.service.tscreateCashFundIntent con Connect obligatorio
payments-webhook.controller.tsEndpoints webhook (Stripe + Connect)
stripe-webhook.service.tsHandlers de payment_intent, charge.dispute, charge.refunded
stripe.provider.tsWrapper Stripe SDK (métodos Connect)
gift-registry.service.tsProtección de cashFundCurrent contra escritura manual
Esta pagina fue util?