python - 立即收取订阅升级费用,但不收取降级费用或退款
问题描述
在我的订阅服务中,计费日期始终是每月的第一天。有两个计划 - 10 美元/月计划和 20 美元/月计划。
当用户从 10 美元/月升级到 20 美元/月时,我想立即向用户收取按比例分配的 20 美元/月计划的费用,并退还 10 美元/月计划中未使用的部分。即amount_charged_immediately = [(days_left_in_month / days_in_month) * 20] - [(days_left_in_month / days_in_month) * 10]
。
相反,当用户从 20 美元/月降级到 10 美元/月时,应该不收取降级费用,也不会退款。
如何实现这种订阅更改?
我尝试了下面的代码,它似乎可以工作。但我不确定它是否正确,或者是否有更好的方法来实现这一点。
if user_is_upgrading():
stripe.Subscription.modify(
subscription_id,
cancel_at_period_end=False,
billing_cycle_anchor='unchanged',
items=[{
'id': item_id,
'plan': plan_id,
}],
proration_behavior='always_invoice', # <- ATTENTION.
)
elif user_is_downgrading():
stripe.Subscription.modify(
subscription_id,
cancel_at_period_end=False,
billing_cycle_anchor='unchanged',
items=[{
'id': item_id,
'plan': plan_id,
}],
proration_behavior='none', # <- ATTENTION.
)
解决方案
推荐阅读
- ruby-on-rails - 范围内的随机数
- c - 为什么这个程序没有段错误?
- swift - Swift DateTime Formatter 返回具有匹配格式的 nil
- attributes - 如何使用 SRI 哈希和“onload”属性
- android - android 将 ExternalStorageProvider 转换为 MediaProvider
- vb6 - IE11 的 EOL 对使用 MSHTML 的 VB6 的影响
- android - DialogFragment 中的 ViewPager2 内的 EditText 不会显示键盘
- javascript - Javascript SetInterval 回调意外停止
- c++ - 包括来自 E1696 的其他驱动器号和文档的源文件和头文件
- prestashop - 如何从 PrestaShop ModuleFrontController 返回带有错误 http 代码的 ajax 响应?