Stripe手动取消订阅是否触发Webhook?测试模式下无触发问题咨询
关于Stripe订阅取消的Webhook问题解答
问题1:手动在Stripe控制台取消订阅,Webhook会收到通知吗?
当然会!当你在Stripe控制台(不管是测试还是生产模式)手动取消活跃状态的订阅时,Stripe默认会触发customer.subscription.deleted事件。只要你的Webhook端点在Stripe控制台中正确配置,并且勾选了这个事件类型,你的服务器就会收到对应的通知。
问题2:测试模式下Laravel Cashier Webhook未触发,订阅数据未更新的排查方案
既然你说其他Webhook测试正常,那问题大概率出在订阅取消事件的特定配置或处理逻辑上,给你几个针对性的排查步骤:
检查Stripe控制台的事件订阅列表
登录Stripe测试模式后台,进入Webhook设置页面,确认你配置的端点已经勾选了customer.subscription.deleted事件。很多时候我们会默认勾选付款相关的事件,但容易漏掉订阅删除的事件,这就会导致只有取消订阅的通知收不到。查看Stripe事件日志的状态
去Stripe控制台的「事件」页面,筛选测试模式下的customer.subscription.deleted事件,看看这个事件的发送状态:- 如果显示「失败」,查看错误详情——比如是否有请求超时、签名验证失败的提示,这些都会导致服务器没正确接收事件;
- 如果根本找不到这个事件,那说明取消订阅时没触发它,这时要确认你取消的是活跃状态的测试订阅(已过期/暂停的订阅取消不会触发这个事件)。
验证Laravel Cashier的Webhook路由与处理逻辑
- 确保Cashier的Webhook路由(默认是
stripe/webhook)没有被CSRF中间件拦截。Cashier默认已经把这个路由排除在CSRF验证外,但如果是你自定义的路由,一定要在app/Http/Middleware/VerifyCsrfToken.php的$except数组里添加它; - 如果你自定义了Webhook处理类,检查是否正确处理了
customer.subscription.deleted事件。可以临时在处理方法里加日志来验证事件是否到达服务器:
取消订阅后查看Laravel的日志,就能判断事件是否成功到达并被处理。public function handleCustomerSubscriptionDeleted(array $payload) { \Illuminate\Support\Facades\Log::info('收到订阅删除事件', $payload); parent::handleCustomerSubscriptionDeleted($payload); }
- 确保Cashier的Webhook路由(默认是
确认测试订阅的状态
只有当订阅处于活跃状态时,手动取消才会触发customer.subscription.deleted事件。如果你的测试订阅已经过期、暂停,或者是免费订阅取消,可能不会触发这个事件,这点要注意。
内容的提问来源于stack exchange,提问作者Mladen
相关产品推荐
相关产品推荐

