如何检查 stripe 订阅是从试用期还是活跃期进入 past_due?

How to check if stripe subscription went to past_due from trialing or active?

我有一个场景,我需要在我们的系统中采取行动以获得条带上的 past_due 状态。但这取决于订阅是从活动状态(至少支付过一次)还是试用状态(处于试用期且首次付款失败)。有什么办法可以区分这两种情况吗?

有一个 customer.subscription.updated 您可以收听的 webhook 事件,此事件包含订阅,您可以在其中检查状态是否为 past_due [0]。

对于 past_due 的订阅,需要获取 2 条信息来确定订阅之前是否已支付:

  1. 订阅的 trial_end [1]:
    这是订阅中的字段之一。
  2. 最新发票行项目的起始期间[2]:
    latest_invoice 是订阅中的字段之一,这是一个发票 ID,在检索相关发票 [3] 后,可以通过 lines.data[0].period.start.
  3. 找到感兴趣的纪元时间戳

如果这两个 epoch 时间戳的值匹配,则表示订阅从未支付过,即最新发票是在试用结束且付款未成功时创建的。

[0] https://stripe.com/docs/api/subscriptions/object#subscription_object-status
[1] https://stripe.com/docs/api/subscriptions/object#subscription_object-trial_end
[2] https://stripe.com/docs/api/invoices/line_item#invoice_line_item_object-period-start
[3] https://stripe.com/docs/api/invoices/retrieve