如果没有卡,如何使 Stripe 订阅状态​​从试用状态变为取消状态?

Rya*_*yan 7 stripe-payments

我们让客户使用 Stripe 订阅进行 30 天免费试用。我们希望试用期正好持续 30 天。如果订阅状态为trialingactive或 ,past_due则客户可以使用我们的服务。

如果客户已结束试用期并一直在付款,并且由于某种原因他们的卡不再有效,则订阅状态将从active变为past_due。订阅状态为past_due15 天(由我们的重试设置决定)。换句话说,如果他们一直是付费客户,并且在每月付款到期时他们的卡不好,那么他们仍然可以在修复卡期间额外使用我们的服务 15 天。

如果 30 天试用期结束并且没有卡,则状态将从trialing变为active。3 分钟后,状态从active变为past_due。然后状态会保留past_due15 天 - 实质上试用期为 45 天。我们不希望这样;我们希望试用期仅为 30 天。

我们怎么能不允许这 15 天的额外时间呢?

我认为在这种情况下,应该有一个设置可以使订阅状态从 变为 ,trialing这样cancelled就可以根据我们上面的设置方式轻松设置试用期长度。但这个设置似乎不存在。

trialing那么,当我检测到(通过 webhook) to active,然后 3 分钟后activeto时,我是否需要手动取消订阅past_duetrialing当日期时间从到 时,我会将日期时间存储在数据库中active。然后,当它从active到 时past_due,我会检查存储的数据时间是否少于 15 分钟前 - 如果是,那么我知道我有一个试用期,该试用期结束时没有卡,我会取消订阅。或者有更简单的方法吗?

Jor*_*weg 5

我自己也在研究这个。事实证明,您可以cancel_at使用与您的trial_end. 当您收到用户提供的经过验证的付款方式时,您可以cancel_at通过将时间戳设置为 来删除时间戳null,以便订阅继续。然后检查付款是否成功并妥善处理。

因此,如果用户在试用结束前没有向您提供付款方式,则订阅将在该cancel_at时间戳被取消。

  • 我们会等到 Trial_will_end webhook(试用结束前 3 天),如果那时他们还没有输入卡,那么我们将设置 cancel_at。当然,一旦他们添加了付款,我们就将其 cancel_at 设置为 null。如果他们有一张卡(之前的)并且希望试用结束,那么问题就来了。Stripe 确实需要一个属性来指示试验结束后应如何过渡。 (2认同)

koo*_*jah 4

第一个解决方案是更改您希望处理订阅失败付款的方式。默认情况下,当发票付款失败时,会在 3 天、5 天、7 天后自动重试,最后被取消。您绝对可以通过更改仪表板中的设置来决定在第一次付款失败后需要取消订阅。

第二种解决方案是捕获invoice.payment_failedwebhook 中的 并立即取消您的订阅。

编辑:即使客户没有任何关联的活动卡并且现在已经过了试用期,也绝对应该提出:

每当发票尝试付款但付款失败时就会发生。发生这种情况的原因可能是付款被拒绝,也可能是因为客户没有有效的卡。值得注意的一个特殊情况是,如果没有有效卡的客户的免费试用期结束,则会出现发票.付款失败通知。

编辑2:如果您想知道审判是否刚刚结束,最简单的解决方案是将其保存在您这边。您可以只存储客户订阅计划的时间,然后根据收到计划的日期检测试用是否结束invoice.payment_failed