mod.payment-connections — Conexiones de pago¶
Community · Categoría core (siempre activo)
Qué hace¶
Conecta varias cuentas de pago en modo solo lectura (Stripe con clave restringida, y lectores de PayPal y WooCommerce) y reconcilia sus suscripciones activas contra los usuarios de Didacta por email. Sobre esa base construye:
- El catálogo de tiers (nivel manual asignado por el admin y/o derivado del pago), que otros módulos consumen (drip, grupos de acceso).
- Un dashboard de control de suscripciones materializado por un worker de sincronización, con enlaces de renovación y emails de recordatorio.
- El espejo de pedidos de tiendas externas (WooCommerce, con webhook firmado) y reglas de clasificación de accesos (
LIFETIME,SUBSCRIPTION,TIMED…), con avisos de caducidad. - La invitación en bloque de suscriptores que aún no están en Didacta.
Qué NO es¶
No crea cobros: para vender están mod.billing y mod.subscriptions. Cancelar es un deep-link al portal de Stripe — el modelo es 100% read-only sobre las cuentas conectadas.
Cómo funciona¶
- El match es por email normalizado (lowercase + trim) en ambos lados; cuentan como activas
active,trialingypast_due. - El tier efectivo se resuelve: manual → derivado del pago → «Desconocido». Los cambios publican
payment_connections.user_tier.changed, quemod.access-groupsconsume para reconciliar membresías. - Las claves API se guardan cifradas por conexión; jamás salen en un GET.
- El dashboard lee solo la tabla materializada — nunca consulta a los proveedores en vivo.
Dependencias¶
Ninguna.
Modelo de datos¶
mod_payment_connections_connection · _log · _tier · _user_tier · _subscriber (snapshot materializado) · _order (espejo de pedidos con entitlement y caducidad) · _sync_history.
API¶
Prefijo /modules/payment-connections (super_admin salvo el autoservicio me/*). Detalle en Referencia → Pagos.
Eventos¶
Emite: payment_connections.user_tier.changed. No consume.
Configuración¶
Sin variables propias: credenciales, secreto del webhook Woo, plantilla de renovación y URL del portal de cancelación son por tenant, cifradas en base de datos. Scopes mínimos de la clave restringida de Stripe: Customers = Read + Subscriptions = Read (opcional Invoices = Read). Cron de sincronización: PAYMENT_SUBSCRIBERS_SYNC_CRON.