Я хочу понизить рейтинг клиента в конце текущего периода. Когда это произойдет. Мне известен способ установки пробного окончания на конец текущего периода и установки proration_behavior
на none
, и, наконец, настройки веб-крюка для прослушивания subscription.deleted
и создания новой подписки 1 * 1005. * 2 . Я пытаюсь найти способ не использовать webhooks, чтобы Stripe управлял переключателем на их стороне.
Я думаю, что это как-то достижимо при использовании расписаний подписки .
I имейте в виду следующее, но я еще не пробовал, и я хотел бы сначала получить мнения:
// create schedule if it doesn't exist
let schedule: Stripe.SubscriptionSchedule;
if (!stripeSubscription.schedule) {
schedule = await this.stripe.subscriptionSchedules.create({
from_subscription: stripeSubscription.id,
});
} else {
schedule = await this.stripe.subscriptionSchedules.retrieve(stripeSubscription.id);
}
await this.stripe.subscriptionSchedules.update(schedule.id, {
end_behavior: 'release',
phases: [
{
plans: [{plan: stripeSubscription.items.data[0].plan.id}],
end_date: stripeSubscription.current_period_end,
},
{
proration_behavior: 'none',
collection_method: 'charge_automatically',
plans: [{plan: replacementPlanId}],
end_date: stripeSubscription.current_period_end
},
],
});
Приведенное выше создаст график, если он не существует, а затем обновит этот график понизить план. Я не уверен, сработает ли окончание второго этапа, возможно, мне нужно добавить день, чтобы быть уверенным. Или просто ничего не устанавливайте, и пусть расписание будет выполнено, но мне интересно, если первая фаза будет удалена, когда она закончится, в противном случае, когда в следующий раз клиент переключит план снова, он может не включить новую план в массиве. Я мог бы go обойти это, сделав следующее:
phases: [
...schedule.phases.filter(phase => phase.end_date > Date.now() / 1000).map((phase, index, array) => {
if (array && array.length -1 === index && !phase.end_date) {
phase.end_date = stripeSubscription.current_period_end;
}
return {
plans: phase.plans,
end_date: phase.end_date,
};
}),
{
proration_behavior: 'none',
collection_method: 'charge_automatically',
plans: [{plan: replacementPlanId}],
end_date: stripeSubscription.current_period_end,
},
],```