NodeJS 用新数量更新A订购,向客户收取新数量的费用,从下个月开始新订购(上一个+新)数量

7bsow1i6  于 12个月前  发布在  Node.js
关注(0)|答案(2)|浏览(96)

我在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)
        }
    })
}
pgccezyw

pgccezyw1#

您要调用数量更改的订阅项目更新,然后调用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'
});

我更喜欢在SubscriptionItem级别进行所有更改,而不是在SubscriptionItem级别进行更改,因为我发现这样更容易控制,并且在出现问题时进行故障排除。
这将立即为更新生成的按比例分配发送发票,但将您的订阅账单保持在同一日期。

sf6xfgos

sf6xfgos2#

你的代码看起来很好,这正是Stripe文档所说的关于直接更新订阅项的内容。
如果您想立即向客户开具发票,可以将proration_behavior设置为always_invoice,或者将create_prorations设置为将按比例分配包括在即将开具的发票中。

相关问题