Немедленно взимайте плату за обновления подписки, но не взимайте и не возвращайте деньги за понижения - PullRequest
1 голос
/ 14 февраля 2020

В моей службе подписки дата выставления счета всегда указывается в первый день месяца. Есть два плана - план на 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.
    )
...