27
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ngrok で stripe の webhook integration のテストを行う

Last updated at Posted at 2015-12-11

概要

本記事で扱うこと

  • Stripe の webhook をトリガーに Rails アプリ内で処理を実装する方法 (= webhook integration)
  • ローカル開発環境で実装した処理をテストする方法

本記事で扱わないこと

  • Stripe 決済機能自体を Rails アプリに組み込む方法

Stripe について

Stripe はリッチな API や webhooks が用意されている開発者フレンドリーな決済サービスです。
また、購読、トライアル、クーポンなど機能は豊富な一方、マニュアルは十分に整備されており非常に扱いやすいのも特徴です。

ngrok について

ngrok はpublic な URL と localhost とをトンネリングすることができるツールです。

これを使うことで例えば、開発中のアプリをデプロイすることなく、遠隔のメンバーに public な URL を通して触ってもらい、フィードバックをもらう、なんてことが可能です。

今回は ngrok を利用して作成した public な URL を、Stripe Webhook のエンドポイントとして設定し、localhost 内で動作している開発環境にリクエストを再送してもらうことで webhook integration のテストを行います。

アプリの設定

integrallis/stripe_event gem を利用します。
この gem を利用すると stripe から実行される webhook のハンドリングを簡単に記述することができます。

以下ほぼ README の内容のまま。

Gemfile
gem 'stripe_event'
config/routes.rb
mount StripeEvent::Engine, at: '/webhooks/stripe'
config/initializers/stripe.rb
Stripe.api_key = ENV['STRIPE_SECRET_KEY']

StripeEvent.configure do |events|
  events.subscribe 'charge.failed' do |event|
    # Define subscriber behavior based on the event object
    event.class       #=> Stripe::Event
    event.type        #=> "charge.failed"
    event.data.object #=> #<Stripe::Charge:0x3fcb34c115f8>
  end

  events.all do |event|
    # Handle all event types - logging, etc.
  end
end

ngrok のダウンロード & 起動

ngrok より適当にダウンロードし、解答した ngrok スクリプトを PATH の通ったディレクトリに配置します。

起動

$ ngrok http 3000

起動するとフォワード用の URL が自動で生成されます。

ngrok by @inconshreveable                                                                                         (Ctrl+C to quit)
                                                                                                                                  
Tunnel Status                 online                                                                                              
Version                       2.0.19/2.0.19                                                                                       
Web Interface                 http://127.0.0.1:4040                                                                               
Forwarding                    http://YOUR-UNIQUE-UID.ngrok.io -> localhost:3000                                                          
Forwarding                    https://YOUR-UNIQUE-UID.ngrok.io -> localhost:3000                                                         
                                                                                                                                  
Connections                   ttl     opn     rt1     rt5     p50     p90                                                         
                              0       0       0.00    0.00    0.00    0.00                

Stripe の設定

Account Settings -> Webhooks より、ngrok で生成した URL を指定しましょう。

image

http://YOUR-UNIQUE-UID.ngrok.io/webhooks/stripe

テストの実施

あとは stripe 上から customer 情報を修正するなりして webhook を実行しましょう!

Stripe -> ngrok -> localhost

という順番でリクエストがフォワードされていきます。

注意

image

stripe_event gem は受け取ったイベントの id を元に様々な情報を取得します。
stripe 上から実行できる send test webhook によるテストでは固定で evt_00000000000000 を送出し、イベントが見つからず 401 Unauthorized となってしまいます。

テストを行う際には、実際のデータの編集を行うなどしてイベントを発生させるのが楽でしょう。

27
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?