Stripe payments 订阅更改立即收费
我们正在对客户的订阅使用条带支付处理。当用户改变计划时,我们希望他们立即按比例收取费用。当计划具有不同的计费间隔时,Stripe会自动执行此操作,但当在具有相同间隔的计划之间进行更改时,Stripe会将付款延迟到下一个计费周期 我们现在处理这个问题的方法是在更新订阅后创建一个发票,但是如果账单失败,我们需要执行回滚Stripe payments 订阅更改立即收费,stripe-payments,Stripe Payments,我们正在对客户的订阅使用条带支付处理。当用户改变计划时,我们希望他们立即按比例收取费用。当计划具有不同的计费间隔时,Stripe会自动执行此操作,但当在具有相同间隔的计划之间进行更改时,Stripe会将付款延迟到下一个计费周期 我们现在处理这个问题的方法是在更新订阅后创建一个发票,但是如果账单失败,我们需要执行回滚 stripe.subscriptions.update(/* change plan */); if (plans_have_different_billing_intervals)
stripe.subscriptions.update(/* change plan */);
if (plans_have_different_billing_intervals) {
try {
stripe.invoices.create(/* for all pending charges */);
} catch (err) {
/* rollback subscription to old plan */
}
}
总的来说,这感觉是错误和复杂的。是否有一种更简单/更干净的方法来实现这一点,我们没有看到?您可以在Stripe中使用。创建发票后,您可以立即对发票收费(立即开具发票)。如果发票付款失败,您可以使用webhook回滚到旧帐户
有关条带订阅的更多信息,请参阅本指南:要为数量或订阅计划的更改付款,您需要执行以下操作:
从开发的角度来看,将订阅标记为未付比回滚或冻结(然后解冻)订阅的某些部分更容易。但是你会因为禁止客户使用他们已经付费的服务(他们现有的订阅服务)而受到处罚因为他们无法支付额外服务的费用。在更新订阅时,您可以使用
计费周期\u锚定
设置为立即
,强制其更改计费周期,从而始终立即向客户收费。我个人认为这更有意义。这也适用于按比例分配
await stripe.subscriptions.update(subscription.id, {
billing_cycle_anchor: 'now',
items: [{ id: itemId, plan: planId }]
});
要在用户升级时立即按比例向用户收取差价,请在修改用户订阅时使用该选项。从文件中引用: 。。。为了始终立即开具按比例分配的发票,请始终传递发票 Python示例:
stripe.Subscription.modify(
订阅id,
项目=[{
“id”:项目id,
“计划”:计划id,
}],
#立即按比例收取费用。
按比例分配,
)
当用户更改为更昂贵的计划时,这会立即按比例向用户收取费用。但是,当用户更改为更便宜的计划时,用户将获得按比例分配的积分,从而使用户的下一张账单按比例分配的金额更便宜
情节
在这些场景中,假设计费日期是每月的第一天。进一步假设该月有30天
- 场景1:用户订阅了每月5美元的计划。用户决定在每月22日升级至30美元计划。当月剩余8天,5美元计划的未使用部分约为
,30美元计划的按比例金额为(8/30)*5=$1.33
。因此,用户将立即被收取(8/30)*30=$8.00
8.00-1.33=$6.67
- 场景2:用户订阅了每月30美元的计划。用户决定在每月22日将降级为5美元计划。当月剩余8天,30美元计划的未使用部分约为
,5美元计划的按比例金额为(8/30)*30=$8.00
。在这种情况下,不会向用户收费,但用户的下一张账单(在下一个账单日期)将减少(8/30)*5=$1.33
8.00-1.33=$6.67
#dearsina回答中的第一步:修改订阅。
修改的订阅=stripe.subscription.modify(
订阅id,
项目=[{
“id”:项目id,
“计划”:计划id,
}],
)
#步骤2和3:创建和检索发票。
发票=stripe.invoice.create(客户=modified_subscription.customer)
#步骤4和5:最终确定并支付发票。
stripe.Invoice.pay(Invoice.id)
但是,当您可以在一个API调用中完成所有步骤时,为什么要这样做呢?唯一的解决方案是使用它来知道要向它们收费多少,然后预先向它们收费,然后在禁用按比例升级的情况下才进行升级。我认为这是最简单的方法。谢谢,它很有魅力。嗨,我怎样才能达到你描述的#2选择?我想将订阅回滚到最新的活动状态。您需要将他们的订阅(再次)更新回付款人之前的状态