You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

java-stripe 26.0.0无法反序列化api-version 2023-10-16事件求助

问题分析

Stripe Java SDK的每个版本都绑定了特定的默认API版本,不同版本SDK对事件的结构定义存在差异:

  • 24.16.0版本的SDK默认API版本低于2024-06-20,因此无法解析该API版本的事件
  • 26.0.0版本的SDK默认API版本高于2023-10-16,旧API版本的事件结构在新版本SDK中已不被兼容,导致反序列化失败,且dataObjectDeserializer.object为空
解决方案

1. 针对不同API版本的事件使用对应版本的反序列化客户端

Stripe允许创建指定API版本的StripeClient,用来解析对应版本的事件,示例代码如下:

解析2023-10-16版本的事件

// 创建绑定2023-10-16 API版本的客户端
StripeClient oldApiVersionClient = new StripeClient(
    Stripe.apiKey,
    StripeConfiguration.builder().setApiVersion("2023-10-16").build()
);

// 使用该客户端构造事件
Event oldApiEvent = oldApiVersionClient.webhookEndpoints().constructEvent(
    payload, // 原始Webhook payload
    sigHeader, // 请求头中的签名
    webhookSecret // 你的Webhook密钥
);

// 后续处理oldApiEvent即可

解析2024-06-20版本的事件

可以直接使用26.0.0版本的默认客户端(若其默认API版本≥2024-06-20),或同样指定对应API版本:

StripeClient newApiVersionClient = new StripeClient(
    Stripe.apiKey,
    StripeConfiguration.builder().setApiVersion("2024-06-20").build()
);

Event newApiEvent = newApiVersionClient.webhookEndpoints().constructEvent(
    payload,
    sigHeader,
    webhookSecret
);

2. 统一Webhook的API版本

登录Stripe Dashboard,找到你的Webhook端点,将其API版本设置为当前SDK支持的版本(比如26.0.0对应的默认API版本)。这样后续所有新事件都会使用该版本发送,无需处理多版本兼容问题。注意:已发送的旧版本事件仍需用对应版本的客户端解析。

3. 处理dataObjectDeserializer.object为空的情况

当SDK无法识别事件的API版本时,dataObjectDeserializer.object会为空,此时可以获取原始JSON手动解析:

Event event = ...; // 已构造的事件对象
if (event.getDataObjectDeserializer().getObject().isEmpty()) {
    // 获取原始JSON数据
    JsonObject rawData = event.getDataObjectDeserializer().getRawJsonObject();
    // 根据需求手动解析字段
    String objectType = rawData.get("object").getAsString();
    // 其他自定义解析逻辑
}

内容的提问来源于stack exchange,提问作者jugal kishor Sahu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 15:53:18