Stripe Java API - 无法从Webhook解析Event对象

时间:2017-08-08 00:43:12

标签: java gson stripe-payments webhooks

我升级到最新的Stripe API(2017-06-05)并注意到发送到我的服务器的测试webhooks工作得很好,但是实时的却没有。在查看之后,我注意到Event对象在LIVE模式中包含以下内容:

  ...
  "pending_webhooks": 1,
  "request": {
    "id": null,
    "idempotency_key": null
  },
  ...

以下在测试模式中:

  ...
  "pending_webhooks": 1,
  "request": null
  ...

这会导致LIVE模式出现以下错误:

  

预期字符串,但是第105行第15行路径$ .request

的BEGIN_OBJECT

显然,错误发生是因为测试webhooks可能会被误认为是错误的。作为null String而不是null对象,这就是测试不会抛出异常的原因。

当前版本的Stripe客户端库(5.6.0)具有以下用于EventRequest.class反序列化的代码:

public EventRequest deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
    throws JsonParseException {
    Gson gson = new GsonBuilder()
        .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
        .create();

    // API versions 2017-05-25 and earlier render `request` as a string
    // instead of a JSON object
    if (json.isJsonPrimitive()) {
        EventRequest request = new EventRequest();
        request.setId(json.getAsString());
        return request;
    }
    else {
        return gson.fromJson(json, typeOfT);
    }
}

所以,我真的不确定为什么会出现这个问题或者如何解决这个问题,因为它是在Stripe Java客户端库内部引起的。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

我知道这是一个古老的问题,但是我遇到了类似的问题。 Stripe发送的JSON具有许多属性,这些属性被序列化为ID而不是对象。您需要使用Stripe内置的GSON实例对其进行解码:

com.stripe.net.ApiResource.GSON.fromJson(payload, Event.class)

payload是JSON字符串。