#Stripe + ngrok で local環境で webhook 発行 / webhook再送信のテストをする


問題

stripe cli でも webhook の local でのテストができるが、こちらはあくまでイベントをトリガーする仕様なので、一度発生済みのwebhookを再送する場合は、localに直接リクエストを送ることができない

global なURLを発行してlocalに転送してくれるngrokを利用する

ngrok を起動する

このようなURLが発行される

ここに来たリクエストがlocalに転送される

ngrok http 80
ngrok by @inconshreveable                                                                                                      (Ctrl+C to quit)

Session Status                online
Session Expires               7 hours, 59 minutes
Version                       2.3.35
Region                        United States (us)
Web Interface                 http://127.0.0.1:4040
Forwarding                    http://eb3a6a4a.ngrok.io -> http://localhost:80
Forwarding                    https://eb3a6a4a.ngrok.io -> http://localhost:80

Connections                   ttl     opn     rt1     rt5     p50     p90
                              0       0       0.00    0.00    0.00    0.00


ngrokは起動させたままにしておく

Stripe

Stripeでwebhookのエンドポイントを設定する
発行されたngrokのURL を入力する
トリガーするイベントを設定しておく

Stripeでイベントを発行される処理をする

直接Webhook送信のテストをする

もしくはwebhookがトリガーされる処理を実行する
例えば顧客を作成してみる
事前にwebhook設定でトリガーするイベントとして設定してある必要がある

ngrokでリクエストを確認する

リクエストが飛んできているのが確認できる
http://localhost:80 には何もないので BAD REQEST 扱いになっている状態

HTTP Requests
-------------

POST /                         502 Bad Gateway

node などで local に http サーバーを起動させてから webhook を試す

node ok.js

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello New York\n');
}).listen(80);
console.log('Server running at http://localhost:80/');

200 ok を確認できた例

Webhook再送信

すでに発行済みのwebhookを再送信する場合は、エンドポイントを一時的に ngrok のものに書き換えて再送を試すと良いだろう。

Original by Github issue