StripeのローカルイベントリスナーをGoで用意する
最近、StripeのWebhookの勉強をしている中で、ローカル環境にてイベントを受け取るリスナーを簡単に用意できる方法がStripeから提供されていることを知りました。一部日本語対応していないため備忘録も兼ねて、その手順を本記事にて共有していきたいと思います。
対応言語はRuby, Node, PHP, Python, Go, .NET, Javaと複数用意されています。手順は言語によってほぼ変わらないので、今後カスタマイズする上で個人的に勉強したいGoを使った手順で進めていきます。
導入手順
1, イベントリスナー用アプリのダウンロード
https://stripe.com/docs/webhooks/quickstart のページにて、イベントリスナーのためのアプリが提供されているので「アプリ全体をダウンロード」ボタンを押下後、zipファイルがダウンロードされるので解凍してください。
既にStripeへのログインを済ませていると、アプリ内にシークレットキーを設定されています。未ログインだと、適当な値になっているので自身で書き換えが必要です。
2, アプリの起動
展開したフォルダへ移動し、パッケージをダウンロード、サーバーが起動することを確認します。
% cd stripe-sample-code
% go mod download github.com/stripe/stripe-go/v76
% go run server.go
3, Stripe CLIでイベントを転送設定を行う
テスト環境のイベントをローカルで用意したエンドポイントに送信されるようにするには、Stripe CLIを使う必要があります。以下のコマンドでダウンロードできます。
macOS (他の方法はこちら)
% brew install stripe/stripe-cli/stripe
CLIが使えるようになったら、次のコマンドを叩いて転送設定します。
% stripe login
% stripe listen --forward-to localhost:4242/webhook --latest
4, エンドポイントシークレットをアプリ側に設定する
手順3を実行すると以下のようなメッセージとともにwhsec_XXXXXXXXXXXXXXXXXX
という文字列が表示されるので、アプリ側へ設定します。
% stripe listen --forward-to localhost:4242/webhook --latest
> Ready! You are using Stripe API Version [2022-08-01]. Your webhook signing secret is whsec_XXXXXXXXXXXXXXXXXX (^C to quit)
アプリのServer.go内の設定を上書きします。
// Server.go 45行目付近
endpointSecret := "whsec_..."
5、CLIでイベント発行してみる
再度アプリを起動して、以下のコマンドを叩いて見てください。
% stripe trigger payment_intent.succeeded
問題なく設定が完了していれば、イベントに応じたメッセージが表示されます!
% go run server.go
2024/01/01 00:00:00 Listening on localhost:4242
Unhandled event type: charge.succeeded
2024/01/01 00:01:00 Successful payment for 2000.
Unhandled event type: payment_intent.created
これでローカルイベントリスナーの設定は完了です。躓かなければ、10分もかからず用意できてしまうので是非試してみてください。
転送が有効になっている状態だとテストクロックによるシミュレーションのイベントも受け取ることができるので、今度はこれらを組み合わせてちょっとしたアプリを作ってみようかなと考えてます!