Webhook 이벤트 처리 코드 예시가 있나요?

Webhook을 수신하여 처리하는 코드 예시입니다.

Express.js (Node.js) Webhook 처리

const express = require('express')
const crypto = require('crypto')
const app = express()

app.post('/webhook/pactery', express.raw({ type: 'application/json' }), (req, res) => {
  // 1. 서명 검증
  const signature = req.headers['x-pactery-signature']
  const expected = crypto
    .createHmac('sha256', process.env.WEBHOOK_SECRET)
    .update(req.body)
    .digest('hex')

  if (signature !== `sha256=${expected}`) {
    return res.status(401).send('Unauthorized')
  }

  // 2. 이벤트 처리
  const event = JSON.parse(req.body)

  switch (event.type) {
    case 'document.completed':
      handleDocumentCompleted(event.data)
      break
    case 'signature.declined':
      handleDeclined(event.data)
      break
  }

  res.status(200).send('OK')
})

Webhook 서명 검증의 중요성

  • 외부에서 가짜 Webhook 요청을 보낼 수 있음
  • 반드시 서명(HMAC-SHA256) 검증 후 처리