何时在条带计费周期结束时按月收费

When to charge for monthly usage at end of billing cycle in stripe

我有一个订阅计划,每个用户计划每月 10 美元 + 数据 "overage" 费用。换句话说,它类似于(不是无限的)cell phone data plan.

我应该在周期结束时什么时候添加每月数据使用量?

根据 Subscription lifestyle documentation here,它说 invoice.created 事件大约发生在 invoice.payment_succeededcharge.succeeded 之前一个小时。然而,似乎几乎不可能对此进行测试,因为每当首次为订阅创建发票时,所有 webhook 事件似乎都会同时触发。这应该如何处理?请注意,我只想在循环结束时更新 metered usage amount 一次。

我的代码目前是这样的:

def stripe_webhook(request):

    if event_type == 'invoice.created':

        subscription_item_id = [item['subscription_item'] for item in stripe_data_obj['lines']['data'] if item['plan']['usage_type'] == 'metered'][0]

        data_usage = user.get_data_usage(start_date, end_date)
        usage = stripe.UsageRecord.create(
          quantity=data_usage,
          timestamp=int(time.time()),
          subscription_item=subscription_item_id,
          action = 'set'
        )

如果你想手动添加行项目到发票,那么你绝对可以测试这个。这个想法是让您的客户试用几分钟。创建的第一个发票用于试用,您可以忽略那个和所有相关事件。几分钟后,当试用期结束时,将创建一个新发票并将一个 invoice.created 事件发送到您的端点。那个将允许您修改新发票并添加额外的 amount/fees 以在本月收费。

为此,您将使用创建订阅 API 并将 trial_end 参数作为代表未来几分钟的 unix 时间戳传递。

另外,如果您真的想报告过度使用,您可以使用此处记录的计量计费和使用记录:https://stripe.com/docs/billing/subscriptions/metered-billing