Saltearse al contenido

Billing y suscripciones

Bongga cobra a cada tenant una suscripción de plataforma desde una única cuenta de Mercado Pago del operador. Por BYOK, la IA y el WhatsApp/Meta los paga el cliente directo; Bongga solo cobra la suscripción. El sistema de registro del billing es el control-plane.

  • Proveedor de pago como Strategy (SubscriptionProvider): Mercado Pago hoy, swappable a Stripe/Paddle mañana sin tocar el caso de uso.
  • Mercado Pago preapproval (suscripción recurrente). El pagador autoriza en el init_point de MP — nunca tocamos datos de tarjeta (sin PCI).
  • Bold se mantiene solo para pagos únicos (no tiene suscripciones).
  • Webhook firmado: HMAC-SHA256 del x-signature de MP (comparación en tiempo constante); falla cerrado si no hay secret.
  • Anti-replay: ventana de 5 minutos sobre el timestamp firmado.
  • Idempotencia: ledger cp_subscription_events con UNIQUE(provider, external_event_id) + X-Idempotency-Key al crear. Un webhook repetido no re-aplica estado.
  • No se confía en el body: el recurso se re-consulta a la API de MP.
  • Validación de monto/moneda: un pago solo marca paid si es approved, en COP y su monto coincide con el precio del plan. Mismatch se registra pero no da acceso.
  • Auditoría de cada transición.

En la sección Suscripciones, el operador puede por workspace:

  • Crear suscripción (abre el checkout de Mercado Pago).
  • Sincronizar estado con Mercado Pago (reconciliación).
  • Cancelar la suscripción.
  • Ver el historial de eventos/pagos.

Variables de entorno del control-plane: MERCADOPAGO_ACCESS_TOKEN y MERCADOPAGO_WEBHOOK_SECRET. Sin ellas, el módulo queda deshabilitado sin romper nada. Webhook a configurar en MP: /api/v1/webhooks/mercadopago.