#Stripe CLI で local 環境で Webhook のテストをしたいのだが
Ref
Securely test webhooks without relying on third-party tunneling software.
Trigger webhook events to easily test your integration.
サードパーティーのトンネリング用のソフトウェアを使わずにwebhookのテストができるようだ
トンネリング用のソフトウェア = ngrok とか?
ngrok - secure introspectable tunnels to localhost
Tail API request logs in real time.
Create, retrieve, update, and delete API objects.
あとAPI リクエストをめちゃくちゃ簡単に送れるみたいだ
シークレットキーノオ指定とか面倒だもんね
インストール
Stripe CLI をインストールしておく
Macなら
brew install stripe/stripe-cli/stripe
Listenする
ここでweb hook用のSecretが発行されるが、今回は特に使わない (どこでどうやって使うんだ)
stripe listen
> Ready! Your webhook signing secret is whsec_XXXXXXXXX (^C to quit)
イベント発行
別のコンソールのウィンドウでイベントを発行する
stripe payment_intents create --amount=100 --currency=usd
イベントをキャッチしたことを確認
listenしたコンソールのウィンドウを見ると、イベントがキャッチされているのが分かる
stripe listen
> Ready! Your webhook signing secret is whsec_XXXXXXXXX (^C to quit)
2019-12-03 08:36:17 --> payment_intent.created [evt_1FlORACmti5jpytUbQhFVqeN]
2019-12-03 08:36:32 --> payment_intent.created [evt_1FlOROCmti5jpytUzmQDC9LV]
一旦 Command+C で終了させておく
port を指定して listen して転送する
Stripe CLI が webhook を受け取ると 特定のURLにリクエストを forward してくれるみたいだ
たぶんそうだ
$ stripe listen --forward-to localhost:5000/hooks --latest
> Ready! Your webhook signing secret is whsec_XXXXXXXXXXXXX (^C to quit)
イベント発行
stripe payment_intents create --amount=100 --currency=usd
http://localhost:5000/hooks に接続しに行こうとするが、そこでエラーで落ちる
http://localhost:5000/hooks での処理を実装しておく必要があるよね
(Webhookってそういうこと)
ですよね forward ですもんね
$ stripe listen --forward-to localhost:5000/hooks --latest
> Ready! Your webhook signing secret is whsec_XXXXXXXXXXXXXXXXXXXX (^C to quit)
2019-12-03 08:44:04 --> payment_intent.created [evt_1FlOYhCmti5jpytUp2XiyRCe]
2019-12-03 08:44:04 [ERROR] Failed to POST: Post http://localhost:5000/hooks: dial tcp [::1]:5000: connect: connection refused
node
node で http サーバーを起動させて待ち受ければ良いかと思うけど、まだうまく動作させられてない
const stripe = require('stripe')(process.env.STRIPE_API_KEY);
const express = require('express');
const bodyParser = require('body-parser');
/**
* You'll need to make sure this is externally accessible. ngrok (https://ngrok.com/)
* makes this really easy.
*
* To run this file, just provide your Secret API Key and Webhook Secret, like so:
* STRIPE_API_KEY=sk_test_XXX WEBHOOK_SECRET=whsec_XXX node express.js
*/
const webhookSecret = process.env.WEBHOOK_SECRET;
const app = express();
// Stripe requires the raw body to construct the event
app.post(
'/webhooks',
bodyParser.raw({type: 'application/json'}),
(req, res) => {
const sig = req.headers['stripe-signature'];
let event;
try {
event = stripe.webhooks.constructEvent(req.body, sig, webhookSecret);
} catch (err) {
// On error, return the error message
return res.status(400).send(`Webhook Error: ${err.message}`);
}
// Do something with event
console.log('Success:', event.id);
// Return a response to acknowledge receipt of the event
res.json({received: true});
}
);
app.listen(3000, () => {
console.log('Example app listening on port 3000!');
});
ここのportを変えて
listenの対象URLを合わせるなどして試してみたが
チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
公開日時
2019-12-04
Discussion