You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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事件。可以临时在处理方法里加日志来验证事件是否到达服务器:
      public function handleCustomerSubscriptionDeleted(array $payload)
      {
          \Illuminate\Support\Facades\Log::info('收到订阅删除事件', $payload);
          parent::handleCustomerSubscriptionDeleted($payload);
      }
      
      取消订阅后查看Laravel的日志,就能判断事件是否成功到达并被处理。
  • 确认测试订阅的状态
    只有当订阅处于活跃状态时,手动取消才会触发customer.subscription.deleted事件。如果你的测试订阅已经过期、暂停,或者是免费订阅取消,可能不会触发这个事件,这点要注意。

内容的提问来源于stack exchange,提问作者Mladen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:02:10