El error 403 en los webhooks puede deberse principalmente a dos factores:
- Que no tengas desactivado el middleware del CSRF
- Que no tengas configurada bien la variable de entorno de los webhooks
Desactivar CSRF para las rutas del webhook
Este tema lo tienes que hacer en la ruta de App\Http\Middleware\VerifyCsrfToken
Allí tienes que crear una propiedad "protected":
protected $except = [
'stripe/*',
];
Configurar variables de entorno
En tu archivo .env necesitas indicar la variable de entorno del webhook. Esa variable tendrá esta forma en tu archivo .env:
STRIPE_WEBHOOK_SECRET=whsec_vxxxxxyyyyzzzz
El valor de la variable lo tienes que sacar desde el panel de Stripe, en la pantalla de configuración del webhook, tienes que pulsar el enlace que pone "Revelar" que está situado al lado de la etiqueta "Secreto de firma". La copias en tu archivo .env y listo!
Rutas incorrectas
Tienes por supuesto que verificar que la ruta a la que estás llevando tu webhook sea la correcta. Al crear el webhook en stripe tienes que poner la URL acabada en "/stripe/webhook", algo como:
http://example.com/stripe/webhook
Aunque no creo que sea problema de la URL, ya que si es un 403 más tiene pinta de ser por los dos problemas comentados antes.
Versión del API
Ah! otra cosa que podría dar problemas sería la versión del API que tengas configurado en el webhook. Habría que revisar que sea la correcta, que estés usando en tu versión de Cashier. Consulta la documentación para definir la versión del API que se debe usar en el webhook.