webhook test - nicepayments/nicepay-manual GitHub Wiki

์›นํ›… ํ…Œ์ŠคํŠธ ๊ฐ€์ด๋“œ

์‹ค์ œ ๊ฒฐ์ œ ํ”Œ๋กœ์šฐ๋ฅผ ํ†ตํ•ด ์›นํ›… ์ˆ˜์‹ ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ , ์•ˆ์ •์„ฑ ๋ฐ ๋ณด์•ˆ์„ ๊ฒ€์ฆํ•˜๋Š” ์‹ค์šฉ ๊ฐ€์ด๋“œ์ž…๋‹ˆ๋‹ค.


1. ํ…Œ์ŠคํŠธ ์ค€๋น„

๋ณธ๊ฒฉ์ ์ธ ํ…Œ์ŠคํŠธ ์ „์—, ์›นํ›…์„ ์ˆ˜์‹ ํ•˜๊ณ  ๋””๋ฒ„๊น…ํ•  ํ™˜๊ฒฝ์„ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค.

ํ•„์ˆ˜ ํ™•์ธ ์‚ฌํ•ญ

  • ์›นํ›… URL ๋“ฑ๋ก ์™„๋ฃŒ: ๋“ฑ๋ก ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•˜๋ ค๋Š” ์ด๋ฒคํŠธ(card, vbank ๋“ฑ)์˜ URL์„ ๋ฏธ๋ฆฌ ๋“ฑ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์›นํ›… ์—”๋“œํฌ์ธํŠธ ์„œ๋ฒ„ ์‹คํ–‰ ์ค‘: ์›นํ›…์„ ์ˆ˜์‹ ํ•  ๊ฐ€๋งน์  ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰ ์ƒํƒœ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฒฐ์ œ์ฐฝ ์—ฐ๋™ ์™„๋ฃŒ: ํ…Œ์ŠคํŠธ ๊ฒฐ์ œ๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฐ์ œ์ฐฝ์ด ์ค€๋น„๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ์ •๋ณด

๊ตฌ๋ถ„ ์ƒŒ๋“œ๋ฐ•์Šค ์šด์˜
ClientId S1_, S2_ prefix R1_, R2_ prefix
API sandbox-api.nicepay.co.kr api.nicepay.co.kr
ํ…Œ์ŠคํŠธ ์นด๋“œ 5465-2100-0000-0003 ์‹ค์ œ ์นด๋“œ ํ•„์š”

๋กœ์ปฌ ํ…Œ์ŠคํŠธ ๋„๊ตฌ (ngrok)

์‚ฌ์šฉ ์˜ˆ์‹œ

# 1. ngrok ์„ค์น˜ (macOS, Homebrew ๊ธฐ์ค€)
brew install ngrok

# 2. ๋กœ์ปฌ ์„œ๋ฒ„(์˜ˆ: 3000๋ฒˆ ํฌํŠธ)์— ํ„ฐ๋„ ์ƒ์„ฑ
ngrok http 3000

์˜ˆ์ƒ ๊ฒฐ๊ณผ

Forwarding   https://<๋žœ๋ค ์ฃผ์†Œ>.ngrok-free.app -> http://localhost:3000

