NodeJS 使用Stripe计划多笔未来付款但间隔不一致的正确方法是什么?

6ljaweal  于 2022-12-29  发布在  Node.js
关注(0)|答案(1)|浏览(210)

我正在努力实现以下目标:设置间隔不一致的将来付款(例如,现在付款和在另外两个预设日期付款)。我有一个日期和金额对象,我正在为每个对象创建一个订阅,在进行第二次收费之前,我将取消这些对象。

const _payments = stripePayments.map(async (payment) => {
  try {
    const price = await stripe.prices.create({
      unit_amount: payment.amount * 100,
      currency: 'usd',
      recurring: { interval: 'year' },
      product: process.env.SCRIPE_PRODUCT
    })

    const subscription = {
      customer: customerId,
      items: [{ price: price.id }],
      billing_cycle_anchor: payment.dueDate,
      cancel_at: addYears(new Date(payment.dueDate), 1)
    }

    return await stripe.subscriptions.create(subscription)
  }

  catch (error) {
    throw new Error('creating Stripe subscription failed ' + error)
  }
})

我有两个问题:
1.有没有更好的办法?
1.在账单上,我看到订阅后就会收取一小笔费用。为什么会这样?有没有办法取消它?

tzdcorbm

tzdcorbm1#

如果您要处理不一致的计费间隔,订阅并不适合,因为订阅旨在基于一致的计费间隔定期自动处理付款。利用订阅还会导致需要维护和清理更多对象。
您共享的代码将不仅仅用于处理将来的付款。在创建订阅期间设置billing_cycle_anchor时,生成的订阅将立即处理billing_cycle_anchor日期之前订阅部分的按比例付款,然后在billing_cycle_anchor日期处理另一次全价付款。(源代码)
Stripe有一个流程,允许您收集付款方式,然后使用该付款方式在未来某个时间付款。您可以在here上查看完整的指南。
上述方法的缺点是,当您要在将来处理付款时,它要求您或您的系统请求创建/处理付款意向。如果您需要一种方法来计划这些付款在将来发生,则订阅计划是最佳选择,因为它们允许您计划订阅的创建。但是,订阅计划的使用可能会有点繁琐。并且仍然会导致订阅对象,您需要维护和清理这些对象以确保它们不会生成任何意外付款。由于这些原因,我建议使用上面链接的流程而不是订阅计划,但如果您决定使用订阅计划,下面是一些有用的资源。

关于你的第二个问题,需要更多的上下文来理解你指的是什么指控。

相关问题