En el panel de Stripe (Developers → Webhooks), crea un destino que envíe eventos a esta aplicación. Humano usa Laravel Cashier y controladores propios para suscripciones, facturas y comisiones de afiliados.
Método: POST
Ruta en tu sitio /stripe/webhook
URL completa (sustituye el dominio por el público de tu entorno, alineado con APP_URL):
https://wapify.me/stripe/webhook
En staging y producción Stripe debe poder llamar a tu URL por HTTPS.
Si tu webhook solo tiene suscripciones e invoice.payment_succeeded, faltan eventos necesarios para transferencias externas y actualizaciones de estado. Sigue estos pasos en producción (modo Live):
Lista mínima recomendada (Listening to)
Customer
customer.subscription.createdcustomer.subscription.updatedcustomer.subscription.deletedInvoice
invoice.paidinvoice.payment_succeededinvoice.updatedinvoice.payment_failed (También recomendados)invoice.payment_succeeded no cubre todos los cobros. Humano usa invoice.paid para marcar la factura como cobrada cuando Stripe registra el pago por transferencia externa u otros métodos sin cargo ch_.
| Tipo de cobro | invoice.payment_succeeded | invoice.paid |
|---|---|---|
| Tarjeta / cargo normal (ch_) | Sí | Sí |
| Transferencia externa marcada en Stripe | A veces no | Sí |
invoice.updated actúa como respaldo: cuando la factura pasa a paid, void o uncollectible, Humano refresca staging e importa al core.
Selecciona como mínimo los siguientes. Cubren la sincronización de Cashier, tu lógica de facturas y cambios de plan:
customer.subscription.createdcustomer.subscription.updatedcustomer.subscription.deletedinvoice.paidinvoice.payment_succeededinvoice.updatedinvoice.payment_failedTambién recomendados
customer.updatedpayment_method.automatically_updatedSi la app crea sesiones de Stripe Checkout (suscripciones o registro con pago), añade también:
checkout.session.completedHumano ejecuta tareas programadas que sincronizan facturas y crean pagos faltantes. No sustituyen al webhook, pero corrigen desfases en minutos:
stripe:sync-invoices — cada 10 min (refresca invoice_syncs desde la API)invoice-syncs:import-stripe --reconcile — cada 10 min (actualiza balance y estado en invoices)invoices:reconcile-stripe-collected-payments — :20 y :50 (crea pagos faltantes)Stripe no puede llegar a https://*.test desde internet. Usa Stripe CLI y el signing secret que muestra (por ejemplo en STRIPE_WEBHOOK_SECRET):
stripe listen --forward-to https://wapify.me/stripe/webhook
Si usas cuentas Stripe distintas por categoría, configura un endpoint por categoría. Valores permitidos: mentoring, mailer, prospecting, hosting, support. Ejemplo:
https://wapify.me/stripe/webhook/mailer
Usa “Your account” salvo que operes como plataforma Stripe Connect y recibas eventos de cuentas conectadas. Elige una versión de API compatible con tu SDK; si el payload difiere, alinea la versión del dashboard con tu proyecto.
Tras crear el endpoint, copia el signing secret en STRIPE_WEBHOOK_SECRET (o en stripe_accounts.{categoría}.webhook_secret para URLs por categoría). La ruta está excluida de verificación CSRF.