2014-01-17 3 views
5

Я пытаюсь получить webhook через почтовый запрос от Stripe Payments. Метод Java для обработки выглядит следующим образом:Как получить Webhook из Stripe в Java

@ResponseBody 
@RequestMapping( consumes="application/json", 
        produces="application/json", 
        method=RequestMethod.POST, 
        value="stripeWebhookEndpoint") 
public String stripeWebhookEndpoint(Event event){ 

    logger.info("\n\n" + event.toString()); 

    logger.info("\n\n" + event.getId()); 

    return null; 
} 

Но нашивки событие всегда возвращается со всеми нулевыми значениями:

<[email protected] id=null> JSON: { 
    "id": null, 
    "type": null, 
    "user_id": null, 
    "livemode": null, 
    "created": null, 
    "data": null, 
    "pending_webhooks": null 
} 

Если метод получает строку вместо этого, и с помощью @RequestBody :

@ResponseBody 
@RequestMapping( consumes="application/json", 
        produces="application/json", 
        method=RequestMethod.POST, 
        value="stripeWebhookEndpoint") 
public String stripeWebhookEndpoint(@RequestBody String json){ 

    logger.info(json); 

    return null; 
} 

Здесь он печатает json без нулевых значений. Вот часть запроса на печать:

{ 
    "created": 1326853478, 
    "livemode": false, 
    "id": "evt_00000000000000", 
    "type": "charge.succeeded", 
    "object": "event", 
    "request": null, 
    "data": { 
    "object": { 
     "id": "ch_00000000000000", 
     "object": "charge", 
     "created": 1389985862, 
     "livemode": false, 
     "paid": true, 
     "amount": 2995, 
     "currency": "usd", 
... 
} 

Но использование @RequestBody с параметром нашивки Event дает 400: плохой синтаксис.

Так почему я не могу взять правильный тип, Stripe Event, как параметр?

+0

Благодарим за вопрос, но его можно использовать для удаления 'localhost' url from stripe? –

ответ

9

Вот что я сделал:

Метод Java по-прежнему принимает событие как строку json. Тогда я использовал пользовательскую gson адаптер нашивки и получил событие с:

Event event = Event.gson.fromJson(stripeJsonEvent, Event.class); 

Где stripeJsonEvent является строкой JSON попадала в webhook конечной точкой.

+2

с версии 1.25 библиотеки, это 'Event.GSON.fromJson (stripeJsonEvent, Event.class);' –

7

Я искал тот же ответ, поэтому после того, глядя на свой собственный код, вот как они на самом деле сделать это:

String rawJson = IOUtils.toString(request.getInputStream()); 
Event event = APIResource.GSON.fromJson(rawJson, Event.class); 

APIResource приходит из их библиотеки (я использую 1.6.5)

+1

Привет Хуан. +1 Для использования APIResource. У меня также есть ответ о том, как это сделать. – Matt

+0

Какой пакет является запросом? –

+1

Как получить атрибуты дочернего объекта объекта события. Допустим, я хочу получить идентификатор подписки из объекта события. Я не мог напрямую получить к нему доступ, выполнив event.get ....(), поскольку он недоступен. – viper

Смежные вопросы