货币和间隔字段必须在此订阅的所有计划中匹配。在区间字段中发现不匹配

Jay*_*ala 7 node.js stripe-payments

我正在使用 stripe 来实现支付功能。在付款功能方面,我分别有每月和每年两个订阅计划。在 Stripe 仪表板中,我创建了产品,并在其下创建了每月和每年的两个计划。根据名称,我分别将间隔设置为每月和每年。

我能够成功创建订阅。但是当我尝试更改我的订阅计划时,我收到此错误:货币和间隔字段必须在此订阅的所有计划中匹配。在间隔字段中发现不匹配。

错误说货币和间隔必须匹配。但我怎样才能让它们相同。对于月度计划,我设置了月度间隔,对于年度计划,我设置了年度间隔,我猜这是正确的。不知道我错在哪里。

这是我的代码:

const subscription = getSubscription(req.body.subscriptionId);
      subscription.then((value) => {
        id = value.id;
      })
        stripe.subscriptions.update(
          req.body.subscriptionId,
          {
            items: [{
              id: id,
              plan: req.body.planId,
            }]
          },
          function(err, subscription) {
            if(err) {
              console.log('error .... ', err);
              return;
            }
            console.log('updated subscription... ', subscription);
          });


async function getSubscription(subscriptionId) {
  return await stripe.subscriptions.retrieve(subscriptionId);
}
Run Code Online (Sandbox Code Playgroud)

我从这个代码:https : //stripe.com/docs/billing/subscriptions/upgrading-downgrading

请帮帮我。

att*_*ian 6

对于仍在寻求解决此问题的任何人,您必须在降级或升级计划时指定当前订阅项目 ID。

如果没有现有的项目 ID,当计费间隔不同(月 <-> 年)时会抛出错误。

const subscription = await stripe.subscriptions.retrieve('SUBSCRIPTION_ID');
stripe.subscriptions.update('SUBSCRIPTION_ID', {
  cancel_at_period_end: false,
  proration_behavior: 'create_prorations',
  items: [{
    id: subscription.items.data[0].id,
    price: 'NEW_PRICE_ID',
  }]
});
Run Code Online (Sandbox Code Playgroud)

下面这行很关键:

id: subscription.items.data[0].id,
Run Code Online (Sandbox Code Playgroud)

资料来源:条纹文档


小智 1

在单个订阅中创建多个计划时请检查限制

检查文档