Verify if Cashier Webhooks Work in Your Local Development Setup
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 .envfile
- Enabled the webhooks in Stripe
- Excluded the webhooks path in VerifyCsrfToken
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/webhookYou should see [200] whenever you manually trigger a test webhook event that is received by your app.
Something like:
[200] 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@handleWebhookif not, you may want to clear cache
php artisan optimizeIf you want to verify that Cashier is actually handling webhook events, you can try the following steps:
In your 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 subscription_items table.