我们让客户使用Stripe订阅进行30天免费试用。我们希望试用期能够持续30天。如果订阅状态为trialing
,active
或past_due
,则客户可以使用我们的服务。
如果客户已退出试用期且已付款并且出于某种原因,其卡不再适用,则订阅状态将从active
变为past_due
。订阅状态为past_due
,为期15天(由我们的重试设置决定)。换句话说,如果他们是付费客户并且他们的卡在月付款到期时不好,那么他们仍然可以在他们修理卡时再使用我们的服务15天。
如果30天试用期结束且没有卡,则状态从trialing
移至active
。然后3分钟后状态从active
变为past_due
。然后状态保持past_due
15天 - 基本上使试用期为45天。我们不想要那个;我们希望试用期仅为30天。
我们如何不再允许这15天?
我认为在这种情况下会有一个设置让订阅状态从trialing
变为cancelled
,以便根据我们的方式设置试用期长度很容易设置如上。但是这个设置似乎不存在。
当我检测到trialing
到active
,然后在3分钟后active
到past_due
时,我需要手动取消订阅吗?当我从trialing
转到active
时,我会将日期时间存储在我的数据库中。然后,当它从active
转到past_due
时,我会检查是否存储的数据时间是否在15分钟前发出 - 如果是,那么我知道我的试用期结束时没有一张卡,我取消订阅。或者有更简单的方法吗?
答案 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_failed
,has_paid
webhook会立即取消订阅是假的,或者如果has_paid
为真,则让自动重试周期继续。
答案 2 :(得分:0)
我自己正在研究。原来,您可以使用与cancel_at
相同的时间戳来设置trial_end
来创建订阅。当您从用户收到经过验证的“付款方式”时,可以通过将cancel_at
时间戳设置为null
来删除它,以便继续进行订阅。然后只需检查付款是否成功并正确处理即可。
因此,如果用户在试用期结束前未给您付款方式,则该订阅将在cancel_at
时间戳记处被取消。