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

时间:2014-12-22 04:10:40

标签: stripe-payments

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

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

如果30天试用期结束且没有卡,则状态从trialing移至active。然后3分钟后状态从active变为past_due。然后状态保持past_due 15天 - 基本上使试用期为45天。我们不想要那个;我们希望试用期仅为30天。

我们如何不再允许这15天?

我认为在这种情况下会有一个设置让订阅状态从trialing变为cancelled,以便根据我们的方式设置试用期长度很容易设置如上。但是这个设置似乎不存在。

当我检测到trialingactive,然后在3分钟后activepast_due时,我需要手动取消订阅吗?当我从trialing转到active时,我会将日期时间存储在我的数据库中。然后,当它从active转到past_due时,我会检查是否存储的数据时间是否在15分钟前发出 - 如果是,那么我知道我的试用期结束时没有一张卡,我取消订阅。或者有更简单的方法吗?

3 个答案:

答案 0 :(得分:3)

第一个解决方案是更改您希望处理订阅失败付款的方式。默认情况下,当发票付款失败时,会在3天,5天,7天后自动重试,然后最终取消。您可以通过更改信息中心内的settings来确定首次付款失败后需要取消订阅。

第二个解决方案是抓住webhook中的invoice.payment_failed并立即取消订阅。

编辑:即使客户没有任何相关的有效卡,现在已经不在试用期,也一定要提出:

  

发票尝试付款时发生,付款失败。这可能是由于付款被拒,或者因为客户没有有效卡而发生。需要注意的一个特例是,如果没有活动卡的客户到达免费试用期结束,则会发生invoice.payment_failed通知。

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

答案 1 :(得分:1)

我能想到的最简单的方法是向您的用户模型添加一个布尔has_paid属性,当您收到发票的true webhook时,该属性仅设置为invoice.payment_succeeded total大于0。 (当试用开始时,Stripe会为试用期创建一个$ 0发票,该发票始终成功付款,因此您必须忽略该发票。)如果invoice.payment_failedhas_paid webhook会立即取消订阅是假的,或者如果has_paid为真,则让自动重试周期继续。

答案 2 :(得分:0)

我自己正在研究。原来,您可以使用与cancel_at相同的时间戳来设置trial_end来创建订阅。当您从用户收到经过验证的“付款方式”时,可以通过将cancel_at时间戳设置为null来删除它,以便继续进行订阅。然后只需检查付款是否成功并正确处理即可。

因此,如果用户在试用期结束前未给您付款方式,则该订阅将在cancel_at时间戳记处被取消。