2014-01-17 5 views
5

Ich versuche, einen Webhook über eine Postanfrage von Stripe Payments zu erhalten. Die Java-Methode zu verarbeiten es wie folgt aussieht:So erhalten Sie Webhook von Stripe in 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; 
} 

Aber die Streifen Ereignis kommt immer wieder mit allen Nullwerten:

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

Wenn die Methode stattdessen einen String erhält und mit @RequestBody :

Hier wird der JSON ohne Nullwerte gedruckt. Hier ist Teil der Anforderung gedruckt werden:

{ 
    "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", 
... 
} 

Aber mit @RequestBody mit einem Streifen Ereignis Parameter gibt eine 400: schlechte Syntax.

Also warum kann ich nicht den richtigen Typ, ein Stripe Event, als Parameter?

+0

danke für Sie Frage, aber es ist möglich für Hit 'localhost' URL von Stripe? –

Antwort

9

Hier ist, was ich getan habe:

Die Java-Methode nimmt immer noch das Ereignis als JSON-String. Dann habe ich Streifen des benutzerdefinierten Gson Adapter und bekam das Ereignis mit:

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

Wo stripeJsonEvent ist die Kette von json vom Webhook Endpunkt aufgenommen.

+2

seit Version 1.25 der Bibliothek ist es 'Event.GSON.fromJson (stripeJsonEvent, Event.class);' –

7

Ich habe für die gleiche Antwort suchen, also nach auf ihrem eigenen Code suchen, hier ist, wie sie es eigentlich tun:

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

APIResource stammt aus ihrer Bibliothek

(I 1.6.5 verwenden)
+1

Hallo Juan. +1 Für die Verwendung von APIResource. Ich habe auch eine Antwort darauf, wie das geht. – Matt

+0

Aus welchem ​​Paket stammt die Anfrage? –

+1

wie Attribute des untergeordneten Objekts des Ereignisobjekts abgerufen werden. Nehmen wir an, ich möchte die Abonnement-ID aus dem Ereignisobjekt abrufen. Ich konnte nicht direkt darauf zugreifen, indem ich event.get ....() als nicht verfügbar ausführe. – viper