从条带webhook事件中检索条带数据

在java中实现条带webhook时,我成功地获取了JSON格式的事件对象。 问题是我无法获得嵌套JSON中的amount,subscription_id,属性等详细信息。 从类对象获取这些值也不可用。 你能告诉我如何提取这些价值观吗?

public void handle(HttpServletRequest request) { Stripe.apiKey = sk_test_XXXXXXXXXXXXXXXXXXXX; String rawJson = ""; try { rawJson = IOUtils.toString(request.getInputStream()); } catch (IOException ex) { System.out.println("Error extracting json value : " + ex.getMessage()); } Event event = APIResource.GSON.fromJson(rawJson, Event.class); System.out.println("Webhook event : " + event); } 

我收到以下回复: –

 Webhook event :  JSON: { "id": "evt_18qdEBElSMaq70BZlEwdDJG3", "api_version": "2016-07-06", "created": 1473143919, "data": { "object": { "id": "in_18qcFkElSMaq70BZy1US7o3g", "amount_due": 4100, "application_fee": null, "attempt_count": 1, "attempted": true, "charge": "ch_18qdEBElSMaq70BZIEQvJTPe", "closed": true, "created": null, "currency": "usd", "customer": "cus_95uFN7q2HzHN7j", "date": 1473140172, "description": null, "discount": null, "ending_balance": 0, "forgiven": false, "lines": { "data": [ { "id": "sub_95uFmJLQM3jFwP", "amount": 4100, "currency": "usd", "description": null, "discountable": true, "livemode": false, "metadata": {}, "period": { "end": 1473226524, "start": 1473140124 }, "plan": { "id": "aug 19 01", "amount": 4100, "created": 1472448923, "currency": "usd", "interval": "day", "interval_count": 1, "livemode": false, "metadata": {}, "name": "Aug 19 plan. Better than paypal", "statement_descriptor": null, "trial_period_days": null, "statement_description": null }, "proration": false, "quantity": 1, "subscription": null, "type": "subscription" } ], "total_count": 1, "has_more": false, "request_options": null, "request_params": null, "url": "/v1/invoices/in_18qcFkElSMaq70BZy1US7o3g/lines", "count": null }, "livemode": false, "metadata": {}, "next_payment_attempt": null, "paid": true, "period_end": 1473140124, "period_start": 1473053724, "receipt_number": null, "starting_balance": 0, "statement_descriptor": null, "subscription": "sub_95uFmJLQM3jFwP", "subscription_proration_date": null, "subtotal": 4100, "tax": null, "tax_percent": null, "total": 4100, "webhooks_delivered_at": 1473140184 }, "previous_attributes": null }, "livemode": false, "pending_webhooks": 1, "request": null, "type": "invoice.payment_succeeded", "user_id": null } 

我想得到像customer_idsubscription_id等的值。但是当我尝试使用事件对象获取数据时,我不能简单地做为event.get.... 我如何提取数据。

Stripe将事件对象发送到您的webhook处理程序。 每个事件对象在其data.object属性中携带另一个对象。 该对象的类型取决于事件的类型:对于charge.*事件,它将是一个收费对象 ,对于invoice.* event,它将是一个发票对象等。

使用Stripe的Java绑定 ,您可以自动获取正确类型的对象:

 StripeObject stripeObject = event.getData().getObject(); 

stripeObject将自动转换为正确的类型。

或者,您可以自己进行投射:

 if (event.getType().equals("invoice.payment_failed")) { Invoice invoice = event.getData().getObject(); 

好吧,我已经解决了这个问题。 真正的问题是我无法检索object id ,在我的例子中是invoiceid (in_18qcFkElSMaq70BZy1US7o3g)。 此id是发生事件的ID。 这意味着如果它是payment successful事件,那么object id将是charge id 。 我必须将event对象转换为map然后获取所需的属性。 下面是我为解决问题所做的完整代码片段。

 public void handle(HttpServletRequest request) { Stripe.apiKey = sk_test_XXXXXXXXXXXXXXXXXXXX; String rawJson = ""; try { rawJson = IOUtils.toString(request.getInputStream()); } catch (IOException ex) { System.out.println("Error extracting json value : " + ex.getMessage()); } Event event = APIResource.GSON.fromJson(rawJson, Event.class); System.out.println("Webhook event : " + event); // Converting event object to map ObjectMapper m = new ObjectMapper(); @SuppressWarnings("unchecked") Map props = m.convertValue(event.getData(), Map.class); // Getting required data Object dataMap = props.get("object"); @SuppressWarnings("unchecked") Map objectMapper = m.convertValue(dataMap, Map.class); String invoiceId = objectMapper.get("id"); System.out.println("invoideId : " + invoiceId); }