为什么 dataObjectDeserializer.getObject() 不存在?

Дей*_*дир 2 spring stripe-payments

我创建了一个 spring-boot 服务器来处理 stripe webhook。但是,webhooks 正在工作 - 我收到一个事件,但是当我尝试获取 dataObjectDeserializer.getObject() 的值时,它为 null。任何想法可能是什么以及如何解决它。

这是代码:

    Event event = null;

    try {
        event = Webhook.constructEvent(
                payload, sigHeader, endpointSecret
        );
    } catch (SignatureVerificationException e) {
        // Invalid signature
        logger.info("Webhook error while validating signature.");
        return "";
    }

    EventDataObjectDeserializer dataObjectDeserializer = event.getDataObjectDeserializer();
    StripeObject stripeObject = null;
    if (dataObjectDeserializer.getObject().isPresent()) {
        stripeObject = dataObjectDeserializer.getObject().get();
    } else {
        // Deserialization failed, probably due to an API version mismatch.
        // Refer to the Javadoc documentation on `EventDataObjectDeserializer` for
        // instructions on how to handle this case, or return an error here.
    }
Run Code Online (Sandbox Code Playgroud)

小智 10

我最近遇到了同样的问题。

就我而言(我相信也可能是你的)。事件未正确反序列化,因为您帐户中使用的 API 与项目中 Stripe SDK 模型之间的版本不匹配。您可以通过查看 Event.getApiVersion() 和 Stripe.API_VERSION 来检查这一点。如果它们不同,那么您将需要正确升级它们,并考​​虑迁移指南(如果它们适用于您的场景)。

就我而言,因为这是第一次,我不需要进行任何迁移,我只需简单地到我的仪表板并升级 sdk:

仪表板注意:它显示回滚,因为我确实升级了它。如果还没有,您将可以使用“升级”选项。

您可以在他们的文档页面上找到更多信息:

升级 Stripe API 版本控制

希望这可以帮助!