2017-09-09 42 views
0

Java Spring MVC Web ApplicationStripeの支払いを設定しました。 Customerを追加することができます。Planを作成し、お客様にSubscriptionsを設定してください。定期的な支払いがあるので、請求書が生成されて支払いが行われると、お客様に電子メール通知を送信したいと思います。私が必要とするイベントの種類は、ストライプの文書から、わずかな計画で試用期間があるため、invoice.upcoming.,invoice.payment_succeededおよびcustomer.subscription.trial_will_endです。ストライプWebhookを使用して、ストライプを使用した定期支払いの顧客詳細を送信する

次のように私は自分のアプリケーションでウェブフックエンドポイントを追加しました:

@ResponseBody 
    @RequestMapping(consumes="application/json", produces="application/json", method=RequestMethod.POST, value="/webhook-endpoint") 
    public Response stripeWebhookEndpoint(@RequestBody String stripeJsonEvent) 
    { 
     Event event = Event.GSON.fromJson(stripeJsonEvent, Event.class); 
     String type = event.getType(); 
     StripeObject stripeObject = event.getData().getObject(); 
     return Response.status(Response.Status.OK).build(); 
    } 

私は私のデータベースから顧客を得ることができると送信されますようにevent typeともcustomer Idを取得しようとしていますイベントに基づく電子メール通知。 localhostにwebhook URLがあるので、実際のデータをStripeからトリガーできません。また、私はストライプドキュメントからサンプルデータを見つけることができませんでした:https://stripe.com/docs/api#invoice_object。私もRetrive stripe data from stripe webhook eventを試しましたが、サンプルデータなしでテストすることはできません。

イベントから必要な詳細を取得し、ローカルホストでこれをテストする方法はありますか。

答えて

2

ウェブアプリケーションの開発中に、ローカルホストに送信されたウェブフックを確認するには、ngrokのようなソリューションを使用できます。

