如何在Spring(Java)后端识别Stripe Webhook事件的来源?
实现Stripe事件来源识别(Spring Java后端)
完全可以实现这个需求,核心是利用Stripe Event对象自带的字段来区分事件来源,具体实现如下:
关键字段说明
Stripe的Event对象内置了两个核心字段用于判断来源:
createdBy:当事件由Stripe控制台操作触发时,该字段会返回控制台用户的标识信息;API调用或自动触发的事件中,该字段为null。request:存储触发事件的API请求ID。Stripe自动触发的事件(如定期发票生成、订阅自动续费)中该字段为null;API调用或控制台操作触发的事件会包含对应的请求ID。
来源判断逻辑
- 若
event.getCreatedBy() != null:事件来自控制台操作 - 若
event.getRequest() != null && event.getCreatedBy() == null:事件来自API调用 - 若
event.getRequest() == null:事件来自Stripe自动触发
整合到现有代码
将来源判断逻辑加入你现有的Webhook处理方法即可:
@EventListener @Async public void handleStripeWebhook(StripeWebhookEvent stripeWebhookEvent) throws EntityNotFoundException, StripeException { final var event = stripeWebhookEvent.event(); final var stripeObject = stripeWebhookEvent.stripeObject(); // 识别事件来源 String eventSource; if (event.getCreatedBy() != null) { eventSource = "控制台操作"; } else if (event.getRequest() != null) { eventSource = "API调用"; } else { eventSource = "Stripe自动触发"; } // 可将eventSource写入日志、数据库或用于业务逻辑判断 Invoice invoice; Subscription subscription; switch (event.getType()) { case "invoice.created": // ... 原有业务逻辑 } }
注意事项
确保你的Stripe Java SDK使用的是最新稳定版本,createdBy字段是Stripe后续版本新增的,旧版本可能不支持该字段。
内容的提问来源于stack exchange,提问作者Florian Baierl
相关产品推荐
相关产品推荐