์œ„ Forwarding ์ฃผ์†Œ(https://...)๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ์›นํ›… URL๋กœ ๋“ฑ๋กํ•˜๋ฉด, ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ์›นํ›…์„ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋””๋ฒ„๊น… ๋„๊ตฌ (webhook.site)

์„œ๋ฒ„๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๊ธฐ ์ „์— ์›นํ›…์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋‚˜ ํ—ค๋”๋ฅผ ํ™•์ธํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

  1. webhook.site ์ ‘์†ํ•˜์—ฌ ๊ณ ์œ  URL์„ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ณต์‚ฌํ•œ URL์„ NICEPAY ์›นํ›… URL๋กœ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.
  3. ํ…Œ์ŠคํŠธ ๊ฒฐ์ œ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด, ํ•ด๋‹น ์‚ฌ์ดํŠธ์˜ ์›น UI์—์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ˆ˜์‹ ๋œ ์›นํ›… ์š”์ฒญ์„ ๋ชจ๋“  ๋‚ด์šฉ(Header, Body)๊ณผ ํ•จ๊ป˜ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. ํ•ต์‹ฌ ๊ฒ€์ฆ: Signature

๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ณด์•ˆ ์ ˆ์ฐจ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ์‹œ๋‚˜๋ฆฌ์˜ค ํ…Œ์ŠคํŠธ์— ์•ž์„œ, Signature ๊ฒ€์ฆ ๋กœ์ง์„ ์ตœ์šฐ์„ ์œผ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Signature ๊ฒ€์ฆ์€ ์ˆ˜์‹ ํ•œ ์›นํ›…์ด NICEPAY๊ฐ€ ๋ณด๋‚ธ ์›๋ณธ ์š”์ฒญ์ด ๋งž๋Š”์ง€, ์ค‘๊ฐ„์— ๋ฐ์ดํ„ฐ๊ฐ€ ์œ„๋ณ€์กฐ๋˜์ง€๋Š” ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ์ด ์ ˆ์ฐจ ์—†์ด๋Š” ์›นํ›…์„ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด๋ฒคํŠธ๋ณ„ Signature ๊ฒ€์ฆ ๊ณต์‹

์›นํ›… ์ด๋ฒคํŠธ(status)์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ Signature๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ•„๋“œ ์กฐํ•ฉ์ด ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

status Signature ์ƒ์„ฑ ํ•„๋“œ (+๋กœ ๋ฌธ์ž์—ด ์—ฐ๊ฒฐ)
paid tid + amount + ediDate + secretKey
cancelled tid + cancelAmt + ediDate + secretKey
ready tid + amount + vbankExpDate + secretKey

SecretKey ์ •๋ณด ๊ฒ€์ฆ์— ์‚ฌ์šฉ๋˜๋Š” secretKey๋Š” ๊ฐ€๋งน์  ๊ด€๋ฆฌ์ž์— ๋“ฑ๋ก๋œ 48์ž์˜ SecretKey ์ „์ฒด๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.


3. ์‹œ๋‚˜๋ฆฌ์˜ค๋ณ„ ํ…Œ์ŠคํŠธ

ํ•ต์‹ฌ ๊ฒ€์ฆ ๋กœ์ง์ด ์ค€๋น„๋˜์—ˆ๋‹ค๋ฉด, ์ด์ œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ณ„๋กœ ์›นํ›…์„ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.

์นด๋“œ ๊ฒฐ์ œ ํ…Œ์ŠคํŠธ

  1. ๊ฒฐ์ œ ์ง„ํ–‰: ์ƒŒ๋“œ๋ฐ•์Šค ๊ฒฐ์ œ์ฐฝ์—์„œ ์•„๋ž˜ ํ…Œ์ŠคํŠธ ์นด๋“œ๋กœ ๊ฒฐ์ œ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • ์นด๋“œ๋ฒˆํ˜ธ: 5465-2100-0000-0003
    • ์œ ํšจ๊ธฐ๊ฐ„: 25/12
    • CVC: 123
  2. ์›นํ›… ์ˆ˜์‹ : ๊ฒฐ์ œ ์™„๋ฃŒ ์‹œ status: "paid"์ธ ์›นํ›…์ด ์ˆ˜์‹ ๋ฉ๋‹ˆ๋‹ค.
  3. ๊ฒ€์ฆ:
    • ์ˆ˜์‹ ๋œ ์›นํ›…์˜ Signature๊ฐ€ ์œ„ 2๋‹จ๊ณ„์—์„œ ๊ตฌํ˜„ํ•œ ๋กœ์ง์— ๋”ฐ๋ผ ๊ฒ€์ฆ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    • tid, orderId, amount ๋“ฑ ์ฃผ์š” ์ •๋ณด๊ฐ€ ์˜ˆ์ƒ๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์ƒ๊ณ„์ขŒ ํ…Œ์ŠคํŠธ

๊ฐ€์ƒ๊ณ„์ขŒ๋Š” **'๋ฐœ๊ธ‰'**๊ณผ '์ž…๊ธˆ' ์‹œ์ ์— ๊ฐ๊ฐ ์›นํ›…์ด ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

  1. 1์ฐจ ์›นํ›… (๋ฐœ๊ธ‰):
    • ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ•: ๊ฐ€์ƒ๊ณ„์ขŒ ๊ฒฐ์ œ๋ฅผ ์‹œ๋„ํ•˜์—ฌ ๊ณ„์ขŒ๋ฒˆํ˜ธ๋ฅผ ๋ฐœ๊ธ‰๋ฐ›์Šต๋‹ˆ๋‹ค.
    • ์ˆ˜์‹  ๋‚ด์šฉ: status: "ready"์ธ ์›นํ›…์ด ์ˆ˜์‹ ๋˜๋ฉฐ, vbank ๊ฐ์ฒด์— ๊ณ„์ขŒ ์ •๋ณด๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
    • ๊ฒ€์ฆ: ready ์ƒํƒœ์— ๋งž๋Š” Signature ๊ณต์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒ€์ฆ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  2. 2์ฐจ ์›นํ›… (์ž…๊ธˆ):
    • ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ•: ์‹ค์ œ ์ž…๊ธˆ ์—†์ด, ์ƒŒ๋“œ๋ฐ•์Šค ์ž…๊ธˆ์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•ฉ๋‹ˆ๋‹ค.

      ์ƒŒ๋“œ๋ฐ•์Šค ๊ฐ€๋งน์ ๊ด€๋ฆฌ์ž ๋กœ๊ทธ์ธ โ†’ 'ํ…Œ์ŠคํŠธ > ๊ฐ€์ƒ๊ณ„์ขŒ ์ž…๊ธˆํ†ต๋ณด' ๋ฉ”๋‰ด์—์„œ ๋ฐœ๊ธ‰๋œ ์›นํ›…์˜ tid๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์ž…๊ธˆ์„ ๊ฐ•์ œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ์ˆ˜์‹  ๋‚ด์šฉ: status: "paid"์ธ ์›นํ›…์ด ์ˆ˜์‹ ๋˜๋ฉฐ, paidAt ํ•„๋“œ๊ฐ€ ์ฑ„์›Œ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๊ฒ€์ฆ: paid ์ƒํƒœ์— ๋งž๋Š” Signature ๊ณต์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒ€์ฆ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ์ œ ์ทจ์†Œ ํ…Œ์ŠคํŠธ

  1. ๊ฒฐ์ œ ์ง„ํ–‰: ๋จผ์ € ์นด๋“œ ๊ฒฐ์ œ๋ฅผ ์„ฑ๊ณต์‹œ์ผœ tid๋ฅผ ํ™•๋ณดํ•ฉ๋‹ˆ๋‹ค.
  2. ์ทจ์†Œ API ํ˜ธ์ถœ: ํ•ด๋‹น tid๋กœ ๊ฒฐ์ œ ์ทจ์†Œ API๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  3. ์›นํ›… ์ˆ˜์‹ : status: "cancelled"์ธ ์›นํ›…์ด ์ˆ˜์‹ ๋ฉ๋‹ˆ๋‹ค.
  4. ๊ฒ€์ฆ:
    • cancelled ์ƒํƒœ์— ๋งž๋Š” Signature ๊ณต์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒ€์ฆ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    • cancelAmt๊ฐ€ ์š”์ฒญํ•œ ์ทจ์†Œ ๊ธˆ์•ก๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

4. ์ตœ์ข… ์ ๊ฒ€

๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ๋งˆ์นœ ํ›„, ์•„๋ž˜ ํ•ญ๋ชฉ์„ ์ตœ์ข…์ ์œผ๋กœ ์ ๊ฒ€ํ•ฉ๋‹ˆ๋‹ค.

ํ•„์ˆ˜ ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค

  • ์นด๋“œ ๊ฒฐ์ œ ์›นํ›… (paid)
  • ๊ฐ€์ƒ๊ณ„์ขŒ ๋ฐœ๊ธ‰ ์›นํ›… (ready)
  • ๊ฐ€์ƒ๊ณ„์ขŒ ์ž…๊ธˆ ์›นํ›… (paid)
  • ๊ฒฐ์ œ ์ทจ์†Œ ์›นํ›… (cancelled)

ํ•„์ˆ˜ ๊ฒ€์ฆ ๋กœ์ง

  • ๋ชจ๋“  ์›นํ›…์— ๋Œ€ํ•ด Signature ๊ฒ€์ฆ์„ ์ˆ˜ํ–‰ํ•˜๋Š”๊ฐ€?
  • ๋ชจ๋“  ์›นํ›… ์ˆ˜์‹  ์‹œ **200 OK**๋ฅผ ์ฆ‰์‹œ ์‘๋‹ตํ•˜๋Š”๊ฐ€?
  • 1-Transaction ๋ฐฉ์‹์˜ ๊ฒฝ์šฐ, ์ค‘๋ณต ์ฒ˜๋ฆฌ ๋ฐฉ์ง€ ๋กœ์ง์ด ์ •์ƒ ๋™์ž‘ํ•˜๋Š”๊ฐ€?
  • DB์— ์ €์žฅ๋œ ์ฃผ๋ฌธ ์ •๋ณด(๊ธˆ์•ก, ์ƒํƒœ ๋“ฑ)๊ฐ€ ์›นํ›… ๋‚ด์šฉ๊ณผ ์ผ์น˜ํ•˜๊ฒŒ ์—…๋ฐ์ดํŠธ๋˜๋Š”๊ฐ€?

5. ๋‹ค์Œ ๋‹จ๊ณ„

โš ๏ธ **GitHub.com Fallback** โš ๏ธ