ngrokを設定して実行したら、ngrokが提供する一意のURL(例:http://my-super-application.ngrok.io)にWebフックを送信するようにStripeを設定します。

ngrokは、Stripeがローカルアプリケーションに直接データを送信したかのように、Stripeから取得したHTTP要求をローカルマシンに「転送」します。

ngrokの代わりに、他のソリューションをチェックして、 "local tunnel"のキーワードを検索することもできます。

ストライプダッシュボードからStripe webhooksから送信されたデータをチェックするには、[API]メニューの[Webhooks]タブで、テストするエンドポイントに関連する[TEST]ボタンをクリックします。

[Send test webhook]ボタンをクリックすると、「Request」の下にwebhookによって送信されたデータが表示されます。 (そして、あなたがウェブフックがあなたのエンドポイントからの答えを得るために失敗しても、要求を確認することができます)

例えば、invoice.upcomingイベントのために、あなたはこのようなものでしょう:

{ 
    "created": 1326853478, 
    "livemode": false, 
    "id": "evt_00000000000000", 
    "type": "invoice.upcoming", 
    "object": "event", 
    "request": null, 
    "pending_webhooks": 1, 
    "api_version": "2017-06-05", 
    "data": { 
     "object": { 
     "id": null, 
     "object": "invoice", 
     "amount_due": 0, 
     "application_fee": null, 
     "attempt_count": 0, 
     "attempted": true, 
     "charge": null, 
     "closed": true, 
     "currency": "jpy", 
     "customer": "cus_00000000000000", 
     "date": 1503541536, 
     "description": null, 
     "discount": null, 
     "ending_balance": 0, 
     "forgiven": false, 
     "lines": { 
      "data": [ 
      { 
       "id": "sub_BN5yNiTkAlQOye", 
       "object": "line_item", 
       "amount": 500, 
       "currency": "jpy", 
       "description": null, 
       "discountable": true, 
       "livemode": true, 
       "metadata": { 
       }, 
       "period": { 
       "start": 1507604796, 
       "end": 1510283196 
       }, 
       "plan": { 
       "id": "bplan", 
       "object": "plan", 
       "amount": 500, 
       "created": 1504352393, 
       "currency": "jpy", 
       "interval": "month", 
       "interval_count": 1, 
       "livemode": false, 
       "metadata": { 
       }, 
       "name": "B plan", 
       "statement_descriptor": null, 
       "trial_period_days": null 
       }, 
       "proration": false, 
       "quantity": 1, 
       "subscription": null, 
       "subscription_item": "si_1B0LmKE9P3qCpf5erqbpMxkI", 
       "type": "subscription" 
      } 
      ], 
      "total_count": 1, 
      "object": "list", 
      "url": "/v1/invoices/in_1AuB2KE9P3qCpf5ekFh7qpAi/lines" 
     }, 
     "livemode": false, 
     "metadata": { 
     }, 
     "next_payment_attempt": null, 
     "paid": true, 
     "period_end": 1503541536, 
     "period_start": 1503541536, 
     "receipt_number": null, 
     "starting_balance": 0, 
     "statement_descriptor": null, 
     "subscription": "sub_00000000000000", 
     "subtotal": 0, 
     "tax": null, 
     "tax_percent": null, 
     "total": 0, 
     "webhooks_delivered_at": 1503541537 
     } 
    } 
    } 
+0

感謝のイベントdataオブジェクトが含まれていますが、まだどのように私はイベントオブジェクトから顧客IDを取得することができます。私はevent.getUserId()を試してみると、タイプEventからgetUserId()メソッドが廃止されたことを示しています。私が今必要とするのは、イベントタイプと顧客IDです。その顧客に電子メールを送信することができます –

+1

私の答えの前のJSONサンプルによれば、イベントタイプが 'invoice.upcoming'ならば、JSONデータをWebHookから取得し、 'data.object.customer'プロパティを読み込んでCustomer IDを取得します。あなたのユースケースでうまくいくのでしょうか? –

+0

StripeObject stripeObject = event.getData()。getObject();オブジェクトを与えるでしょう。私はまだこのオブジェクトから得意先を得る方法を見ていません。 –

1

dataオブジェクトは、顧客IDがにstringとして受信string

invoice.upcomingについて

invoice.payment_succeededとしてcustomer IDを含みます3210オブジェクトです。 JSON後

は、返信用invoice.upcoming

{ 
    "object": { 
    "object": "invoice", 
    "amount_due": 30000, 
    "application_fee": null, 
    "attempt_count": 0, 
    "attempted": false, 
    "charge": null, 
    "closed": false, 
    "currency": "gbp", 
    "customer": "cus_ATtwlQqRx75cxxx", 
    "date": 1505559958, 
    "description": null, 
    "discount": null, 
    "ending_balance": null, 
    "forgiven": false, 
    "lines": { 
     "object": "list", 
     "data": [ 
     { 
      "id": "sub_AU9VONtkvz9xxx", 
      "object": "line_item", 
      "amount": 30000, 
      "currency": "gbp", 
      "description": null, 
      "discountable": true, 
      "livemode": false, 
      "metadata": { 
      }, 
      "period": { 
      "start": 1505559958, 
      "end": 1508151958 
      }, 
      "plan": { 
      "id": "package_1", 
      "object": "plan", 
      "amount": 30000, 
      "created": 1492282426, 
      "currency": "gbp", 
      "interval": "month", 
      "interval_count": 1, 
      "livemode": false, 
      "metadata": { 
      }, 
      "name": "Package 1", 
      "statement_descriptor": null, 
      "trial_period_days": null 
      }, 
      "proration": false, 
      "quantity": 1, 
      "subscription": null, 
      "subscription_item": "si_1A9BCcJ7IsZfBU9bw4Cxxx", 
      "type": "subscription" 
     } 
     ], 
     "has_more": false, 
     "total_count": 1, 
     "url": "/v1/invoices/in_xxxxxnV9RmPcl/lines" 
    }, 
    "livemode": false, 
    "metadata": { 
    }, 
    "next_payment_attempt": 1505563558, 
    "paid": false, 
    "period_end": 1505559958, 
    "period_start": 1502881558, 
    "receipt_number": null, 
    "starting_balance": 0, 
    "statement_descriptor": null, 
    "subscription": "sub_AU9VONtkvz9xxx", 
    "subtotal": 30000, 
    "tax": null, 
    "tax_percent": null, 
    "total": 30000, 
    "webhooks_delivered_at": null 
    }, 
    "previous_attributes": null 
} 
関連する問題