#Stripe CLI で local 環境で Webhook のテストをしたいのだが

# Ref

[Using the Stripe CLI | Stripe](https://stripe.com/docs/stripe-cli)

>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](https://ngrok.com/)

>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 サーバーを起動させて待ち受ければ良いかと思うけど、まだうまく動作させられてない

![image](https://user-images.githubusercontent.com/13635059/70005646-b0ebf280-15ad-11ea-8bd9-a87cba2b22e8.png)

https://github.com/stripe/stripe-node/blob/master/examples/webhook-signing/express.js

```
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を合わせるなどして試してみたが








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->