如何捕获所有未显式处理的 stripe webhook 事件?

How to catch all stripe webhook events that are not explicitly handled?

Stripe events有很多不同的类型。此外,他们指出他们可以随时添加更多。我正在使用 dj 条纹。通过我的事件处理程序,我很清楚我应该监控哪些类型的 webhook 以实现非常简单的 Stripe 订阅设置。在 dj-stripe 框架中,是否有一种简单的方法可以捕获我在生产中遇到的未处理的 webhook?关于这些,我想给自己发邮件说发生了未处理的 Stripe webhook 事件。

例如,我有以下 webhook 处理程序:

@csrf_exempt
@webhooks.handler("checkout")
def my_handler(event, **kwargs):
    print("handling checkout event...")
    print(event.type)

@csrf_exempt
@webhooks.handler("customer")
def my_customer_handler(event, **kwargs):
    print("handling customer event... in my_customer_handler")
    print(event.type)

@csrf_exempt
@webhooks.handler("charge")
def my_charge_handler(event, **kwargs):
    print("handling charge event... in my_charge_handler")
    print(event.type)

@csrf_exempt
@webhooks.handler("payment_intent")
def my_payment_intent_handler(event, **kwargs):
    print("handling payment_intent event... in my_payment_intent_handler")
    print(event.type)


@csrf_exempt
@webhooks.handler("price", "product")
def my_price_and_product_handler(event, **kwargs):
    print("handling price/product event... in my_price_and_product_handler")
    print(event.type)

现在假设出现了某种类型的发票 webhook。我知道 djstripe 会将此事件保存到 djstripe_invoice table(通过 path('stripe/', include("djstripe.urls", namespace="djstripe")),)。但是,如果我想发现它不是当前在内置 dj-stripe URL 之外处理的 webhook 类型怎么办?是否有任何我可以添加的 webhook 签名来通知我发生了一个 webhook 事件,而我除了更新数据库之外没有做任何事情?

Stripe 推荐 only subscribing to events necessary for your business,因此如果您确实发现了您没有处理的已订阅事件,最好的选择是取消订阅它们。

如果你想对所有事件做一些处理,看起来dj-stripe有一个handler_all选项(code)。您可能希望维护一些您处理的显式事件类型的字典,并在记录您未处理的事件之前检查接收到的事件是否已处理。