我升级到最新的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客户端库内部引起的。任何帮助表示赞赏!
答案 0 :(得分:0)
我知道这是一个古老的问题,但是我遇到了类似的问题。 Stripe发送的JSON具有许多属性,这些属性被序列化为ID而不是对象。您需要使用Stripe内置的GSON实例对其进行解码:
com.stripe.net.ApiResource.GSON.fromJson(payload, Event.class)
payload
是JSON字符串。