El proceso para activar los webhooks en Homestead requiere unos cuantos pasos, pero es bastante sencillo, porque la mayoría son simples comandos que debes lanzar entrando en la máquina virtual.
Haces SSH contra la máquina virtual
Te metes en la carpeta donde tienes homestead instalado y lanzas el comando para conectarte por ssh con la máquina virtual.
cd Homestead
vagrant ssh
Por supuesto, la máquina virtual debe estar iniciada y ejecutándose. Si no, tienes que hacer antes el arranque de la máquina con vagrant.
vagrant up
Abres un túnel ssh con Ngrok
Luego tienes que abrir una conexión por túnel ssh con el sitio web que estás desarrollando, para lo cual tienes ngrok instalado ya de casa en Homestead.
El comando para levantar el túnel ssh es este:
share example.test
Por supuesto tendrás que cambiar "example.test" por el nombre del sitio que quieras que se levante a través del túnel ssh. Ese nombre del sitio es el mismo que diste de alta en la configuración de Homestead (archivo "Homestead.yaml" que tienes en la carpeta "Homestead")
Configuras el authoken de Ngrok
Aquí podría pedirte que des de alta un "authoken" que tienes que obtener en el panel de control de tu usuario de Ngrok. Si es así te saldrá un mensaje con este texto:
You must signup for ngrok and add your authtoken to perform this operation.
Si no has hecho este proceso antes y te pide que crees ese authtoken, el proceso es bastante sencillo.
Te das de alta un usuario en el servicio de Ngrok:
https://dashboard.ngrok.com/signup
Una vez creado el usuario apareces en el panel (dashboard) de Ngrok. Aquí tienes que ir a la sección "Your Authtoken", que encuentras en el navegador vertical de la parte izquierda.
Dentro de la página que apareces, encuentras escrito el Authtoken y el procedimiento para configurarlo.
Escribir el Authtoken en la configuración de Ngrok de Homestead
Aquí tienes que estar dentro de la máquina Homestead (comando vagrant ssh
). Entonces te metes en la carpeta ".ngrok2", que está en el directorio donde apareces cuando haces la conexión ssh.
cd ~/.ngrok2
Aquí debes encontrar un archivo llamado "ngrok.yml". Tendrás que editar el archivo con tu editor de línea de comandos preferido.
vim ngrok.yml
O si lo prefieres...
nano ngrok.yml
Luego tienes que introducir en el archivo este código:
authtoken: XXXX_ESTE_ES_TU_AUTHTOKEN
Lógicamente, pondrás el valor de Authtoken que has copiado de la página de Ngrok. En el propio dashboard de Ngrok te dan el código exacto que debes colocar en el ngrok.yml.
Una vez que has configurado el authtoken ya no te debería dar problemas hacer el túnel ssh
share example.test
Al levantarse el túnel SSH con Ngrok nos mostrará la URL donde está el proyecto que estamos compartiendo públicamente.
La dirección pública será algo como esto:
http://0000.000.000.000.ngrok.io
Crear el webhook en el panel de stripe con la URL del túnel SSH
Ahora tienes que hacer que el dashboard de stripe (el que usas para tu aplicación en modo "datos de prueba") se entere de la url donde está el webhook de Laravel configurado con Cashier.
La manera más cómoda de hacer esto es mediante un comando de Artisan. Ese comando Artisan le tienes que indicar cuál es la URL donde se encuentra público tu sitio web, es decir, la URL que se ha generado al levantar el túnel SSH.
php artisan cashier:webhook --url "http://0000.000.000.000.ngrok.io/stripe/webhook"
Ojo en el anterior comando, porque vas a tener que sustituir http://0000.000.000.000.ngrok.io por la URL que se ha generado al compartir tu proyecto con el túnel SSH.
Copiar la clave del webhook en el archivo .env
Te queda un último paso que consiste en escribir la clave secreta del webhook en el archivo de configuración de tu aplicación, que en laravel está en el .env.
Para obtener ese "secreto de firma" del webhook tienes que hacer estos pasos:
- Entrar en el dashobard de stripe
- Ir a la zona de desarrolladores (el enlace lo tienen en la esquina superior derecha actualmente)
- Ir a la sección "Webhooks", que puedes entrar con el navegador vertical de la izquierda
- Abir las propiedades del webhook que se ha creado
- Pulsar el enlace "Revelar" que hay al lado del texto "Secreto de firma"
Ese código lo tienes que pegar en tu aplicación de Laravel, en el .env, creando una variable como esta:
STRIPE_WEBHOOK_SECRET=whsec__tu_webhook_stripe_secreto_de_firma
Probar el webhook
Una vez tienes todo esto puedes probar el webhook con el enlace "Enviar un evento de prueba". Todo deberia ir bien.
Si va bien, entonces simplemente vas a tener que experimentar ya tu propia aplicación, para ver si se comunica bien con stripe.
Ten en cuenta que el túnel ssh tiene una duración limitada, si es que usas la parte gratuita de ngrok, por lo que este proceso de crear el webhook lo tienes que hacer cada vez que caduque la URL de tu túnel SSH.
Si no te funciona alguna cosa, tendrías que ver las recomendaciones de esta página Cómo solucionar un error 403 en los webhooks de Stripe usando Laravel Cashier
Espero que tengas éxito en tu proyecto!!