@nicepay/start-api-mcp
Version:
NICEPAY 결제 연동을 위한 MCP 툴 (https://start.nicepay.co.kr)
1,404 lines (1,325 loc) • 96 kB
YAML
openapi: 3.1.0
info:
title: NICEPAY 통합 API
version: 0.0.1
summary: NICEPAY의 모든 API 기능을 포함하는 통합 명세서
description: 클라이언트 결제창 호출부터 서버 최종 승인까지, 전체 결제를 위한 명세서
servers:
- url: https://sandbox-api.nicepay.co.kr
description: 개발 및 테스트용 샌드박스 서버
- url: https://api.nicepay.co.kr
description: 실제 운영 환경용 프로덕션 서버
paths:
#==================================================================
# 결제 (Payment Process)
#==================================================================
/v1/ui/payment-window:
post:
summary: "[1단계: 클라이언트] NICEPAY JS SDK 기반 결제창 호출 코드 생성. `AUTHNICE.requestPay()` 실행을 위한 HTML 스니펫을 반환하며, 인증 실패 처리 위한 `fnError` 콜백 필요."
description: |
NICEPAY 결제 흐름 **1단계(클라이언트)** 에 해당
이 툴은 JavaScript SDK 방식 결제창 호출 코드(JS 및 HTML) 생성
**사용 조건:**
- `AUTHNICE.requestPay()` 메서드 사용, NICEPAY JS SDK 스크립트 HTML에 포함 필요
- `fnError` 콜백은 인증 실패/취소 처리 위해 필수
- 생성된 코드는 웹사이트에 직접 삽입 가능
**다음 단계:**
- 결제 인증 성공 시 `returnUrl`로 전달되는 `tid`는 서버에서 `approve_payment` API 호출 시 사용
operationId: create_payment_window
tags:
- "결제"
x-mcp-client-tool: true
requestBody:
description: 결제창에 필요한 초기 정보 입력
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PaymentWindowRequest'
callbacks:
onPaymentAuthenticated:
$ref: '#/components/callbacks/PaymentAuthCallback'
responses:
'200':
description: 결제창 호출 HTML/JS 코드가 성공적으로 생성
x-js-sdk:
scriptUrl: "https://pay.nicepay.co.kr/v1/js/"
globalMethod: "AUTHNICE.requestPay"
requiredCallbacks:
- name: "fnError"
description: "결제 실패 또는 취소 시 반드시 호출되는 콜백 함수"
x-mcp-template: |
<!DOCTYPE html>
<html>
<head>
<title>NICEPAY 결제 요청</title>
<script src="https://pay.nicepay.co.kr/v1/js/"></script>
</head>
<body>
<button onclick="requestPay()">결제하기</button>
<script>
function requestPay() {
AUTHNICE.requestPay({
clientId: "YOUR_CLIENT_ID",
method: "card",
orderId: "ORDER123456",
amount: 10000,
goodsName: "샘플 상품",
returnUrl: "https://your.site.com/payment/result",
fnError: function (result) {
alert(result.errorMsg);
}
});
}
</script>
</body>
</html>
/v1/payments/{tid}:
post:
summary: "[2단계: 서버] 결제 승인을 위한 API 호출 정보 제공"
description: |
NICEPAY 결제 흐름 **2단계(서버)** 로, 클라이언트 측 인증 후 결제 승인을 진행
**이 툴 목적:**
- 직접 결제 처리하지 않으며, 서버에서 사용할 **API 호출 사양(JSON)** 반환
- 반환값에는 HTTP 메서드, URL, 헤더, 바디 등 API 호출을 구성하는 필수 정보가 포함
**사용 시나리오:**
1. 먼저 `create_payment_window` 툴을 통해 `tid` 발급 필요
2. 본 툴을 호출하면, 결제 승인에 필요한 API 호출 구조가 반환
3. 이 JSON을 바탕으로 원하는 언어(Python, Node.js 등)로 서버 코드 생성해 호출하면 실제 결제 완료
operationId: approve_payment
x-mcp-prerequisites:
- create_payment_window
tags:
- "결제"
parameters:
- name: tid
in: path
required: true
schema:
type: string
example: "nicuntct1m0101210727200708A058"
description: "[1단계]에서 발급된 고유 거래 ID"
requestBody:
description: 결제 승인에 필요한 정보 전달.
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ApprovalRequest'
responses:
'200':
description: 결제 승인 성공
content:
application/json:
schema:
$ref: '#/components/schemas/PaymentResponse'
/v1/payments/{tid}/cancel:
post:
summary: "[3단계: 서버] 결제 취소 위한 API 호출 정보 제공"
description: |
**이 툴은 결제 취소 API 호출하는 데 필요한 정보 JSON 형식으로 반환**
모델은 이 정보 바탕으로, 사용자가 요청하는 프로그래밍 언어에 맞는 서버 코드 생성 필요
부분 취소와 전체 취소 모두 지원
operationId: cancel_payment
x-mcp-prerequisites:
- approve_payment
tags:
- "결제"
parameters:
- name: tid
in: path
required: true
schema:
type: string
example: "nicuntct1m0101210727200708A058"
description: "취소할 원거래 거래 ID"
requestBody:
description: 결제 취소에 필요한 정보 전달
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CancelRequest'
responses:
'200':
description: 결제 취소 성공. 응답은 결제 승인과 동일 구조
content:
application/json:
schema:
$ref: '#/components/schemas/PaymentResponse'
#==================================================================
# 정기결제
#==================================================================
/v1/subscribe/regist:
post:
summary: "[서버] 빌링키(정기결제 키) 발급을 위한 암호화 요청 정보 반환"
description: |
**이 MCP 툴은 암호화된 카드 정보 포함한 API 요청을 생성하기 위한 정보 반환**
모델은 다음 절차에 따라, 사용자가 요청한 언어에 맞는 **암호화 포함 실행 코드 생성 필요**
### 암호화 전처리 순서
1. `BillingKeyData` 필드 기반으로 `key=value`& 연결 형태 평문 쿼리 문자열을 생성
2. 해당 평문을 AES-256-CBC 방식으로 암호화. (IV 포함, SecretKey는 사용자가 입력)
3. 암호화된 바이트 스트림을 Hex 인코딩하여 `encData` 문자열을 만듭니다
4. 이 `encData`를 `requestBody`에 포함하여 API를 호출하는 코드 생성
> 예시 평문:
> `cardNo=4111111111111111&expYear=25&expMonth=12&birth=900101&cardPw=11`
- 이 툴은 `encData`를 직접 생성하지 않으며, 모델 책임
- 모델은 응답값을 사용하여 암호화 전처리 및 API 호출 코드 **직접 생성**
operationId: create_billing_key
tags:
- "정기결제"
x-mcp-client-tool: true
x-mcp-encryption-guide:
encryption:
algorithm: AES-256-CBC
keyLength: 256
ivRequired: true
encoding: hex
sourceFields: [cardNo, expYear, expMonth, birth, cardPw]
format: "key=value&key=value..."
samplePlaintext: "cardNo=4111111111111111&expYear=25&expMonth=12&birth=900101&cardPw=11"
languageTargets: [javascript, python, java]
requestBody:
description: 암호화된 카드 정보 및 추가 거래 정보 포함한 요청 본문
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BillingKeyRegistrationRequest'
example:
encData: "hexEncodedEncryptedStringHere"
merchantId: "nicepay1234"
timestamp: "20250630110000"
authToken: "optional-token"
responses:
'200':
description: 빌링키 발급 성공 시 응답
content:
application/json:
schema:
$ref: '#/components/schemas/BillingKeyRegistrationResponse'
/v1/subscribe/{bid}/payments:
post:
summary: "[서버] 발급된 빌링키로 결제 승인"
description: |
**이 툴은 `create_billing_key` 툴로 발급받은 빌링키(BID) 사용하여 정기결제 또는 간편결제 승인하는 API 호출 정보를 JSON으로 반환**
모델은 이 정보 바탕으로, 사용자가 요청하는 프로그래밍 언어에 맞는 서버 코드 생성 필요
operationId: approve_billing_payment
x-mcp-prerequisites:
- create_billing_key
tags:
- "정기결제"
parameters:
- name: bid
in: path
required: true
schema:
type: string
example: "BIKYnictest00m1104191651325596"
description: "이전에 발급받은 고유한 빌링키"
requestBody:
description: 빌링키 결제 승인에 필요한 정보 전달
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BillingApprovalRequest'
responses:
'200':
description: 빌링키 결제 승인 성공. 응답은 일반 결제 승인과 동일 구조
content:
application/json:
schema:
$ref: '#/components/schemas/PaymentResponse'
/v1/subscribe/{bid}/expire:
post:
summary: "[서버] 발급된 빌링키 삭제(만료)."
description: |
**이 툴은 `create_billing_key` 툴로 발급받은 빌링키(BID) 만료시키는 API**
모델은 이 정보 바탕으로, 사용자가 요청하는 프로그래밍 언어에 맞는 서버 코드 생성 필요
operationId: expire_billing_key
x-mcp-prerequisites:
- create_billing_key
tags:
- "정기결제"
parameters:
- name: bid
in: path
required: true
schema:
type: string
example: "BIKYnictest00m1104191651325596"
description: "삭제(만료)할 고유한 빌링키"
requestBody:
description: 빌링키 삭제에 필요한 정보 전달
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BillingKeyExpireRequest'
responses:
'200':
description: 빌링키 삭제 성공.
content:
application/json:
schema:
$ref: '#/components/schemas/BillingKeyExpireResponse'
#==================================================================
# 영수증
#==================================================================
/v1/receipt/:
post:
summary: "[서버] 현금영수증을 발급"
description: |
**[POST 요청] 이 툴은 현금영수증 발급 API 호출하는 데 필요한 정보 JSON 형식으로 반환**
- HTTP Method: `POST`
- Path: `/v1/receipt/`
모델은 이 정보 바탕으로, 사용자가 요청하는 프로그래밍 언어에 맞는 **POST 방식 서버 코드 생성 필요**
operationId: create_cash_receipt
tags:
- "영수증"
x-mcp-client-tool:
method: POST
description: "POST 방식으로 현금영수증을 발급 요청하는 클라이언트 툴"
requestBody:
description: 현금영수증 발급에 필요한 정보 전달
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CashReceiptRequest'
responses:
'200':
description: 현금영수증 발급 성공.
content:
application/json:
schema:
$ref: '#/components/schemas/CashReceiptResponse'
/v1/receipt/{tid}/cancel:
post:
summary: "[서버] 발급된 현금영수증을 취소"
description: |
**[POST 요청] 이 툴은 발급된 현금영수증을 취소하는 API 호출 정보 JSON 형식으로 반환**
- HTTP Method: `POST`
- Path: `/v1/receipt/{tid}/cancel`
모델은 이 정보 바탕으로, 사용자가 요청하는 언어에 맞는 **POST 방식 서버 호출 코드** 생성 필요
본 API는 전체 취소와 부분 취소 모두 지원
operationId: cancel_cash_receipt
tags:
- "영수증"
x-mcp-client-tool:
method: POST
description: "POST 방식으로 현금영수증을 취소 요청하는 클라이언트 툴"
parameters:
- name: tid
in: path
required: true
schema:
type: string
example: "nictest_2.0_1_160101120000_1234567890"
description: "취소할 원 현금영수증 거래 거래 ID"
requestBody:
description: 현금영수증 취소에 필요한 정보 전달
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CashReceiptCancelRequest'
responses:
'200':
description: 현금영수증 취소 성공.
content:
application/json:
schema:
$ref: '#/components/schemas/CashReceiptCancelResponse'
/v1/receipt/{tid}:
get:
summary: "[조회] 발급된 현금영수증 처리 상태 조회"
description: |
**[GET 요청] 이 툴은 `create_cash_receipt` 툴로 발급 요청한 현금영수증 최종 발급(승인) 여부 조회**
- HTTP Method: `GET`
- Path: `/v1/receipt/{tid}`
- Query Params: `orderDate`, `ediDate`, `signData`, `returnCharSet` (선택적)
**[주의]** 발급 요청 성공 후 **D+2일** 조회 필요
모델은 이 정보 바탕으로 사용자가 요청한 언어에 맞는 **GET 방식 호출 코드** 생성 필요
operationId: get_cash_receipt_status
x-mcp-client-tool:
method: GET
description: "GET 방식으로 현금영수증 조회 API 호출하는 클라이언트 툴"
x-mcp-prerequisites:
- create_cash_receipt
tags:
- "영수증"
parameters:
- name: tid
in: path
required: true
schema:
type: string
example: "nictest_2.0_1_160101120000_1234567890"
description: "조회할 원 현금영수증 거래 거래 ID"
- name: orderDate
in: query
required: false
schema:
type: string
maxLength: 8
example: "20250630"
description: "(옵션) 주문일자 (YYYYMMDD 형식)"
- name: ediDate
in: query
required: false
schema:
type: string
format: date-time
description: "(옵션) 전문생성일시 (ISO 8601 형식)"
- name: signData
in: query
required: false
schema:
type: string
maxLength: 256
description: "(옵션) 위변조 검증 데이터. 생성규칙: hex(sha256(tid + ediDate + SecretKey))"
- name: returnCharSet
in: query
required: false
schema:
type: string
maxLength: 10
default: "utf-8"
description: "(옵션) 응답 파라미터 인코딩 방식"
responses:
'200':
description: 현금영수증 조회 성공.
content:
application/json:
schema:
$ref: '#/components/schemas/CashReceiptQueryResponse'
#==================================================================
# 조회
#==================================================================
/v1/payments/find/{orderId}:
get:
summary: "[거래 조회] 주문번호 사용하여 거래 내역을 조회"
description: |
**[GET 요청] 이 API는 가맹점 주문번호(orderId) 사용하여 해당 거래 상세 내역을 조회**
- HTTP Method: `GET`
- Path: `/v1/payments/find/{orderId}`
- Query Params: `orderDate`, `ediDate`, `signData`, `returnCharSet` (선택)
모델은 이 정보 바탕으로 사용자가 요청하는 언어에 맞는 **GET 방식 코드 (JavaScript, Python 등)** 생성 필요
⚠️ 이 API는 인증 요청 및 위변조 검증용 파라미터 포함할 수 있으며, URL과 쿼리스트링 구성에 주의
operationId: find_payment_by_order_id
tags:
- "조회"
x-mcp-client-tool:
method: GET
description: "주문번호로 거래 조회하는 GET 방식 MCP 클라이언트 툴"
parameters:
- name: orderId
in: path
required: true
schema:
type: string
example: "my-order-12345"
description: 조회할 거래 가맹점 주문번호
- name: orderDate
in: query
required: false
schema:
type: string
maxLength: 8
example: "20250630"
description: "(옵션) 주문일자 (YYYYMMDD 형식)"
- name: ediDate
in: query
required: false
schema:
type: string
format: date-time
description: "(옵션) 전문생성일시 (ISO 8601 형식)"
- name: signData
in: query
required: false
schema:
type: string
maxLength: 256
description: "(옵션) 위변조 검증 데이터. 생성규칙: hex(sha256(tid + ediDate + SecretKey))"
- name: returnCharSet
in: query
required: false
schema:
type: string
maxLength: 10
default: "utf-8"
description: "(옵션) 응답 파라미터 인코딩 방식"
responses:
'200':
description: 거래 조회 성공. 응답은 결제 승인과 동일 구조
content:
application/json:
schema:
$ref: '#/components/schemas/PaymentResponse'
/v1/terms:
get:
summary: "[조회] NICEPAY 약관 내용 조회"
description: |
**[GET 요청] 특정 약관 유형(`termsType`)에 대한 제목 및 전체 내용 조회**
- HTTP Method: `GET`
- Path: `/v1/terms`
**[중요] 이 API는 운영 환경(`https://api.nicepay.co.kr`)에서만 호출 가능**
- 샌드박스 환경에서는 약관 호출이 **지원되지 않습니다**.
모델은 이 정보 바탕으로, 사용자가 요청한 언어에 맞는 **GET 방식 요청 코드** 생성 필요
operationId: get_terms
tags:
- "조회"
x-mcp-client-tool:
method: GET
description: "운영 환경에서 약관 내용을 조회하는 GET 방식 MCP 클라이언트 툴"
servers:
- url: https://api.nicepay.co.kr
description: 약관 조회는 운영 환경에서만 가능
parameters:
- name: termsType
in: query
required: true
schema:
type: string
maxLength: 50
enum:
- ElectronicFinancialTransactions
- CollectPersonalInfo
- SharingPersonalInformation
- TelecommunicationCharging
description: |
(필수) 조회할 약관 유형을 지정합니다.
- `ElectronicFinancialTransactions`: 전자금융거래 약관
- `CollectPersonalInfo`: 개인정보 수집 및 이용 약관
- `SharingPersonalInformation`: 개인정보 제 3자 제공약관
- `TelecommunicationCharging`: 통신과금서비스 이용약관
- name: returnCharSet
in: query
required: false
schema:
type: string
maxLength: 10
default: "utf-8"
description: "(옵션) 응답 파라미터 인코딩 방식"
responses:
'200':
description: 약관 조회 성공
content:
application/json:
schema:
$ref: '#/components/schemas/TermsResponse'
/v1/card/event:
get:
summary: "[조회] 카드 이벤트(포인트, 무이자) 정보 조회"
description: |
**[GET 요청] 카드 포인트/무이자 이벤트 정보 조회하는 API**
**이 API는 샌드박스 환경을 지원하지 않으며, 운영 환경(`https://api.nicepay.co.kr`)에서만 호출 가능**
- HTTP Method: `GET`
- Path: `/v1/card/event`
- Query Params: amount, useAuth, ediDate, mid, signData, returnCharSet
모델은 이 정보 바탕으로 사용자가 요청한 언어에 맞는 **GET 방식 코드** 생성해야 하며,
**테스트 시 반드시 운영 서버 주소 사용 필요**
operationId: get_card_promotions
tags:
- "조회"
x-mcp-client-tool:
method: GET
description: "운영 환경에서 카드 이벤트 조회하는 GET 방식 클라이언트 툴"
servers:
- url: https://api.nicepay.co.kr
description: 카드 이벤트 조회는 운영 환경에서만 가능
parameters:
- name: amount
in: query
required: false
schema:
type: integer
example: 50000
description: "(옵션) 기준 금액. 이 금액에 해당하는 카드 이벤트 정보 제공 최대 12바이트"
- name: useAuth
in: query
required: false
schema:
type: boolean
description: "(옵션) 인증 거래 여부 (true: 인증, false: 비인증/빌링)"
- name: ediDate
in: query
required: false
schema:
type: string
format: date-time
description: "(옵션) 전문생성일시 (ISO 8601 형식)"
- name: mid
in: query
required: false
schema:
type: string
maxLength: 10
description: "(옵션) 상점 MID. 일반적으로 사용하지 않으나, 요청 시 최우선으로 적용"
- name: signData
in: query
required: false
schema:
type: string
maxLength: 256
description: "(옵션) 위변조 검증 데이터. 생성규칙: hex(sha256(ediDate + SecretKey))"
- name: returnCharSet
in: query
required: false
schema:
type: string
maxLength: 10
default: "utf-8"
description: "(옵션) 응답 파라미터 인코딩 방식"
responses:
'200':
description: 카드 이벤트 정보 조회 성공.
content:
application/json:
schema:
$ref: '#/components/schemas/CardEventResponse'
/v1/card/interest-free:
get:
summary: "[조회] 카드 무이자 할부 정보 조회"
description: |
**[GET 요청] 이 툴은 현재 진행 중인 모든 카드 무이자 할부 이벤트 정보 조회**
- HTTP Method: `GET`
- Path: `/v1/card/interest-free`
모델은 이 정보 바탕으로, 사용자가 요청하는 언어에 맞는 **GET 방식 클라이언트 코드 생성**
operationId: list_interest_free_installments
tags:
- "조회"
x-mcp-client-tool:
method: GET
description: "진행 중인 카드 무이자 이벤트 조회하는 GET 방식 클라이언트 툴"
parameters:
- name: useAuth
in: query
required: false
schema:
type: boolean
description: "(옵션) 인증 거래 여부 (true: 인증, false: 비인증/빌링)"
- name: ediDate
in: query
required: false
schema:
type: string
format: date-time
description: "(옵션) 전문생성일시 (ISO 8601 형식)"
- name: mid
in: query
required: false
schema:
type: string
maxLength: 10
description: "(옵션) 상점 MID. 일반적으로 사용하지 않으나, 요청 시 최우선으로 적용"
- name: signData
in: query
required: false
schema:
type: string
maxLength: 256
description: "(옵션) 위변조 검증 데이터. 생성규칙: hex(sha256(ediDate + SecretKey))"
- name: returnCharSet
in: query
required: false
schema:
type: string
maxLength: 10
default: "utf-8"
description: "(옵션) 응답 파라미터 인코딩 방식"
responses:
'200':
description: 카드 무이자 정보 조회 성공
content:
application/json:
schema:
$ref: '#/components/schemas/InterestFreeResponse'
components:
securitySchemes:
basicAuth:
type: http
scheme: basic
description: |
HTTP 기본 인증. 값은 `clientId:secretKey`를 Base64로 인코딩한 문자열
callbacks:
PaymentAuthCallback:
'{$request.body#/returnUrl}':
post:
summary: 클라이언트 인증 결과 콜백
description: 결제창 인증이 완료되면, NICEPAY 서버가 이 URL로 인증 결과 POST
requestBody:
description: 인증 결과는 `application/x-www-form-urlencoded` 형식으로 전달
required: true
content:
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/ClientAuthResponse'
responses:
'200':
description: 가맹점 서버는 이 요청을 받고 `OK` 또는 `SUCCESS`와 같은 문자열로 응답 필요
schemas:
# 요청 스키마
PaymentWindowRequest:
type: object
required: [clientId, method, orderId, amount, goodsName, returnUrl]
properties:
# ==================== 공통 파라미터 ====================
clientId: { type: string, maxLength: 50, description: "(필수) 가맹점 식별코드로, NICEPAY에서 발급한 고유 값" }
method: { type: string, maxLength: 20, description: "(필수) 사용할 결제수단을 지정 예: 'card', 'vbank', 'kakaopay'", enum: [card, bank, directCard, vbank, cellphone, naverpayCard, kakaopay, kakaopayCard, kakaopayMoney, samsungpayCard, payco, ssgpay, cardAndEasyPay] }
orderId: { type: string, maxLength: 64, description: "(필수) 가맹점에서 관리하는 유니크한 주문번호. 이미 결제된 주문번호 재사용 불가" }
amount: { type: number, description: "(필수) 결제할 총 금액. 숫자만 입력" }
goodsName: { type: string, maxLength: 40, description: "(필수) 결제창에 표시될 상품명. '\"'와 '¦' 특수문자는 '-'로 자동 대체됨" }
returnUrl: { type: string, maxLength: 500, description: "(필수) 결제 인증 완료 후, NICEPAY가 결과 전달할 가맹점 서버 URL" }
mallReserved: { type: string, maxLength: 500, description: "상점 추가 정보 전달하는 예비 필드. returnUrl로 함께 반환되며, JSON 문자열 형식 사용을 권장" }
mallUserId: { type: string, maxLength: 20, description: "상점에서 관리하는 사용자 ID" }
buyerName: { type: string, maxLength: 30, description: "구매자 실명" }
buyerTel: { type: string, maxLength: 40, description: "구매자 연락처 하이픈(-) 없이 숫자만 입력" }
buyerEmail: { type: string, maxLength: 60, description: "구매자 이메일 주소" }
useEscrow: { type: boolean, description: "에스크로 거래 여부 설정 (true: 에스크로, false: 일반거래)" }
currency: { type: string, maxLength: 3, description: "결제 통화 단위 설정 (KRW, USD, CNY)" }
logoImgUrl: { type: string, maxLength: 100, description: "결제창 상단 가맹점 로고 이미지 전체 URL" }
language: { type: string, maxLength: 2, description: "결제창 언어 설정 (KO, EN, CN)" }
returnCharSet: { type: string, maxLength: 10, description: "returnUrl로 전달될 파라미터 인코딩 방식 (utf-8, euc-kr)" }
skinType: { type: string, maxLength: 10, description: "결제창 스킨 색상을 설정 (red, green, purple, gray, dark)" }
# ==================== 부가세 지정 ====================
taxFreeAmt: { type: number, description: "결제 금액(amount) 중 면세에 해당하는 금액을 설정" }
# ==================== 신용카드 & 간편결제 ====================
cardQuota: { type: string, maxLength: 100, description: "사용 가능한 할부개월을 제한 콤마(,)로 구분하며, 일시불은 '00'으로 설정 (예: '00,03,06')" }
cardCode: { type: string, maxLength: 100, description: "결제창에 노출할 특정 카드사 코드로 제한 콤마(,)로 구분 (예: '04,06')" }
cardShowOpt: { type: string, maxLength: 50, description: "카드사별 인증창 호출방식을 직접 지정 (예: '08:3¦02:3')" }
# ==================== 가상계좌 ====================
vbankHolder: { type: string, maxLength: 40, description: "가상계좌 발급 시 입금주로 표시될 이름 (가상계좌 결제 시 필수)" }
vbankValidHours: { type: number, description: "가상계좌 입금 유효시간을 시간 단위로 설정" }
vbankExpDate: { type: string, description: "가상계좌 입금 만료일을 'YYYYMMDDhhmm' 형식으로 직접 지정" }
# ==================== 휴대폰 ====================
isDigital: { type: boolean, description: "휴대폰 결제 상품 유형을 설정 (true: 컨텐츠, false: 실물)" }
# ==================== 다이렉트 (현금영수증) ====================
directReceiptType: { type: string, maxLength: 20, description: "현금영수증 발급 유형을 지정 (unPublished, individual, company)" }
directReceiptNo: { type: string, maxLength: 20, description: "현금영수증 발행 대상 식별정보(휴대폰 또는 사업자번호). '-'없이 숫자만 입력" }
# ==================== PC 옵션 ====================
disableScroll: { type: boolean, description: "결제창 스크롤 생성 여부 설정 (기본값: true, 스크롤 없음)" }
disableEdgeChk: { type: boolean, description: "Edge 브라우저 사용 시 안내 팝업 노출 여부 설정 (기본값: false, 노출)" }
zIdxHigher: { type: boolean, description: "결제창 레이어 z-index 11000으로 상향 조정" }
# ==================== Mobile 옵션 ====================
appScheme: { type: string, maxLength: 200, description: "모바일 앱 결제 후 다시 앱으로 돌아오기 위한 App Scheme 값을 설정" }
ApprovalRequest:
type: object
properties:
amount:
type: integer
description: "(필수) 결제금액, 최대 12바이트"
example: 1004
ediDate:
type: string
description: "(옵션) 전문생성일시 ISO 8601 형식 (예: 2025-06-30T21:00:00+09:00)."
format: date-time
signData:
type: string
maxLength: 256
description: "(옵션) 위변조 검증 데이터 생성규칙: hex(sha256(tid + amount + ediDate + SecretKey))."
returnCharSet:
type: string
maxLength: 10
description: "(옵션) 응답 파라미터 인코딩 방식. (기본값: utf-8)"
enum: ["utf-8", "euc-kr"]
default: "utf-8"
CancelRequest:
type: object
properties:
reason: { type: string, maxLength: 100, description: "(옵션) 취소 사유" }
orderId: { type: string, maxLength: 64, description: "(옵션) 상점 거래 고유번호. 부분 취소 시에는 중복된 orderId로 재호 불가" }
cancelAmt: { type: integer, description: "(옵션) 부분 취소 요청 금액. 값이 없으면 전액 취소 처리" }
mallReserved: { type: string, maxLength: 500, description: "(옵션) 상점 정보 전달용 예비 필드" }
ediDate: { type: string, description: "(옵션) 전문생성일시 (ISO 8601 형식)" }
signData: { type: string, maxLength: 256, description: "(옵션) 위변조 검증 데이터. 생성규칙: hex(sha256(tid + ediDate + SecretKey))" }
returnCharSet: { type: string, maxLength: 10, description: "(옵션) 응답 파라미터 인코딩 방식 (기본값: utf-8)", default: "utf-8" }
taxFreeAmt: { type: integer, description: "(옵션) 취소 금액 중 면세 공급가액" }
refundAccount: { type: string, maxLength: 16, description: "(옵션) 환불 계좌번호" }
refundBankCode: { type: string, maxLength: 3, description: "(옵션) 환불 계좌 은행코드" }
refundHolder: { type: string, maxLength: 10, description: "(옵션) 환불 계좌 예금주명" }
BillingKeyRegistrationRequest:
type: object
required: [encData, orderId]
properties:
encData:
type: string
maxLength: 512
description: |
(필수) 결제정보 암호화한 데이터
**암호화 방식 (encMode: 'A2' 기준):**
- **알고리즘**: AES-256-CBC
- **KEY**: 가맹점 SecretKey (32byte)
- **IV**: 가맹점 SecretKey 앞 16자리
- **Padding**: PKCS5
- **결과 인코딩**: Hex
**평문(Plain Text) 형식:**
`cardNo=값&expYear=YY&expMonth=MM&idNo=값&cardPw=값`
(상세 내용은 BillingKeyData 스키마 참조)
orderId:
type: string
maxLength: 64
description: "(필수) 가맹점에서 관리하는 유니크한 주문번호"
buyerName:
type: string
maxLength: 30
description: "(옵션) 구매자 이름"
buyerEmail:
type: string
maxLength: 60
description: "(옵션) 구매자 이메일 주소"
buyerTel:
type: string
maxLength: 20
description: "(옵션) 구매자 전화번호 ('-' 없이 숫자만)"
encMode:
type: string
maxLength: 10
description: "(옵션) 암호화 모드. 'A2'는 AES256 의미"
default: "A2"
enum: ["A2"]
ediDate:
type: string
description: "(옵션) 전문생성일시 (ISO 8601 형식)"
signData:
type: string
maxLength: 256
description: "(옵션) 위변조 검증 데이터. 생성규칙: hex(sha256(orderId + ediDate + SecretKey))"
returnCharSet:
type: string
maxLength: 10
description: "(옵션) 응답 파라미터 인코딩 방식 (기본값: utf-8)"
default: "utf-8"
BillingKeyData:
type: object
description: "encData 필드 암호화하기 위한 평문(Plain Text) 데이터 구조"
required: [cardNo, expYear, expMonth, idNo, cardPw]
properties:
cardNo: { type: string, maxLength: 16, description: "(필수) 카드번호 (숫자만)" }
expYear: { type: string, maxLength: 2, description: "(필수) 유효기간 년 (YY 형식)" }
expMonth: { type: string, maxLength: 2, description: "(필수) 유효기간 월 (MM 형식)" }
idNo: { type: string, maxLength: 13, description: "(필수) 개인: 생년월일 6자리 (YYMMDD) / 법인: 사업자번호 10자리" }
cardPw: { type: string, maxLength: 2, description: "(필수) 카드 비밀번호 앞 2자리" }
BillingApprovalRequest:
type: object
required: [orderId, amount, goodsName, cardQuota, useShopInterest]
properties:
orderId: { type: string, maxLength: 64, description: "(필수) 가맹점에서 관리하는 유니크한 주문번호. 결제된 주문번호로는 재호출 불가" }
amount: { type: integer, description: "(필수) 결제할 금액. 최대 12바이트" }
goodsName: { type: string, maxLength: 40, description: "(필수) 상품명" }
cardQuota: { type: string, maxLength: 2, description: "(필수) 할부개월 0:일시불, 2:2개월..." }
useShopInterest: { type: boolean, description: "(필수) 상점분담무이자 사용 여부 (현재 false만 사용 가능)" }
buyerName: { type: string, maxLength: 30, description: "(옵션) 구매자 이름" }
buyerTel: { type: string, maxLength: 20, description: "(옵션) 구매자 전화번호 ('-' 없이 숫자만)" }
buyerEmail: { type: string, maxLength: 60, description: "(옵션) 구매자 이메일" }
taxFreeAmt: { type: integer, description: "(옵션) 면세 공급가액. 전체 거래금액 중 면세 금액을 설정" }
mallReserved: { type: string, maxLength: 500, description: "(옵션) 상점 정보 전달용 예비 필드" }
ediDate: { type: string, description: "(옵션) 전문생성일시 (ISO 8601 형식)" }
signData: { type: string, maxLength: 256, description: "(옵션) 위변조 검증 데이터. 생성규칙: hex(sha256(orderId + bid + ediDate + SecretKey))" }
returnCharSet: { type: string, maxLength: 10, description: "(옵션) 응답 파라미터 인코딩 방식 (기본값: utf-8)", default: "utf-8" }
BillingKeyExpireRequest:
type: object
properties:
orderId:
type: string
maxLength: 64
description: "(옵션) 상점 거래 고유번호"
ediDate:
type: string
description: "(옵션) 전문생성일시 (ISO 8601 형식)"
signData:
type: string
maxLength: 256
description: "(옵션) 위변조 검증 데이터. 생성규칙: hex(sha256(orderId + bid + ediDate + SecretKey))"
returnCharSet:
type: string
maxLength: 10
description: "(옵션) 응답 파라미터 인코딩 방식 (기본값: utf-8)"
default: "utf-8"
CashReceiptRequest:
type: object
required: [orderId, amount, goodsName, receiptType, receiptNo]
properties:
orderId: { type: string, maxLength: 64, description: "(필수) 상점 거래 고유번호" }
amount: { type: integer, description: "(필수) 현금영수증 발행 금액 (최대 12바이트)" }
goodsName: { type: string, maxLength: 40, description: "(필수) 상품명" }
receiptType: { type: string, maxLength: 20, description: "(필수) 현금영수증 발급 유형", enum: [individual, company] }
receiptNo: { type: string, maxLength: 20, description: "(필수) 현금영수증 발행대상 식별정보 (휴대폰번호 또는 사업자번호)" }
supplyAmt: { type: integer, description: "(옵션) 공급가액 (최대 12바이트)" }
goodsVat: { type: integer, description: "(옵션) 부가가치세 (최대 12바이트)" }
taxFreeAmt: { type: integer, description: "(옵션) 면세공급가액 (최대 12바이트)" }
serviceAmt: { type: integer, description: "(옵션) 봉사료 (최대 12바이트)" }
buyerName: { type: string, maxLength: 30, description: "(옵션) 구매자 이름" }
buyerTel: { type: string, maxLength: 40, description: "(옵션) 구매자 전화번호 ('-' 없이)" }
buyerEmail: { type: string, maxLength: 60, description: "(옵션) 구매자 이메일" }
ediDate: { type: string, description: "(옵션) 전문생성일시 (ISO 8601 형식)" }
signData: { type: string, maxLength: 256, description: "(옵션) 위변조 검증 데이터. 생성규칙: hex(sha256(orderId + amount + ediDate + SecretKey))" }
returnCharSet: { type: string, maxLength: 10, description: "(옵션) 응답 파라미터 인코딩 방식 (기본값: utf-8)", default: "utf-8" }
CashReceiptCancelRequest:
type: object
properties:
orderId: { type: string, maxLength: 64, description: "(옵션) 상점 거래 고유번호" }
reason: { type: string, maxLength: 100, description: "(옵션) 취소 사유" }
cancelAmt: { type: integer, description: "(옵션) 부분 취소 요청 금액. 값이 없으면 전액 취소로 처리 부분 취소 시 하위 금액 필드(supplyAmt 등)는 필수" }
ediDate: { type: string, description: "(옵션) 전문생성일시 (ISO 8601 형식)" }
signData: { type: string, maxLength: 256, description: "(옵션) 위변조 검증 데이터 생성규칙: hex(sha256(tid + ediDate + SecretKey))" }
returnCharSet: { type: string, maxLength: 10, description: "(옵션) 응답 파라미터 인코딩 방식 (기본값: utf-8)", default: "utf-8" }
supplyAmt: { type: integer, description: "(부분 취소 시 필수) 취소 금액 중 공급가액" }
goodsVat: { type: integer, description: "(부분 취소 시 필수) 취소 금액 중 부가가치세" }
taxFreeAmt: { type: integer, description: "(부분 취소 시 필수) 취소 금액 중 면세 공급가액" }
serviceAmt: { type: integer, description: "(부분 취소 시 필수) 취소 금액 중 봉사료" }
#==================================================================
# 응답 객체 및 상세 정보 스키마
#==================================================================
PaymentResponse:
type: object
description: "결제 승인 API 최종 응답 객체"
properties:
resultCode:
$ref: '#/components/schemas/ResultCode'
resultMsg:
type: string
description: "결제결과메시지"
tid:
type: string
description: "결제 승인 키"
cancelledTid:
type: string
description: "취소 거래 키 (취소 요청건에 한하여 응답됨)"
orderId:
type: string
description: "상점 거래 고유번호"
ediDate:
type: string
format: date-time
description: "응답전문생성일시 (ISO 8601 형식)"
signature:
type: string
description: "위변조 검증 데이터. hex(sha256(tid + amount + ediDate+ SecretKey))"
status:
type: string
enum: [paid, ready, failed, cancelled, partialCancelled, expired]
description: "결제 처리상태"
paidAt:
type: string
format: date-time
description: "결제완료시점 (ISO 8601 형식)"
failedAt:
type: string
format: date-time
description: "결제실패시점 (ISO 8601 형식)"
cancelledAt:
type: string
format: date-time
description: "결제취소시점 (ISO 8601 형식)"
payMethod:
type: string
enum: [card, vbank, naverpay, kakaopay, payco, ssgpay, samsungpay]
description: "결제수단"
amount:
type: integer
description: "결제 금액"
balanceAmt:
type: integer
description: "취소 가능 잔액"
goodsName:
type: string
description: "상품명"
mallReserved:
type: string
description: "상점 정보 전달용 예비필드"
useEscrow:
type: boolean
description: "에스크로 거래 여부"
currency:
type: string
description: "결제승인화폐단위 (e.g., KRW)"
channel:
type: string
enum: [pc, mobile, null]
description: "결제 채널"
approveNo:
type: string
description: "제휴사 승인 번호"
buyerName:
type: string
description: "구매자 명"
buyerTel:
type: string
description: "구매자 전화번호"
buyerEmail:
type: string
description: "구매자 이메일"
issuedCashReceipt:
type: boolean
description: "현금영수증 발급여부"
receiptUrl:
type: string
description: "매출전표 확인 URL"
mallUserId:
type: string
description: "상점에서 관리하는 사용자 아이디"
coupon:
$ref: '#/components/schemas/CouponInfo'
card:
$ref: '#/components/schemas/CardInfo'
cashReceipts:
type: array
items:
$ref: '#/components/schemas/CashReceiptInfo'
bank:
$ref: '#/components/schemas/BankInfo'
vbank:
$ref: '#/components/schemas/VBankInfo'
ClientAuthResponse:
type: object
description: "결제창 인증 완료 후 returnUrl로 전달되는 파라미터 명세."
properties:
authResultCode: { type: string, maxLength: 4, description: "(필수) 인증결과 코드. '0000'이면 인증 성공" }
authResultMsg: { type: string, maxLength: 500, description: "(필수) 인증결과 메시지" }
tid: { type: string, maxLength: 30, description: "(인증 성공 시 필수) 결제 승인을 위한 고유한 거래 키(key)" }
clientId: { type: string, maxLength: 50, description: "(필수) 요청 시 전달했던 가맹점 식별코드" }
orderId: { type: string, maxLength: 64, description: "(필수) 요청 시 전달했던 상점 거래 고유번호" }
amount: { type: integer, description: "(필수) 요청 시 전달했던 결제 금액" }
mallReserved: { type: string, maxLength: 500, description: "요청 시 전달했던 상점 예약필드" }
authToken: { type: string, maxLength: 40, description: "(필수) 인증 과정을 위한 고유 토큰" }
signature: { type: string, maxLength: 256, description: "(인증 성공 시 필수) 위변조 검증 데이터. 생성규칙: hex(sha256(authToken + clientId + amount + SecretKey))" }
BillingKeyRegistrationResponse:
type: object
description: "빌키 발급 API 응답 객체"
required: [ResultCode, ResultMsg, TID, OrderID, BID, AuthDate, CardCode, CardName]
properties:
ResultCode:
$ref: '#/components/schemas/ResultCode'
ResultMsg:
type: string
maxLength: 100
description: "(필수) 결제결과메시지 예시: 빌키가 정상적으로 생성되었습니다"
TID:
type: string
maxLength: 30
description: "(필수) 거래번호 빌키 발급 거래 식별하는 Transaction ID"
OrderID:
type: string
maxLength: 64
description: "(필수) 상점 거래 고유번호"
BID:
type: string
maxLength: 30
description: "(필수) 빌키. NICEPAY가 발급하는 고유한 빌링 아이디"
AuthDate:
type: string
description: "(필수) 인증일자 (ISO 8601 형식)"
format: date-time
CardCode:
$ref: '#/components/schemas/CardCode'
CardName:
type: string
maxLength: 20
description: "(필수) 카드사 이름. 예시: [삼성]"
BillingKeyExpireResponse:
type: object
description: "빌키 삭제 API 응답 객체"
required: [resultCode, resultMsg, tid, orderId, bid, authDate]
properties:
resultCode:
type: string
maxLength: 4
description: "(필수) 결제결과코드. '0000'이면 성공"
resultMsg:
type: string
maxLength: 100
description: "(필수) 결제결과메시지. 예시: 정상 처리되었습니다."
tid:
type: string
maxLength: 30
description: "(필수) 빌키 삭제 거래 식별하는 Transaction ID"
orderId:
type: string
maxLength: 64
description: "(필수) 상점 거래 고유번호"
bid:
type: string
maxLength: 30
description: "(필수) 삭제 처리된 빌링키"
authDate:
type: string
description: "(필수) 처리 성공 시 반환되는 인증일자 (ISO 8601 형식)"
format: date-time
CashReceiptResponse:
type: object
description: "현금영수증 발급 API 응답 객체"
required: [resultCode, resultMsg, tid, orderId]
properties:
resultCode: { type: string, maxLength: 4, description: "(필수) 결과코드. '0000'이면 성공" }
resultMsg: { type: string, maxLength: 100, description: "(필수) 결과메시지" }
tid: { type: string, maxLength: 30, description: "(필수) NICEPAY 거래키" }
orderId: { type: string, maxLength: 64, description: "(필수) 상점 거래 고유번호." }
approvedAt: { type: string, description: "(옵션) 발급 시점 (ISO 8601 형식). 발급 완료 시에만 응답" }
approveNo: { type: string, maxLength: 30, description: "(옵션) 현금영수증 국세청 발행번호. 발급 성공 시에만 응답" }
ediDate: { type: string, maxLength: 14, description: "(필수) 응답 전문생성일시 (ISO 8601 형식)" }
signature: { type: string, maxLength: 256, description: "(옵션) 위변조 검증 데이터. 유효한 거래건에 한하여 응답" }
CashReceiptCancelResponse:
type: object
description: "현금영수증 취소 API 응답 객체"
required: [resultCode, resultMsg, tid, orderId, cancelAmt, balanceAmt, cancelledAt, ediDate]
properties:
resultCode: { type: string, maxLength: 4, description: "(필수) 결과코드. '0000'이면 성공" }
resultMsg: { type: string, maxLength: 100, description: "(필수) 결과메시지" }
tid: { type: string, maxLength: 30, description: "(필수) 취소 거래 새로운 NICEPAY 거래키" }
orderId: { type: string, maxLength: 64, description: "(필수) 상점 거래 고유번호" }
cancelAmt: { type: integer, description: "(필수) 취소된 금액. 취소 실패 시 0" }
balanceAmt: { type: integer, description: "(필수) 취소 가능한 잔액" }
cancelledAt: { type: string, description: "(필수) 취소 시점 (ISO 8601 형식). 취소 실패 시 0" }
approveNo: { type: string, maxLength: 30, description: "(옵션) 현금영수증 국세청 취소 승인번호. 취소 성공 시 리턴" }
ediDate: { type: string, maxLength: 14, description: "(필수) 응답 전문생성일시 (ISO 8601 형식)." }
signature: { type: string, maxLength: 256, description: "(옵션) 위변조 검증 데이터. 유효한 거래건에 한하여 응답" }
CashReceiptQueryResponse:
type: object
description: "현금영수증 조회 API 응답 객체"
required: [resultCode, resultMsg, tid, orderId, ediDate]
properties:
resultCode: { type: string, maxLength: 4, description: "(필수) 결과코드. '0000'이면 성공" }
resultMsg: { type: string, maxLength: 100, description: "(필수) 결과메시지" }
tid: { type: string, maxLength: 30, description: "(필수) NICEPAY 거래키" }
orderId: { type: string, maxLength: 64, description: "(필수) 상점 거래 고유번호" }
approveNo: { type: string, maxLength: 30, description: "(옵션) 현금영수증 국세청 승인번호. 발급 성공 시 리턴됩니다" }
ediDate: { type: string, maxLength: 14, description: "(필수) 응답 전문생성일시 (ISO 8601 형식)" }
signature: { type: string, maxLength: 256, description: "(옵션) 위변조 검증 데이터. 유효한 거래건에 한하여 응답됩니다" }
TermsResponse:
type: object
description: "약관 조회 API 응답 객체"
required: [resultCode, resultMsg, termsTitle, content]
properties:
resultCode:
type: string
maxLength: 4
description: "(필수) 결과코드. '0000'이면 성공을 의미"
resultMsg:
type: string
maxLength: 100
description: "(필수) 결과메시지"
termsTitle:
type: string
maxLength: 100
description: "(필수) 조회된 약관 제목"
content:
type: string
maxLength: 30000
description: "(필수) 조회된 약관 전체 내용"
CardEventResponse:
type: object
description: "카드 이벤트 조회 API 응답 객체"
required: [resultCode, resultMsg]
properties:
resultCode: { $ref: '#/components/schemas/ResultCode' }
resultMsg: { type: string, maxLength: 100, description: "(필수) 결과메시지" }
ediDate: { type: string, description: "(옵션) 응답전문생성일시 (ISO 8601 형식)", format: "date-time" }
signature: { type: string, maxLength: 256, description: "(옵션) 위변조 검증 데이터 생성규칙: hex(sha256(ediDate + SecretKey))" }
cardPoint: { type: string, description: "(옵션) 포인트 결제 지원 카드사 코드 목록 (콜론 ':' 구분)" }
interestFree:
type: array
description: "(옵션) 제공되는 모든 무이자 할부 정보"
items:
$ref: '#/components/schemas/InterestFreeInfo'
InterestFreeResponse:
type: object
description: "카드 무이자 조회 API 응답 객체"
required: [resultCode, resultMsg]
properties:
resultCode: { $ref: '#/components/schemas/ResultCode' }
resultMsg: { type: string, maxLength: 100, description: "(필수) 결과메시지" }
ediDate: { type: string, description: "(옵션) 응답전문생성일시 (ISO 8601 형식)", format: "date-time" }
signature: { type: string, maxLength: 256, description: "(옵션) 위변조 검증 데이터. 생성규칙: hex(sha256(ediDate + SecretKey))" }
interestFree:
type: array
description: "(필수) 제공되는 모든 무이자 할부 정보 배열"
items:
$ref: '#/components/schemas/InterestFreeInfo'
InterestFreeInfo:
type: object
description: "카드사별 무이자 할부 정보 객체"
required: [cardCode, cardName, freeInstallment]
properties:
cardCode: { $ref: '#/components/schemas/CardCode' }
cardName: { type: string, maxLength: 20, description: "(필수) 카드사 이름" }
freeInstallment:
type: array
description: "(필수) 무이자 할부 상세 정보 배열"
items:
$ref: '#/components/schemas/InstallmentDetail'
InstallmentDetail:
type: object
description: "할부 개월에 따른 상세 조건 객체"
required: [minAmt, maxAmt, installment]
properties:
minAmt:
type: integer
description: "(필수) 이벤트 적용 최소 금액"
maxAmt:
type: integer
description: "(필수) 이벤트 적용 최대 금액"
installment:
type: string
maxLength: 100
description: "(필수) 무이자 할부개월 목록 (콜론 ':' 구분). 예: '02:03:04:05'"
eventToDate:
type: string
description: "(옵션) 이벤트 제공 기한 (ISO 8601 형식)"
format: "date-time"
CouponInfo:
type: object
description: "즉시할인 프로모션 정보"
properties:
couponAmt:
type: integer
description: "즉시할인 적용된 금액"
CardInfo:
type: object
description: "신용카드 정보"
properties:
cardCode:
$ref: '#/components/schemas/CardCode'
cardName:
type: string
description: "결제 카드사 이름"
cardNum:
type: string
description: "마스킹 처리된 카드번호"
cardQuota:
type: string
description: "할부개월 (0: 일시불)"
isInterestFree:
type: boolean
description: "상점분담무이자 여부"
cardType:
type: string
description: "카드 구분 (credit or check)"
canPartCancel:
type: string
description: "부분취소 가능 여부 (true or false)"
acquCardCode:
type: string
description: "매입카드사코드"
acquCardName:
type: string
description: "매입카드사명"
CashReceiptInfo:
type: object
description: "현금영수증 발급정보"
properties:
receiptTid:
type: string
description: "현금영수증 TID"
orgTid:
type: string
description: "연관된 원 승인/취소 거래 TID"
status:
type: string
description: "발급진행 상태"
amount:
type: integer
description: "현금영수증 발행 총금액"
taxFreeAmt:
type: integer
description: "현금영수증 전체 금액 중 면세금액"
receiptType:
type: string
enum: [individual, company]
description: "현금영수증 타입 (개인 or 사업자)"
issueNo:
type: string
description: "현금영수증 국세청 발행번호"
receiptUrl:
type: string
description: "현금영수증 매출전표 확인 URL"
BankInfo:
type: object
description: "계좌이체 은행 정보"
properties:
bankCode:
$ref: '#/components/schemas/BankCode'
bankName:
type: string
description: "결제은행명."
VBankInfo:
type: object
description: "가상계좌 정보"
properties:
vbankCode:
$ref: '#/components/schemas/BankCode'
vbankName:
type: string
description: "입금받을 가상계좌 은행명"
vbankNumber:
type: string
description: "입금받을 가상계좌 번호"
vbankExpDate:
type: string
format: date-time
description: "가상계좌 입금 만료일 (ISO 8601)"
vbankHolder:
type: string
description: "입금받을 가상계좌 예금주명"
#==================================================================
# 코드 정의 스키마 (Code Definition Schemas)
#==================================================================
ResultCode:
type: string
description: |
API 응답 코드와 메시지입니다.
- `3001`: 카드 결제 성공
- `3011`: 카드번호 오류
- `3012`: 카드가맹점 정보 미확인
- `3013`: 카드 가맹점 개시 안됨
- `3014`: 카드가맹점 정보 오류
- `3021`: 유효기간 오류
- `3022`: 할부개월오류
- `3023`: 할부개월 한도 초과
- `3024`: 할부 최소금액 오류(50000미만)
- `3031`: 무이자할부 카드 아님
- `3032`: 무이자할부 불가 개월수
- `3033`: 무이자할부 가맹점 아님
- `3034`: 무이자할부 구분 미설정
- `3041`: 금액 오류(1000원 미만 신용카드 승인 불가)
- `3051`: 해외카드 미등록 가맹점
- `3052`: 통화코드 오류
- `3053`: 확인 불가 해외카드
- `3054`: 환률전환오류
- `3055`: 인증시 달러승인 불가
- `3056`: 국내카드 달러승인불가
- `3057`: 인증 불가카드
- `3061`: 국민카드 인터넷안전결제 적용 가맹점
- `3062`: 신용카드 승인번호 오류
- `3071`: 매입요청 가맹점 아님
- `3072`: 매입요청 TID 정보 불일치
- `3073`: 기매입 거래
- `3081`: 카드 잔액 값 오류
- `3091`: 제휴카드 사용불가 가맹점
- `3095`: 카드사 실패 응답
- `4000`: 계좌이체 결제 성공
- `4001`: 금결원오류응답
- `4002`: 회원사 서비스 불가 은행
- `4003`: 출금일자 불일치
- `4004`: 출금요청금액 불일치
- `4005`: 거래번호(TID) 불일치
- `4006`: 회신 정보 불일치
- `4007`: 계좌이체 승인번호 오류
- `4008`: 은행 시스템 서비스 중단
- `4100`: 가상계좌 발급 성공
- `4110`: 가상계좌 입금 성공
- `4120`: 가상계좌 과오납체크 등록 성공
- `4101`: 가상계좌 최대거래금액 초과
- `4102`: 가상계좌 입금예정일 오류
- `4103`: 가상계좌 입금예정시간 오류
- `4104`: 가상계좌 정보 오류
- `4105`: 가상계좌 벌크계좌 사용불가.(건별계좌 사용 가맹점)
- `4106`: 가상계좌 벌크계좌 사용불가.(벌크계좌 사용 가맹점)
- `4107`: 가상계좌 계좌번호 미입력 오류
- `4108`: 가상계좌 Pool 가맹점 미등록 오류
- `4109`: 해당 계좌는 입금대기상태(다른 계좌 사용요망)
- `4111`: 가상계좌 Pool 가맹점 계좌형태 설정 오류
- `4112`: 벌크계좌의 경우 장바구니 개수를