{
  "info": {
    "_postman_id": "dpot-payment-danal-v1",
    "name": "DPOT Payment API (Danal PG)",
    "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 토큰 입력",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://localhost:4000",
      "type": "string",
      "description": "API 서버 URL (개발: https://localhost:4000 / 운영: https://api.dpot.web.or.kr)"
    },
    {
      "key": "accessToken",
      "value": "",
      "type": "string",
      "description": "JWT Bearer 토큰 (로그인 후 발급)"
    },
    {
      "key": "orderID",
      "value": "",
      "type": "string",
      "description": "주문 생성 후 저장된 OrderID"
    },
    {
      "key": "transactionID",
      "value": "",
      "type": "string",
      "description": "다날 결제 완료 후 반환된 TransactionID"
    }
  ],
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{accessToken}}",
        "type": "string"
      }
    ]
  },
  "item": [
    {
      "name": "1. 주문 생성",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/api/payment/order",
          "host": ["{{baseUrl}}"],
          "path": ["api", "payment", "order"]
        },
        "body": {
          "mode": "raw",
          "raw": "{\n  \"amount\": 10000,\n  \"paymentMethod\": \"Card\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        },
        "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```"
      },
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "const res = pm.response.json();",
              "if (res.success && res.data && res.data.orderID) {",
              "    pm.collectionVariables.set('orderID', res.data.orderID);",
              "    console.log('orderID saved:', res.data.orderID);",
              "}"
            ]
          }
        }
      ]
    },
    {
      "name": "2. 결제 승인",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/api/payment/confirm",
          "host": ["{{baseUrl}}"],
          "path": ["api", "payment", "confirm"]
        },
        "body": {
          "mode": "raw",
          "raw": "{\n  \"orderID\": \"{{orderID}}\",\n  \"transactionID\": \"{{transactionID}}\",\n  \"method\": \"CARD\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        },
        "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```"
      },
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "const res = pm.response.json();",
              "if (res.data) {",
              "    console.log('pointAmount:', res.data.pointAmount);",
              "    console.log('paidAt:', res.data.paidAt);",
              "}"
            ]
          }
        }
      ]
    },
    {
      "name": "3. 결제 취소",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/api/payment/cancel",
          "host": ["{{baseUrl}}"],
          "path": ["api", "payment", "cancel"]
        },
        "body": {
          "mode": "raw",
          "raw": "{\n  \"orderID\": \"{{orderID}}\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        },
        "description": "결제 완료(Paid) 상태의 주문을 전액 취소합니다.\n\n- `Paid` 상태 주문만 취소 가능\n- 다날 취소 API 호출 후 지갑 포인트 차감\n- 성공 시 HTTP 200, 실패 시 400/500 반환"
      }
    },
    {
      "name": "4. 클라이언트 설정 조회",
      "request": {
        "method": "GET",
        "header": [],
        "url": {
          "raw": "{{baseUrl}}/api/payment/config",
          "host": ["{{baseUrl}}"],
          "path": ["api", "payment", "config"]
        },
        "description": "프론트엔드 다날 SDK 호출에 필요한 `clientKey`와 `merchantID`를 반환합니다.\n\n**응답:**\n```json\n{\n  \"clientKey\": \"test_ck_...\",\n  \"merchantID\": \"T0000000000\"\n}\n```"
      }
    },
    {
      "name": "5. 가상계좌 입금 통보 (Webhook)",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/api/payment/noti/vaccount",
          "host": ["{{baseUrl}}"],
          "path": ["api", "payment", "noti", "vaccount"]
        },
        "body": {
          "mode": "raw",
          "raw": "{\n  \"code\": \"SUCCESS\",\n  \"message\": \"입금완료\",\n  \"transactionID\": \"TX-TEST-001\",\n  \"orderID\": \"{{orderID}}\",\n  \"amount\": \"10000\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        },
        "auth": {
          "type": "noauth"
        },
        "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```"
      }
    }
  ]
}
