stripe webhook express.raw() rawBody

第一引数はバッファを欲しがってる

stripe.webhooks.constructEvent(req.body, sig, endpointSecret)

バッファの見た目

<Buffer 7b 0a 20 20 22 69 64 22 3a 20 22 65 76 74 5f 31 4a 39 35 41 55 44 52 30 4f 7a 53 72 32 74 4a 53 39 6d 34 77 70 37 77 22 2c 0a 20 20 22 6f 62 6a 65 63 ... 3342 more bytes>  

イベントを発行するとイベントオブジェクトがPOSTされる
stripe trigger payment_intent.succeeded

{
  "id": "evt_1J82DR02tJs6Bq",
  "object": "event",
  "api_version": "2020-03-02",
  "created": 1625237970,
  "data": {...},
  "type": "payment_intent.succeeded"
}

それをバッファに解析したい

だからバッファに解析できる express.raw() を使用する
また、メディアタイプをそれに合わせる
express.raw(type: 'application/json')

しかしながら解析値が格納された req.body はそのまま信用できる形式ではない
なぜなら express のドキュメントにそう書いてあるから

req.body の形状はユーザーが制御する入力に基づいているため、このオブジェクトのすべてのプロパティと値は信頼できないものであり、信頼する前に検証する必要があります。たとえば、req.body.toString() は、複数の方法で失敗する可能性があります。たとえば、複数のパーサーをスタックしている場合、req.body は異なるパーサーのものである可能性があります。バッファメソッドを呼び出す前に、req.body が Buffer であることをテストすることをお勧めします。

とりあえず検証しない
そのため、異なるパーサーに該当する以下をコメント化

// app.use(express.json());

こうすることで、解析したバッファはオブジェクトにならず、バッファのままである