Laravel Cashier对接Stripe本地Webhook异常,已用Stripe CLI仍报错
解决Laravel Cashier本地测试Stripe Webhook的问题
报错原因
php artisan cashier:webhook 命令的作用是直接在Stripe后台创建公网可访问的Webhook端点,本地环境(如http://localhost:8000)不符合公网可访问的要求,因此即使你登录了Stripe CLI,直接执行该命令仍会触发错误。
正确本地测试步骤
1. 启动本地Laravel服务
确保你的Laravel应用正在本地运行:
php artisan serve
默认本地访问地址为http://localhost:8000,如果修改了端口请对应调整后续命令。
2. 用Stripe CLI转发Webhook事件
Stripe CLI的核心作用就是把Stripe的测试事件转发到本地服务,执行以下命令:
stripe listen --forward-to localhost:8000/stripe/webhook
- 命令执行后,终端会输出一个Webhook密钥(格式为
whsec_xxxxxx),请复制保存。 - 注意:
/stripe/webhook是Laravel Cashier默认的Webhook端点路径,如果你自定义了路径,请替换为对应值。
3. 配置Laravel环境变量
在项目根目录的.env文件中添加刚才获取的Webhook密钥:
STRIPE_WEBHOOK_SECRET=whsec_xxxxxx
4. 测试Webhook事件
用Stripe CLI发送测试事件到本地服务,比如测试支付成功事件:
stripe trigger payment_intent.succeeded
此时你的本地Laravel应用会收到该事件,Cashier会自动处理对应的业务逻辑(如更新订单状态、生成收据等)。
备选方案:用公网代理暴露本地服务(不推荐本地测试用)
如果一定要使用php artisan cashier:webhook命令创建端点,可以用ngrok之类的工具把本地服务暴露为公网URL:
- 启动ngrok:
ngrok http 8000,得到公网地址(如https://abc123.ngrok.io) - 执行Cashier命令并指定公网URL:
php artisan cashier:webhook --url="https://abc123.ngrok.io/stripe/webhook"
这种方法需要把本地服务暴露到公网,仅适合临时测试,日常本地开发更推荐用Stripe CLI转发。
内容的提问来源于stack exchange,提问作者Shuvo Ahmed
相关产品推荐
相关产品推荐

