Python 立即对订阅升级收费,但不要';不要对降级收费或退款

Python 立即对订阅升级收费,但不要';不要对降级收费或退款,python,stripe-payments,Python,Stripe Payments,在我的订阅服务中,计费日期始终为每月的第一天。有两个计划-10美元/月计划和20美元/月计划 当用户从10美元/月升级到20美元/月时,我想立即向用户收取按比例分摊的20美元/月计划的费用,并退还10美元/月计划中未使用的部分。i、 e.立即收取的金额=[(月内剩余天数/月内天数)*20]-[(月内剩余天数/月内天数)*10] 相反,当用户从20美元/月降级到10美元/月时,降级应该不收费,也不退款 如何实现这种订阅更改 我尝试了下面的代码,它似乎可以工作。但我不确定它是否正确,或者是否有更好的

在我的订阅服务中,计费日期始终为每月的第一天。有两个计划-10美元/月计划和20美元/月计划

当用户从10美元/月升级到20美元/月时,我想立即向用户收取按比例分摊的20美元/月计划的费用,并退还10美元/月计划中未使用的部分。i、 e.
立即收取的金额=[(月内剩余天数/月内天数)*20]-[(月内剩余天数/月内天数)*10]

相反,当用户从20美元/月降级到10美元/月时,降级应该不收费,也不退款

如何实现这种订阅更改

我尝试了下面的代码,它似乎可以工作。但我不确定它是否正确,或者是否有更好的方法来实现这一点

如果用户正在升级():
stripe.Subscription.modify(
订阅id,
在周期结束时取消周期=假,
计费周期(未更改),,
项目=[{
“id”:项目id,
“计划”:计划id,
}],

按比例分配(proration)_behavior='always_invoice',#对我来说似乎非常合理。Stripe会自动按比例分配变化,在旧计划中退还未使用的时间,在新计划中收取相同时间的费用。这基本上是您的公式(注意,它是按秒计算的,而不是按天计算的)而
user\u是什么呢?\u升级
会做什么。如果你想让计划更改不需要其他调整/退款/费用,那么
proration\u behavior='none'
会做这件事。@karlekko有没有办法在升级时禁用对旧计划上未使用时间的退款?@Flux没有,如果你想按比例分配,那么就使用我会计算客户在新计划的剩余时间里欠你多少钱,减去他们已经支付的原始计划中你欠他们的钱。计算出来的数字应该已经和你想要的完全一样了。