Laravel 9 Cashier对接Stripe时试用天数显示异常问题排查
问题原因分析
1. Stripe显示的是「剩余完整天数」而非传入的试用天数
Laravel Cashier的trialDays($days)方法是将试用结束时间设置为当前时间 + $days天,但Stripe在结账页面显示的是从用户打开页面的时刻到试用结束时间的剩余完整24小时周期数。比如:
- 设置14天试用时,若当前是10月1日14:00,试用结束时间为10月15日14:00;如果用户在10月1日15:00打开结账页面,此时距离结束时间还有13天23小时,Stripe会向下取整显示13天。
- 同理,设置20天时,若当前时间到结束时间的剩余时长不足20个完整24小时,Stripe就会显示19天。
2. Cashier对短周期试用的兼容处理
当传入trialDays(0)、1或2时,Cashier和Stripe的规则会共同导致显示异常:
- Stripe不允许试用周期为0天(即立即结束),Cashier会自动将0天试用调整为1天;
- 对于1-2天的设置,由于当前时间到结束时间的剩余时长可能不足完整的1/2个24小时周期,Stripe同样会向下取整显示为1天。
3. 时区差异的潜在影响
如果应用时区与Stripe后台设置的时区不一致,也可能导致天数计算出现细微偏差,但这种情况的影响通常远小于前两点。
内容的提问来源于stack exchange,提问作者parastoo
相关产品推荐
相关产品推荐

