已经有计划订阅的情况下如何处理stripe的订阅升级?

问题描述 投票:0回答:1

就上下文而言,我运行一个 SaaS,需要订阅来管理帐户,该订阅由 Stripe 管理;我们有一个主要计划,然后是该计划的附加内容,即客户可能基本上需要的额外内容。计划在每个周期开始时支付,而不是在结束时支付。

我们的要求是在计费后执行计划的升级(通常是立即计费),一旦付款,它将应用与发票相关的更改(为此,我们使用

payment_behavior=pending_if_incomplete
prorate_behavior=always_invoice
,以便我们达到想要的结果)。

对于降级,我们会将其安排在下一个计费周期,因此用户仍然可以受益于他在当前计费周期中已经支付的升级费用。

到目前为止,我们已经有了使用订阅计划进行降级的逻辑(根据订阅中未来更改的建议)以及在没有任何订阅计划时进行升级的逻辑。

当我们制定了降级订阅计划(例如订阅中的附加组件)时,就会出现问题,同时我想升级我的订阅的主计划,因为我们无法在订阅有降级时更新订阅。积极计划。

要执行的操作的视觉表示:

首先我们有降级:

  • Addon A x4 -> Addon A x2(我们在下一个周期从 4 个单位降级为 2 个单位)

那么本阶段的升级:

  • Plan A x1 -> Plan B x1(方案升级,但我们想在付款后应用此功能,并且发票现在要支付)

我已尝试更新时间表中的当前阶段,但它会在

draft
中创建发票,并且直到 1 小时过去后才收取付款,这不是预期的结果。我们需要的是立即收取付款,然后在付款成功后将更改应用到订阅(对于 3DS,我们可以使用订阅最新发票上附加的付款意图来管理它们),但问题是发票将在 1 小时后计费,但现在会应用更改,而不依赖于付款状态,这与我们执行的没有计划的正常升级不同。一个好的方法是能够通过
payment_behavior=pending_if_incomplete
但订阅计划不允许(https://docs.stripe.com/api/subscription_schedules/update)。

我想到的另一件事是分开计费和更新,但仍将发票附加到订阅中,这样我就可以执行以下操作:

  1. 检索订阅计划的对象
  2. 从中提取设置(如日期、阶段、操作和其他内容)
  3. 从订阅中释放订阅时间表
  4. 使用
    prorate_behavior=always_invoice
    payment_behavior=pending_if_incomplete
    在订阅本身中执行更新,这样我们就可以像正常升级一样管理它
  5. 一旦一切顺利,重新创建订阅计划,但使用新升级而不是旧升级更新阶段(这样就不会恢复我们刚刚所做的更改)

但我不知道,我觉得对于太简单的东西来说工作量太大了,也许 Stripe 中有一些我没有看到的东西?

stripe-payments laravel-cashier
1个回答
0
投票

由于您明确使用

prorate_behavior=always_invoice
,我能想到的一个建议是获取
latest_invoice
ID,然后使用 API 调用 最终确定发票。

您所看到的情况是预期的,因为 Stripe 会等待大约一个小时才能完成发票并尝试付款,因为这样您就有时间在需要时对发票进行编辑。他们记录了如何完成发票这里,我认为使用您的测试 API 密钥进行测试以确保这是您希望看到的行为,这是下一步的良好做法。

© www.soinside.com 2019 - 2024. All rights reserved.