我在我的 React 和 Nodejs 应用程序中使用 stripe 进行支付。场景是这样的:
假设客户在 10 月 1 日购买了我的计划的 1 数量(我的计划有数量)。
现在,10 月 15 日,客户决定将数量从 1 件改为 5 件。现在我想立即向客户收取新的 5 个数量的费用(因为客户已经支付了 1 个数量的费用)。将订阅更新为上一个+新数量,即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)
}
})
}
您正在为数量更改调用订阅项目更新,然后使用
proration_behavior
调用订阅更新。proration_behavior
仅适用于它所在的呼叫,因此它根本不会影响数量变化。
因为您没有在订阅项目更新中设置
proration_behavior
,所以该调用默认为 create_prorations
,这不是您想要的。proration_behavior:'always_invoice'
,但由于该调用中没有数量更新,因此没有按比例分配。
这是我要做的(只有这个,没有项目更新):
subscription = await stripe.subscriptions.update(
subscriptionId, {
items:[
{id:subscription.items.data[0].id, quantity:newTotalQyantity}
],
proration_behavior: "always_invoice"
});
这是我个人的偏好,现在您可以通过 SubscriptionItem 更新获得相同的结果(并且没有子更新):
const subscriptionItem = await stripe.subscriptionItems.update(
subscription.items.data[0].id, {
quantity:newTotalQuantity,
proration_behavior:'always_invoice'
});
这将立即针对更新生成的按比例发送发票,但保持您的订阅账单保持在同一日期。