You don’t have much to do really if you don’t want to handle any more webhooks than those that Cashier handles out of the box. If you have:
- Updated the webhook secret key in the
- Enabled the webhooks in Stripe
- Excluded the webhooks path in
then they should simply work.
Cashier automatically takes care of the webhooks listed in the Laravel documentation. You, the developer, do not need to write any code at all.
If you want to verify if those webhooks work (and are being handled by Cashier as expected in your local dev. environment) then you should use the Stripe CLI. For Windows, just download the
.exe file and call it from your
cmd. Login to your Stripe account from the CLI and then fire the following command to receive and forward the webhook events to your app:
stripe listen --forward-to 127.0.0.1:8000/stripe/webhook
You should see
 whenever you manually trigger a test webhook event that is received by your app.
 POST http://127.0.0.1:8000/stripe/webhook [evt_1MYSlRSANpTgXVl]
If you are not getting status 200 then check if the endpoint is properly set up.
You can start by checking your routes list
php artisan route:list. See if the stripe/webhook route is present.
POST stripe/webhook ...... cashier.webhook › Laravel\Cashier › WebhookController@handleWebhook
if not, you may want to clear cache
php artisan optimize
If you want to verify that Cashier is actually handling webhook events, you can try the following steps:
subscriptions table (created by Cashier) see if you have a past subscription that is still
incomplete. This status will be see in
stripe_status column. Note down its
id & the
stripe_id. Now look for a subscription matching this
stripe_id in your Stripe Dashboard.
Click on one of them and look for the ID in the details page:
If you Cancel this subscription, it will generate event
customer.subscription.updated (in addition to few other events) and you should see the row deleted from the
subscriptions table. It will also delete the related row from the