如何在Stripe中区分订阅取消与试用取消状态?
区分Stripe中试用结束与订阅结束触发的
customer.subscription.deleted事件 要区分这两种触发场景,核心是解析webhook返回的Subscription对象里的关键字段,以下是具体判断逻辑:
查看
subscription.cancel_details.reason字段- 如果值为
"trial_end",说明是免费试用到期后自动取消订阅触发的事件; - 如果值为
"cancel_at_period_end",则是订阅周期结束(无自动扣款)导致的订阅删除,这种情况一般是用户提前设置了到期不续费,或者订阅本身是无自动续费的一次性周期。
- 如果值为
对比时间戳辅助验证
- 检查
subscription.trial_end和subscription.status_transitions.canceled_at的时间是否一致:如果一致,可确认是试用结束触发; - 如果
subscription.current_period_end和canceled_at时间一致,则是订阅正常周期结束后触发的删除。
- 检查
额外验证订阅是否存在试用阶段
查看subscription.trial_start和subscription.trial_end是否有有效值(非null),如果这两个字段存在,说明该订阅曾设置过试用,结合前面的字段判断更准确。
举个简单的判断逻辑伪代码:
def determine_deletion_reason(subscription): cancel_reason = subscription.get('cancel_details', {}).get('reason') if cancel_reason == 'trial_end': return "试用结束自动取消" elif cancel_reason == 'cancel_at_period_end': return "订阅周期结束无续费" # 其他情况可补充判断 return "其他原因取消"
内容的提问来源于stack exchange,提问作者Harshil Sharma
相关产品推荐
相关产品推荐

