如何为Stripe活跃订阅中的新增订单项设置免费试用期?
解决Stripe活跃订阅新增订单项并设置单独试用期的方案
核心逻辑说明
Stripe订单项本身没有独立的trail_end字段,后台面板给计划设置的试用期仅对新创建的订阅生效,对已活跃订阅的新增项不产生作用。要实现单个订单项的免费试用,需要结合发票项或优惠券逻辑,同时保证原有订阅项不受影响。
方法一:预生成发票项+订阅锚点配置(精确控制试用时长)
适合需要指定固定试用周期(如30天)的场景:
- 先创建待处理发票项,指定试用期间的免费周期,金额设为0,绑定到目标订阅;
- 更新订阅时添加正式订单项,设置
billing_cycle_anchor为试用结束时间,确保试用后自动按正常费率计费,同时关闭 prorate 避免额外费用。
代码示例(Node.js):
const stripe = require('stripe')('your_secret_key'); // 1. 创建试用期间的免费发票项 await stripe.invoiceItems.create({ customer: 'cus_XXXXXX', subscription: 'sub_XXXXXX', price: 'price_XXXXXX', // 新增项对应的计划价格ID quantity: 1, period: { start: Math.floor(Date.now() / 1000), end: Math.floor(Date.now() / 1000) + 30 * 24 * 60 * 60 // 30天试用周期 }, amount: 0, // 试用阶段免费 }); // 2. 更新订阅,添加正式订单项并设置计费锚点 await stripe.subscriptions.update( 'sub_XXXXXX', { items: [ { price: 'price_XXXXXX', quantity: 1, billing_cycle_anchor: Math.floor(Date.now() / 1000) + 30 * 24 * 60 * 60 } ], proration_behavior: 'none', // 避免产生变更计费 payment_behavior: 'default_incomplete' } );
方法二:定向优惠券覆盖试用费用(快速实现短期试用)
适合快速配置试用的场景:
- 在Stripe后台创建一次性优惠券,折扣力度设为覆盖新增项试用期间的全部费用,设置有效期为试用时长;
- 更新订阅添加新订单项时,将优惠券绑定到订阅,并通过
applies_to指定仅对新增项的计划价格生效,确保不影响原有订阅项计费。
关键注意事项
- 后台计划的试用期规则仅适用于新订阅,已活跃订阅的新增项必须手动配置;
- 所有操作需设置
proration_behavior: 'none',防止订阅变更产生额外 prorate 费用; - 试用结束后,确保订单项的计费锚点正确,或优惠券到期后自动触发正常计费流程。
内容的提问来源于stack exchange,提问作者Vipul Ram
相关产品推荐
相关产品推荐

