我在react和nodejs应用程序中使用stripe支付。场景是这样的:
假设客户在10月1日购买了我的计划的1个数量(我的计划有数量)。
现在,在10月15日,客户决定从1个数量切换到5个数量。现在,我想立即向客户收取新的5个数量的费用(因为客户已经支付了1个)。将订阅更新为prev+new数量,即1+5=6数量。
现在我想订阅计数6数量和去为6数量的剩余天数。下个月,该计划将自动从客户的6个数量开始
我尝试的是像这样更新订阅:
const updateSubscriptionFunc = (subscriptionId, newTotalQuantity) => {
return new Promise(async (resolve, reject) => {
try {
console.log("entered in update subascription", subscriptionId, newTotalQuantity)
let subscription = await stripe.subscriptions.retrieve(
subscriptionId
);
// console.log(subscription.items.data)
// console.log("subscriptionitem id",subscription.items.data[0].id)
const subscriptionItem = await stripe.subscriptionItems.update(
subscription.items.data[0].id, { quantity: newTotalQuantity }
)
console.log("subscription item", subscriptionItem)
subscription = await stripe.subscriptions.update(
subscriptionId, { proration_behavior: "always_invoice" }
);
console.log("subscription", subscription)
resolve()
} catch (err) {
reject(err)
}
})
}
2条答案
按热度按时间pgccezyw1#
您要调用数量更改的订阅项目更新,然后调用
proration_behavior
的订阅更新。这是多余的,但
proration_behavior
只适用于它所在的调用,所以它根本不会影响数量变化。因为您没有在订阅项目更新中设置
proration_behavior
,所以该调用的默认值为create_prorations
,这不是您想要的。在您的订阅更新中,您确实设置了
proration_behavior:'always_invoice'
,但由于该调用中没有数量更新,因此没有按比例分配。以下是我会做的(只有这个,没有项目更新):
这是我个人的偏好,现在你可以得到相同的结果与SubscriptionItem更新(没有子更新):
我更喜欢在SubscriptionItem级别进行所有更改,而不是在SubscriptionItem级别进行更改,因为我发现这样更容易控制,并且在出现问题时进行故障排除。
这将立即为更新生成的按比例分配发送发票,但将您的订阅账单保持在同一日期。
sf6xfgos2#
你的代码看起来很好,这正是Stripe文档所说的关于直接更新订阅项的内容。
如果您想立即向客户开具发票,可以将
proration_behavior
设置为always_invoice
,或者将create_prorations
设置为将按比例分配包括在即将开具的发票中。