Payment.postman_collection.json 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. {
  2. "info": {
  3. "_postman_id": "dpot-payment-danal-v1",
  4. "name": "DPOT Payment API (Danal PG)",
  5. "description": "다날 PG 결제 연동 API\n\n## 결제 흐름\n1. **주문 생성** → `POST /api/payment/order`\n2. **다날 SDK 결제창 호출** (프론트엔드)\n3. **결제 승인** → `POST /api/payment/confirm`\n4. (선택) **결제 취소** → `POST /api/payment/cancel`\n\n## 사용법\n1. `baseUrl` 변수 설정 (기본값: `https://localhost:4000`)\n2. 로그인 후 `accessToken` 변수에 JWT Bearer 토큰 입력",
  6. "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  7. },
  8. "variable": [
  9. {
  10. "key": "baseUrl",
  11. "value": "https://localhost:4000",
  12. "type": "string",
  13. "description": "API 서버 URL (개발: https://localhost:4000 / 운영: https://api.dpot.web.or.kr)"
  14. },
  15. {
  16. "key": "accessToken",
  17. "value": "",
  18. "type": "string",
  19. "description": "JWT Bearer 토큰 (로그인 후 발급)"
  20. },
  21. {
  22. "key": "orderID",
  23. "value": "",
  24. "type": "string",
  25. "description": "주문 생성 후 저장된 OrderID"
  26. },
  27. {
  28. "key": "transactionID",
  29. "value": "",
  30. "type": "string",
  31. "description": "다날 결제 완료 후 반환된 TransactionID"
  32. }
  33. ],
  34. "auth": {
  35. "type": "bearer",
  36. "bearer": [
  37. {
  38. "key": "token",
  39. "value": "{{accessToken}}",
  40. "type": "string"
  41. }
  42. ]
  43. },
  44. "item": [
  45. {
  46. "name": "1. 주문 생성",
  47. "request": {
  48. "method": "POST",
  49. "header": [
  50. {
  51. "key": "Content-Type",
  52. "value": "application/json"
  53. }
  54. ],
  55. "url": {
  56. "raw": "{{baseUrl}}/api/payment/order",
  57. "host": ["{{baseUrl}}"],
  58. "path": ["api", "payment", "order"]
  59. },
  60. "body": {
  61. "mode": "raw",
  62. "raw": "{\n \"amount\": 10000,\n \"paymentMethod\": \"Card\"\n}",
  63. "options": {
  64. "raw": {
  65. "language": "json"
  66. }
  67. }
  68. },
  69. "description": "금액과 결제수단으로 주문을 생성합니다.\n\n**결제수단 (`paymentMethod`):**\n- `Card` — 신용카드\n- `KakaoPay` — 카카오페이\n- `NaverPay` — 네이버페이\n- `Transfer` — 계좌이체\n- `Mobile` — 휴대폰\n- `VirtualAccount` — 가상계좌\n- `Payco` — 페이코\n\n**응답 저장 (Tests 탭 스크립트로 자동 저장):**\n```\npm.collectionVariables.set('orderID', pm.response.json().data.orderID);\n```"
  70. },
  71. "event": [
  72. {
  73. "listen": "test",
  74. "script": {
  75. "type": "text/javascript",
  76. "exec": [
  77. "const res = pm.response.json();",
  78. "if (res.success && res.data && res.data.orderID) {",
  79. " pm.collectionVariables.set('orderID', res.data.orderID);",
  80. " console.log('orderID saved:', res.data.orderID);",
  81. "}"
  82. ]
  83. }
  84. }
  85. ]
  86. },
  87. {
  88. "name": "2. 결제 승인",
  89. "request": {
  90. "method": "POST",
  91. "header": [
  92. {
  93. "key": "Content-Type",
  94. "value": "application/json"
  95. }
  96. ],
  97. "url": {
  98. "raw": "{{baseUrl}}/api/payment/confirm",
  99. "host": ["{{baseUrl}}"],
  100. "path": ["api", "payment", "confirm"]
  101. },
  102. "body": {
  103. "mode": "raw",
  104. "raw": "{\n \"orderID\": \"{{orderID}}\",\n \"transactionID\": \"{{transactionID}}\",\n \"method\": \"CARD\"\n}",
  105. "options": {
  106. "raw": {
  107. "language": "json"
  108. }
  109. }
  110. },
  111. "description": "다날 결제창 완료 후 서버 승인 API를 호출합니다.\n\n**`method` 값 (다날 결제수단 코드):**\n- `CARD` — 신용카드\n- `KAKAOPAY` — 카카오페이\n- `NAVERPAY` — 네이버페이\n- `TRANSFER` — 계좌이체\n- `MOBILE` — 휴대폰\n- `VIRTUAL_ACCOUNT` — 가상계좌\n\n**응답:**\n```json\n{\n \"success\": true,\n \"pointAmount\": 10000,\n \"message\": \"충전이 완료되었습니다.\",\n \"paidAt\": \"2026-03-26T03:30:00Z\"\n}\n```"
  112. },
  113. "event": [
  114. {
  115. "listen": "test",
  116. "script": {
  117. "type": "text/javascript",
  118. "exec": [
  119. "const res = pm.response.json();",
  120. "if (res.data) {",
  121. " console.log('pointAmount:', res.data.pointAmount);",
  122. " console.log('paidAt:', res.data.paidAt);",
  123. "}"
  124. ]
  125. }
  126. }
  127. ]
  128. },
  129. {
  130. "name": "3. 결제 취소",
  131. "request": {
  132. "method": "POST",
  133. "header": [
  134. {
  135. "key": "Content-Type",
  136. "value": "application/json"
  137. }
  138. ],
  139. "url": {
  140. "raw": "{{baseUrl}}/api/payment/cancel",
  141. "host": ["{{baseUrl}}"],
  142. "path": ["api", "payment", "cancel"]
  143. },
  144. "body": {
  145. "mode": "raw",
  146. "raw": "{\n \"orderID\": \"{{orderID}}\"\n}",
  147. "options": {
  148. "raw": {
  149. "language": "json"
  150. }
  151. }
  152. },
  153. "description": "결제 완료(Paid) 상태의 주문을 전액 취소합니다.\n\n- `Paid` 상태 주문만 취소 가능\n- 다날 취소 API 호출 후 지갑 포인트 차감\n- 성공 시 HTTP 200, 실패 시 400/500 반환"
  154. }
  155. },
  156. {
  157. "name": "4. 클라이언트 설정 조회",
  158. "request": {
  159. "method": "GET",
  160. "header": [],
  161. "url": {
  162. "raw": "{{baseUrl}}/api/payment/config",
  163. "host": ["{{baseUrl}}"],
  164. "path": ["api", "payment", "config"]
  165. },
  166. "description": "프론트엔드 다날 SDK 호출에 필요한 `clientKey`와 `merchantID`를 반환합니다.\n\n**응답:**\n```json\n{\n \"clientKey\": \"test_ck_...\",\n \"merchantID\": \"T0000000000\"\n}\n```"
  167. }
  168. },
  169. {
  170. "name": "5. 가상계좌 입금 통보 (Webhook)",
  171. "request": {
  172. "method": "POST",
  173. "header": [
  174. {
  175. "key": "Content-Type",
  176. "value": "application/json"
  177. }
  178. ],
  179. "url": {
  180. "raw": "{{baseUrl}}/api/payment/noti/vaccount",
  181. "host": ["{{baseUrl}}"],
  182. "path": ["api", "payment", "noti", "vaccount"]
  183. },
  184. "body": {
  185. "mode": "raw",
  186. "raw": "{\n \"code\": \"SUCCESS\",\n \"message\": \"입금완료\",\n \"transactionID\": \"TX-TEST-001\",\n \"orderID\": \"{{orderID}}\",\n \"amount\": \"10000\"\n}",
  187. "options": {
  188. "raw": {
  189. "language": "json"
  190. }
  191. }
  192. },
  193. "auth": {
  194. "type": "noauth"
  195. },
  196. "description": "다날 서버에서 가상계좌 입금 완료 시 호출하는 서버-투-서버 Webhook입니다.\n\n- **인증 불필요** (AllowAnonymous)\n- 다날 서버 IP: `150.242.132.116`\n- 입금 확인 후 포인트 자동 적립\n- `amount` 필드는 **문자열** 형식\n\n**성공 응답:**\n```json\n{ \"code\": \"SUCCESS\" }\n```\n\n**실패 응답:**\n```json\n{ \"code\": \"FAIL\" }\n```"
  197. }
  198. }
  199. ]
  200. }