UNPKG

@nicepay/start-api-mcp

Version:

NICEPAY 결제 연동을 위한 MCP 툴 (https://start.nicepay.co.kr)

1,404 lines (1,325 loc) 96 kB
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`: 벌크계좌의 경우 장바구니 개수를