如何更新 Stripe 订阅数量? (Node.js)

How to update Stripe subscription quantity? (Node.js)

我正在尝试更新已创建的 Stripe 订阅的数量。但我不断收到此错误:

"error": {
    "message": "Invalid array",
    "param": "items",
    "type": "invalid_request_error"
  }

我首先检索 Stripe 订阅,更新值,然后发布更新后的值。这是代码:

const subscription = await stripe.subscriptions.retrieve(
  stripe_sub_id
);

subscription.items.data[0].quantity = newCount;

stripe.subscriptions.update(
    stripe_sub_id,
    {items: { data: subscription.items.data }}
)

我做错了什么?如何更新 items.data 数组中“数量”的值?

由于 Stripe API 的工作方式,您不能真的只改变 items.data 并直接传递它(检索调用中返回的项目格式与POST 时的参数,它们是不同的)。

因此您实际上需要编写一些更多的自定义 code/business 逻辑来明确地为您想要的更改创建 params 对象。可能是这样的。

const subscription = await stripe.subscriptions.retrieve(
  stripe_sub_id
);

let IdOfPriceToUpdate = "price_xxx";
let newQuantity = 5;

let updatedItemParams = subscription.items.data.
    filter(item => item.price != IdOfPriceToUpdate). // find what to change
    map(item => {return { id:item.id, quantity:newQuantity}}) // change it

await stripe.subscriptions.update(
    stripe_sub_id,
    {items: updatedItemParams}
) 

https://stripe.com/docs/billing/subscriptions/upgrade-downgrade#changing