diff --git a/package.json b/package.json index c031cb8..ca7c5a2 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,6 @@ "devDependencies": { "@trivago/prettier-plugin-sort-imports": "^4.2.0", "prettier": "^2.6.2", - "typescript": "^5.2.2" + "typescript": "^5.3.2" } } diff --git a/packages/fake-iamport-server/package.json b/packages/fake-iamport-server/package.json index f557b85..af6f12a 100644 --- a/packages/fake-iamport-server/package.json +++ b/packages/fake-iamport-server/package.json @@ -1,6 +1,6 @@ { "name": "fake-iamport-server", - "version": "5.1.4", + "version": "5.1.5", "description": "Fake iamport server for testing", "main": "lib/index.js", "typings": "lib/index.d.ts", @@ -19,7 +19,7 @@ "package:api": "npm run build:swagger && npm run build:api && cd packages/api && npm publish", "package:latest": "npm run build && npm run test && npm publish", "package:next": "npm run package:latest -- --tag next", - "prepare": "ts-patch install", + "prepare": "ts-patch install && typia patch", "-------------------------------------------------": "", "start": "pm2 start lib/executable/server.js -i 1 --name fake-iamport-server --wait-ready --listen-timeout 120000 --kill-timeout 15000", "start:reload": "pm2 reload fake-iamport-server", @@ -38,7 +38,7 @@ }, "homepage": "https://github.com/samchon/fake-iamport-server", "devDependencies": { - "@nestia/sdk": "^2.3.9", + "@nestia/sdk": "^2.4.1", "@types/atob": "^2.1.2", "@types/btoa": "^1.2.3", "@types/cli": "^0.11.19", @@ -48,18 +48,18 @@ "@typescript-eslint/parser": "^5.26.0", "cli": "^1.0.1", "copyfiles": "^2.4.1", - "nestia": "^5.0.1", + "nestia": "^5.1.2", "pm2": "^4.5.6", "rimraf": "^3.0.2", "sloc": "^0.2.1", "ts-node": "^10.9.1", "ts-patch": "^3.0.2", - "typescript": "^5.2.2" + "typescript": "^5.3.2" }, "dependencies": { - "@nestia/core": "^2.3.9", + "@nestia/core": "^2.4.1", "@nestia/e2e": "^0.4.0", - "@nestia/fetcher": "^2.3.9", + "@nestia/fetcher": "^2.4.1", "@nestjs/common": "^10.2.8", "@nestjs/core": "^10.2.8", "@nestjs/platform-fastify": "^10.2.8", @@ -68,7 +68,7 @@ "source-map-support": "^0.5.19", "tstl": "^2.5.13", "typescript-transform-paths": "^3.4.6", - "typia": "^5.2.6", + "typia": "^5.3.1", "uuid": "^9.0.0" }, "keywords": [ diff --git a/packages/fake-toss-payments-server/package.json b/packages/fake-toss-payments-server/package.json index 2bc4166..0762ba0 100644 --- a/packages/fake-toss-payments-server/package.json +++ b/packages/fake-toss-payments-server/package.json @@ -1,6 +1,6 @@ { "name": "fake-toss-payments-server", - "version": "5.1.4", + "version": "5.1.5", "description": "Fake toss-payments server for testing", "main": "lib/index.js", "typings": "lib/index.d.ts", @@ -19,7 +19,7 @@ "package:api": "npm run build:swagger && npm run build:api && cd packages/api && npm publish", "package:latest": "npm run build && npm run test && npm publish", "package:next": "npm run package:latest -- --tag next", - "prepare": "ts-patch install", + "prepare": "ts-patch install && typia patch", "-------------------------------------------------": "", "start": "pm2 start lib/executable/server.js -i 1 --name fake-toss-payments-server --wait-ready --listen-timeout 120000 --kill-timeout 15000", "start:reload": "pm2 reload fake-toss-payments-server", @@ -39,7 +39,7 @@ "homepage": "https://github.com/samchon/fake-toss-payments-server", "devDependencies": { "@nestia/e2e": "^0.4.0", - "@nestia/sdk": "^2.3.9", + "@nestia/sdk": "^2.4.1", "@types/atob": "^2.1.2", "@types/btoa": "^1.2.3", "@types/cli": "^0.11.19", @@ -49,17 +49,17 @@ "@typescript-eslint/parser": "^5.26.0", "cli": "^1.0.1", "copyfiles": "^2.4.1", - "nestia": "^5.0.1", + "nestia": "^5.1.2", "pm2": "^4.5.6", "rimraf": "^3.0.2", "sloc": "^0.2.1", "ts-node": "^10.9.1", "ts-patch": "^3.0.2", - "typescript": "^5.1.6", + "typescript": "^5.3.2", "typescript-transform-paths": "^3.4.6" }, "dependencies": { - "@nestia/core": "^2.3.9", + "@nestia/core": "^2.4.1", "@nestjs/common": "^10.2.8", "@nestjs/core": "^10.2.8", "@nestjs/platform-fastify": "^10.2.8", @@ -69,7 +69,7 @@ "serialize-error": "^4.1.0", "source-map-support": "^0.5.19", "tstl": "^2.5.13", - "typia": "^5.2.6", + "typia": "^5.3.1", "uuid": "^9.0.0" }, "keywords": [ diff --git a/packages/iamport-server-api/package.json b/packages/iamport-server-api/package.json index f3509e8..c6c1483 100644 --- a/packages/iamport-server-api/package.json +++ b/packages/iamport-server-api/package.json @@ -1,6 +1,6 @@ { "name": "iamport-server-api", - "version": "5.1.4", + "version": "5.1.5", "description": "API for Iamport Server", "main": "lib/index.js", "typings": "lib/index.d.ts", @@ -9,7 +9,7 @@ "build:sdk": "rimraf ../fake-iamport-server/src/api/functional && cd ../fake-iamport-server && npx nestia sdk && cd ../iamport-server-api", "compile": "rimraf lib && tsc", "deploy": "npm run build && npm publish", - "prepare": "ts-patch install" + "prepare": "ts-patch install && typia patch" }, "repository": { "type": "git", @@ -31,10 +31,10 @@ "rimraf": "^5.0.1", "ts-node": "^10.9.1", "ts-patch": "^3.0.2", - "typescript": "^5.2.2" + "typescript": "^5.3.2" }, "dependencies": { - "@nestia/fetcher": "^2.3.9", - "typia": "^5.2.6" + "@nestia/fetcher": "^2.4.1", + "typia": "^5.3.1" } } \ No newline at end of file diff --git a/packages/iamport-server-api/swagger.json b/packages/iamport-server-api/swagger.json index c978515..9b24373 100644 --- a/packages/iamport-server-api/swagger.json +++ b/packages/iamport-server-api/swagger.json @@ -1,4936 +1 @@ -{ - "openapi": "3.0.1", - "servers": [ - { - "url": "http://localhost:10851", - "description": "fake" - }, - { - "url": "https://api.iamport.kr", - "description": "real" - } - ], - "info": { - "title": "Iamport API", - "description": "Built by [fake-iamport-server](https://github.com/samchon/payments/tree/master/packages/fake-iamport-server) with [nestia](https://github.com/samchon/nestia)", - "version": "5.1.4", - "license": { - "name": "MIT" - } - }, - "paths": { - "/subscribe/customers/{customer_uid}": { - "get": { - "tags": [], - "parameters": [ - { - "name": "customer_uid", - "in": "path", - "schema": { - "type": "string" - }, - "description": "고객 (간편 결제 카드) 식별자 키", - "required": true - } - ], - "responses": { - "200": { - "description": "간편 결제 카드 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IIamportResponseIIamportSubscription" - } - } - }, - "x-nestia-encrypted": false - } - }, - "summary": "간편 결제 카드 정보 조회하기", - "description": "간편 결제 카드 정보 조회하기.\n\n`subscribe.customers.at` 은 고객이 {@link store } 나 혹은 아임포트가 제공하는\n간편 결제 카드 등록 창을 이용하여 저장한 간편 결제 카드 정보를 조회하는 API\n함수이다.", - "security": [ - { - "bearer": [] - } - ], - "x-nestia-namespace": "subscribe.customers.at", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "customer_uid", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "고객 (간편 결제 카드) 식별자 키", - "kind": "text" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "간편 결제 카드 정보", - "kind": "text" - } - ] - }, - { - "name": "security", - "text": [ - { - "text": "bearer", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "GET" - }, - "post": { - "tags": [], - "parameters": [ - { - "name": "customer_uid", - "in": "path", - "schema": { - "type": "string" - }, - "description": "고객 (간편 결제 카드) 식별자 키", - "required": true - } - ], - "requestBody": { - "description": "카드 입력 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IIamportSubscription.IStore" - } - } - }, - "required": true, - "x-nestia-encrypted": false - }, - "responses": { - "201": { - "description": "간편 결제 카드 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IIamportResponseIIamportSubscription" - } - } - }, - "x-nestia-encrypted": false - } - }, - "summary": "간편 결제 카드 등록하기", - "description": "간편 결제 카드 등록하기.\n\n`subscribe.customers.stoer` 는 고객이 자신의 카드를 서버에 등록해두고, 매번 결제가\n필요할 때마다 카드 정보를 반복 입력하는 일 없이, 간편하게 결제를 진행하고자 할 때\n사용하는 API 함수이다.\n\n참고로 `subscribe.customers.store` 는 클라이언트 어플리케이션이 아임포트가 제공하는\n간편 결제 카드 등록 창을 사용하는 경우, 귀하의 백엔드 서버가 이를 실 서비스에서 호출하는\n일은 없을 것이다. 다만, 고객이 간편 결제 카드를 등록하는 상황을 시뮬레이션하기 위하여,\n테스트 자동화 프로그램 수준에서 사용될 수는 있다.", - "security": [ - { - "bearer": [] - } - ], - "x-nestia-namespace": "subscribe.customers.store", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "customer_uid", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "고객 (간편 결제 카드) 식별자 키", - "kind": "text" - } - ] - }, - { - "name": "param", - "text": [ - { - "text": "input", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "카드 입력 정보", - "kind": "text" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "간편 결제 카드 정보", - "kind": "text" - } - ] - }, - { - "name": "security", - "text": [ - { - "text": "bearer", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "POST" - }, - "delete": { - "tags": [], - "parameters": [ - { - "name": "customer_uid", - "in": "path", - "schema": { - "type": "string" - }, - "description": "고객 (간편 결제 카드) 식별자 키", - "required": true - } - ], - "responses": { - "200": { - "description": "삭제된 간편 결제 카드 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IIamportResponseIIamportSubscription" - } - } - }, - "x-nestia-encrypted": false - } - }, - "summary": "간편 결제 카드 삭제하기", - "description": "간편 결제 카드 삭제하기.\n\n간편 결제를 위하여 등록한 카드를 제거한다.", - "security": [ - { - "bearer": [] - } - ], - "x-nestia-namespace": "subscribe.customers.erase", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "customer_uid", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "고객 (간편 결제 카드) 식별자 키", - "kind": "text" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "삭제된 간편 결제 카드 정보", - "kind": "text" - } - ] - }, - { - "name": "security", - "text": [ - { - "text": "bearer", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "DELETE" - } - }, - "/subscribe/payments/onetime": { - "post": { - "tags": [], - "parameters": [], - "requestBody": { - "description": "카드 결제 신청 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IIamportSubscription.IOnetime" - } - } - }, - "required": true, - "x-nestia-encrypted": false - }, - "responses": { - "201": { - "description": "카드 결제 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IIamportResponseIIamportCardPayment" - } - } - }, - "x-nestia-encrypted": false - } - }, - "summary": "카드로 결제하기, 더불어 간편 결제용으로 등록 가능", - "description": "카드로 결제하기, 더불어 간편 결제용으로 등록 가능.\n\n`subscribe.payments.onetime` 은 카드를 매개로 한 결제를 하고자 할 때 호출하는 API\n함수이다. 더하여 입력 값에 {@link IIamportSubscription.IOnetime.customer_uid } 를\n기입하는 경우, 결제에 사용한 카드를 그대로 간편 결제용 카드\n{@link IIamportSubscription } 로 등록해버린다.\n\n다만, 정히 간편 카드 등록과 결제를 동시에 하고 싶다면,\n`subscribe.payments.onetime` 에 {@link IIamportSubscription.IOnetime.customer_uid }\n를 더하기보다, {@link subscribe.customers.store } 와 {@link subscribe.payments.again }\n을 각각 호출하는 것을 권장한다. 그것이 예외적인 상황에 보다 안전하게 대처할 수 있기\n때문이다.\n\n더하여 `subscribe.payments.onetime` 은 클라이언트 어플리케이션이 아임포트가 제공하는\n결제 창을 그대로 사용하는 경우, 귀하의 백엔드 서버가 이를 실 서비스에서 호출하는 일은\n없을 것이다. 다만, 고객이 카드를 통하여 결제하는 상황을 시뮬레이션하기 위하여, 테스트\n자동화 프로그램 수준에서 사용될 수는 있다.", - "security": [ - { - "bearer": [] - } - ], - "x-nestia-namespace": "subscribe.payments.onetime.onetime", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "input", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "카드 결제 신청 정보", - "kind": "text" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "카드 결제 정보", - "kind": "text" - } - ] - }, - { - "name": "security", - "text": [ - { - "text": "bearer", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "POST" - } - }, - "/subscribe/payments/again": { - "post": { - "tags": [], - "parameters": [], - "requestBody": { - "description": "미리 등록한 카드를 이용한 결제 신청 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IIamportSubscription.IAgain" - } - } - }, - "required": true, - "x-nestia-encrypted": false - }, - "responses": { - "201": { - "description": "카드 결제 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IIamportResponseIIamportCardPayment" - } - } - }, - "x-nestia-encrypted": false - } - }, - "summary": "간편 결제에 등록된 카드로 결제하기", - "description": "간편 결제에 등록된 카드로 결제하기.\n\n`subscribe.payments.again` 은 고객이 간편 결제에 등록한 카드로 결제를 진행하고자 할 때\n호출하는 API 함수이다. 이는 간편하고 불편하고를 떠나, 본질적으로 카드 결제의 일환이기에,\n리턴값은 일반적인 카드 결제 때와 동일한 {@link IIamportCardPayment } 이다.\n\n그리고 `subscribe.payments.again` 은 결제 수단 중 유일하게, 클라이언트 어플리케이션이\n아임포트가 제공하는 결체 창을 사용할 수 없어, 오직 귀하의 백엔드 서버가 아임포트의 API\n함수를 직접 호출해야하는 경우에 해당한다. 따라서 간편 결제에 관하여 아임포트 서버와\n연동하는 백엔드 서버 및 프론트 어플리케이션을 개발할 때, 반드시 이 상황에 대한 별도의\n설계 및 개발이 필요하니, 이 점을 염두에 두기 바란다.", - "security": [ - { - "bearer": [] - } - ], - "x-nestia-namespace": "subscribe.payments.again.again", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "input", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "미리 등록한 카드를 이용한 결제 신청 정보", - "kind": "text" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "카드 결제 정보", - "kind": "text" - } - ] - }, - { - "name": "security", - "text": [ - { - "text": "bearer", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "POST" - } - }, - "/certifications/{imp_uid}": { - "get": { - "tags": [], - "parameters": [ - { - "name": "imp_uid", - "in": "path", - "schema": { - "type": "string" - }, - "description": "대상 본인인증 정보의 ", - "required": true - } - ], - "responses": { - "200": { - "description": "본인인증 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IIamportResponseIIamportCertification" - } - } - }, - "x-nestia-encrypted": false - } - }, - "summary": "본인인증 정보 열람하기", - "description": "본인인증 정보 열람하기.\n\n`certiciations.at` 은 본인인증 정보를 열람할 때 사용하는 API 함수이다.\n\n다만 이 API 함수를 통하여 열람한 본인인증 정보 {@link IIamportCertification } 이\n곧 OTP 인증까지 마쳐 본인인증을 모두 마친 레코드라는 보장은 없다. 본인인증의 완결\n여부는 오직, {@link IIamportCertification.certified } 값을 직접 검사해봐야만 알\n수 있기 때문이다.", - "security": [ - { - "bearer": [] - } - ], - "x-nestia-namespace": "certifications.at", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "imp_uid", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "대상 본인인증 정보의 ", - "kind": "text" - }, - { - "text": "{@link ", - "kind": "link" - }, - { - "text": "IIamportCertification.imp_uid", - "kind": "linkName", - "target": { - "fileName": "D:/github/samchon/payments/packages/fake-iamport-server/src/api/structures/IIamportCertification.ts", - "textSpan": { - "start": 429, - "length": 16 - } - } - }, - { - "text": "}", - "kind": "link" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "본인인증 정보", - "kind": "text" - } - ] - }, - { - "name": "security", - "text": [ - { - "text": "bearer", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "GET" - }, - "delete": { - "tags": [], - "parameters": [ - { - "name": "imp_uid", - "in": "path", - "schema": { - "type": "string" - }, - "description": "대상 본인인증 정보의 ", - "required": true - } - ], - "responses": { - "200": { - "description": "삭제된 본인인증 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IIamportResponseIIamportCertification" - } - } - }, - "x-nestia-encrypted": false - } - }, - "summary": "본인인증 정보 삭제하기", - "description": "본인인증 정보 삭제하기.", - "security": [ - { - "bearer": [] - } - ], - "x-nestia-namespace": "certifications.erase", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "imp_uid", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "대상 본인인증 정보의 ", - "kind": "text" - }, - { - "text": "{@link ", - "kind": "link" - }, - { - "text": "IIamportCertification.imp_uid", - "kind": "linkName", - "target": { - "fileName": "D:/github/samchon/payments/packages/fake-iamport-server/src/api/structures/IIamportCertification.ts", - "textSpan": { - "start": 429, - "length": 16 - } - } - }, - { - "text": "}", - "kind": "link" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "삭제된 본인인증 정보", - "kind": "text" - } - ] - }, - { - "name": "security", - "text": [ - { - "text": "bearer", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "DELETE" - } - }, - "/certifications/otp/request": { - "post": { - "tags": [], - "parameters": [], - "requestBody": { - "description": "본인인증 요청 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IIamportCertification.IStore" - } - } - }, - "required": true, - "x-nestia-encrypted": false - }, - "responses": { - "201": { - "description": "진행 중인 본인인증의 식별자 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IIamportResponseIIamportCertification.IAccessor" - } - } - }, - "x-nestia-encrypted": false - } - }, - "summary": "본인인증 요청하기", - "description": "본인인증 요청하기.\n\n`certifications.otp.request` 는 아임포트 서버에 본인인증을 요청하는 API 함수이다.\n이 API 를 호출하면 본인인증 대상자의 핸드폰으로 OTP 문자가 전송되며, 본인인증\n대상자가 {@link certifications.otp.confirm } 을 통하여 이 OTP 번호를 정확히\n입력함으로써, 본인인증이 완결된다.\n\n또한 본인인증 대상자가 자신의 핸드폰으로 전송된 OTP 문자를 입력하기 전에도,\n여전히해당 본인인증 내역은 {@link certifications.at } 함수를 통하여 조회할 수 있다.\n다만, 이 때 리턴되는 {@link IIamportCertification } 에서 인증의 완결 여부를\n지칭하는 {@link IIamportCertification.certified } 값은 `false` 이다.", - "security": [ - { - "bearer": [] - } - ], - "x-nestia-namespace": "certifications.otp.request.request", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "input", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "본인인증 요청 정보", - "kind": "text" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "진행 중인 본인인증의 식별자 정보", - "kind": "text" - } - ] - }, - { - "name": "security", - "text": [ - { - "text": "bearer", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "POST" - } - }, - "/certifications/otp/confirm/{imp_uid}": { - "post": { - "tags": [], - "parameters": [ - { - "name": "imp_uid", - "in": "path", - "schema": { - "type": "string" - }, - "description": "대상 본인인증 정보의 ", - "required": true - } - ], - "requestBody": { - "description": "OTP 코드", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IIamportCertification.IConfirm" - } - } - }, - "required": true, - "x-nestia-encrypted": false - }, - "responses": { - "201": { - "description": "인증 완료된 본인인증 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IIamportResponseIIamportCertification" - } - } - }, - "x-nestia-encrypted": false - } - }, - "summary": "본인인증 시 발급된 OTP 코드 입력하기", - "description": "본인인증 시 발급된 OTP 코드 입력하기.\n\n`certifications.otp.confirm` 는 {@link certifications.otp.request } 를 통하여\n발급된 본인인증 건에 대하여, 본인인증 대상자의 휴대폰으로 전송된 OTP 번호를\n검증하고, 입력한 OTP 번호가 맞거든 해당 본인인증 건을 승인하여 완료 처리해주는\nAPI 함수이다.\n\n이처럼 본인인증을 완료하거든, 해당 본인인증 건 {@link IIamportCertification } 의\n{@link IIamportCertification.certified } 값이 비로소 `true` 로 변경되어,\n비로소 완결된다.", - "security": [ - { - "bearer": [] - } - ], - "x-nestia-namespace": "certifications.otp.confirm.confirm", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "imp_uid", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "대상 본인인증 정보의 ", - "kind": "text" - }, - { - "text": "{@link ", - "kind": "link" - }, - { - "text": "IIamportCertification.imp_uid", - "kind": "linkName", - "target": { - "fileName": "D:/github/samchon/payments/packages/fake-iamport-server/src/api/structures/IIamportCertification.ts", - "textSpan": { - "start": 429, - "length": 16 - } - } - }, - { - "text": "}", - "kind": "link" - } - ] - }, - { - "name": "param", - "text": [ - { - "text": "input", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "OTP 코드", - "kind": "text" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "인증 완료된 본인인증 정보", - "kind": "text" - } - ] - }, - { - "name": "security", - "text": [ - { - "text": "bearer", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "POST" - } - }, - "/internal/webhook": { - "post": { - "tags": [], - "parameters": [], - "requestBody": { - "description": "웹훅 이벤트 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IIamportPayment.IWebhook" - } - } - }, - "required": true, - "x-nestia-encrypted": false - }, - "responses": { - "201": { - "description": "", - "x-nestia-encrypted": false - } - }, - "summary": "웹훅 이벤트 더미 리스너", - "description": "웹훅 이벤트 더미 리스너.\n\n`internal.webhook` 은 실제 아임포트의 서버에는 존재하지 않는 API 로써,\n`fake-impoart-server` 의 {@link Configuration.WEBHOOK_URL } 에 아무런 URL 을 설정하지\n않으면, `fake-iamport-server` 로부터 발생하는 모든 종류의 웹훅 이벤트는 이 곳으로 전달되어\n무의미하게 사라진다.\n\n따라서 `fake-iamport-server` 를 사용하여 아임포트 서버와의 연동을 미리 검증코자 할 때는,\n반드시 {@link Configuration.WEBHOOK_URL } 를 설정하여 웹훅 이벤트가 귀하의 백엔드 서버로\n제대로 전달되도록 하자.", - "x-nestia-namespace": "internal.webhook.webhook", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "input", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "웹훅 이벤트 정보", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "POST" - } - }, - "/internal/deposit/{imp_uid}": { - "put": { - "tags": [], - "parameters": [ - { - "name": "imp_uid", - "in": "path", - "schema": { - "type": "string" - }, - "description": "대상 결제의 ", - "required": true - } - ], - "responses": { - "201": { - "description": "", - "x-nestia-encrypted": false - } - }, - "summary": "가상 계좌에 입금하기", - "description": "가상 계좌에 입금하기.\n\n`internal.deposit` 은 실제 아임포트 결제 서버에는 존재하지 않는 API 로써, 가상 계좌\n결제를 신청한 고객이, 이후 가상 계좌에 목표 금액을 입금하는 상황을 시뮬레이션 할 수 있는\n함수이다.\n\n즉, `internal.deposit` 는 고객이 스스로에게 가상으로 발급된 계좌에 입금을 하고, 그에 따라\n아임포트 서버에서 webhook 이벤트가 발생, 이를 귀하의 백엔드 서버로 전송하는 일련의 상황을\n시뮬레이션하기 위하여 설계된 테스트 함수다.", - "security": [ - { - "bearer": [] - } - ], - "x-nestia-namespace": "internal.deposit.deposit", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "imp_uid", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "대상 결제의 ", - "kind": "text" - }, - { - "text": "{@link ", - "kind": "link" - }, - { - "text": "IIamportVBankPayment.imp_uid ", - "kind": "linkText" - }, - { - "text": "}", - "kind": "link" - } - ] - }, - { - "name": "security", - "text": [ - { - "text": "bearer", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "PUT" - } - }, - "/payments/{imp_uid}": { - "get": { - "tags": [], - "parameters": [ - { - "name": "imp_uid", - "in": "path", - "schema": { - "type": "string" - }, - "description": "대상 결제 기록의 ", - "required": true - }, - { - "name": "query", - "in": "query", - "schema": { - "$ref": "#/components/schemas/IIamportPayment.IQuery" - }, - "description": "결제 수단이 페이팔인 경우에 사용", - "required": true - } - ], - "responses": { - "200": { - "description": "결제 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IIamportResponseIIamportPayment" - } - } - }, - "x-nestia-encrypted": false - } - }, - "summary": "결제 기록 열람하기", - "description": "결제 기록 열람하기.\n\n아임포트를 통하여 발생한 결제 기록을 열람한다.", - "security": [ - { - "bearer": [] - } - ], - "x-nestia-namespace": "payments.at", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "imp_uid", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "대상 결제 기록의 ", - "kind": "text" - }, - { - "text": "{@link ", - "kind": "link" - }, - { - "text": "IIamportPayment.imp_uid", - "kind": "linkName", - "target": { - "fileName": "D:/github/samchon/payments/packages/fake-iamport-server/src/api/structures/IIamportPayment.ts", - "textSpan": { - "start": 2017, - "length": 16 - } - } - }, - { - "text": "}", - "kind": "link" - } - ] - }, - { - "name": "param", - "text": [ - { - "text": "query", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "결제 수단이 페이팔인 경우에 사용", - "kind": "text" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "결제 정보", - "kind": "text" - } - ] - }, - { - "name": "security", - "text": [ - { - "text": "bearer", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "GET" - } - }, - "/payments/cancel": { - "post": { - "tags": [], - "parameters": [], - "requestBody": { - "description": "결제 취소 입력 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IIamportPaymentCancel.IStore" - } - } - }, - "required": true, - "x-nestia-encrypted": false - }, - "responses": { - "201": { - "description": "취소된 결제 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IIamportResponseIIamportPayment" - } - } - }, - "x-nestia-encrypted": false - } - }, - "summary": "결제 취소하기", - "description": "결제 취소하기.\n\n만약 가상 계좌를 통한 결제였다면, 반드시 환불 계좌 정보를 입력해줘야 한다.", - "security": [ - { - "bearer": [] - } - ], - "x-nestia-namespace": "payments.cancel.cancel", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "input", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "결제 취소 입력 정보", - "kind": "text" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "취소된 결제 정보", - "kind": "text" - } - ] - }, - { - "name": "security", - "text": [ - { - "text": "bearer", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "POST" - } - }, - "/receipts/{imp_uid}": { - "get": { - "tags": [], - "parameters": [ - { - "name": "imp_uid", - "in": "path", - "schema": { - "type": "string" - }, - "description": "귀속 결제의 ", - "required": true - } - ], - "responses": { - "200": { - "description": "현금 영수증 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IIamportResponseIIamportReceipt" - } - } - }, - "x-nestia-encrypted": false - } - }, - "summary": "현금 영수증 조회하기", - "description": "현금 영수증 조회하기.", - "security": [ - { - "bearer": [] - } - ], - "x-nestia-namespace": "receipts.at", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "imp_uid", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "귀속 결제의 ", - "kind": "text" - }, - { - "text": "{@link ", - "kind": "link" - }, - { - "text": "IIamportPayment.imp_uid", - "kind": "linkName", - "target": { - "fileName": "D:/github/samchon/payments/packages/fake-iamport-server/src/api/structures/IIamportPayment.ts", - "textSpan": { - "start": 2017, - "length": 16 - } - } - }, - { - "text": "}", - "kind": "link" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "현금 영수증 정보", - "kind": "text" - } - ] - }, - { - "name": "security", - "text": [ - { - "text": "bearer", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "GET" - }, - "post": { - "tags": [], - "parameters": [ - { - "name": "imp_uid", - "in": "path", - "schema": { - "type": "string" - }, - "description": "귀속 결제의 ", - "required": true - } - ], - "requestBody": { - "description": "현금 영수증 입력 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IIamportReceipt.IStore" - } - } - }, - "required": true, - "x-nestia-encrypted": false - }, - "responses": { - "201": { - "description": "현금 영수증 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IIamportResponseIIamportReceipt" - } - } - }, - "x-nestia-encrypted": false - } - }, - "summary": "현금 영수증 발행하기", - "description": "현금 영수증 발행하기.", - "security": [ - { - "bearer": [] - } - ], - "x-nestia-namespace": "receipts.store", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "imp_uid", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "귀속 결제의 ", - "kind": "text" - }, - { - "text": "{@link ", - "kind": "link" - }, - { - "text": "IIamportPayment.imp_uid", - "kind": "linkName", - "target": { - "fileName": "D:/github/samchon/payments/packages/fake-iamport-server/src/api/structures/IIamportPayment.ts", - "textSpan": { - "start": 2017, - "length": 16 - } - } - }, - { - "text": "}", - "kind": "link" - } - ] - }, - { - "name": "param", - "text": [ - { - "text": "input", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "현금 영수증 입력 정보", - "kind": "text" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "현금 영수증 정보", - "kind": "text" - } - ] - }, - { - "name": "security", - "text": [ - { - "text": "bearer", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "POST" - }, - "delete": { - "tags": [], - "parameters": [ - { - "name": "imp_uid", - "in": "path", - "schema": { - "type": "string" - }, - "description": "귀속 결제의 ", - "required": true - } - ], - "responses": { - "200": { - "description": "취소된 현금 영수증 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IIamportResponseIIamportReceipt" - } - } - }, - "x-nestia-encrypted": false - } - }, - "summary": "현금 영수증 취소하기", - "description": "현금 영수증 취소하기.", - "security": [ - { - "bearer": [] - } - ], - "x-nestia-namespace": "receipts.erase", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "imp_uid", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "귀속 결제의 ", - "kind": "text" - }, - { - "text": "{@link ", - "kind": "link" - }, - { - "text": "IIamportPayment.imp_uid", - "kind": "linkName", - "target": { - "fileName": "D:/github/samchon/payments/packages/fake-iamport-server/src/api/structures/IIamportPayment.ts", - "textSpan": { - "start": 2017, - "length": 16 - } - } - }, - { - "text": "}", - "kind": "link" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "취소된 현금 영수증 정보", - "kind": "text" - } - ] - }, - { - "name": "security", - "text": [ - { - "text": "bearer", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "DELETE" - } - }, - "/users/getToken": { - "post": { - "tags": [], - "parameters": [], - "requestBody": { - "description": "아임포트의 API 및 secret 키 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IIamportUser.IAccessor" - } - } - }, - "required": true, - "x-nestia-encrypted": false - }, - "responses": { - "201": { - "description": "유저 인증 토큰 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IIamportResponseIIamportUser" - } - } - }, - "x-nestia-encrypted": false - } - }, - "summary": "유저 인증 토큰 발행하기", - "description": "유저 인증 토큰 발행하기.\n\n아임포트에 가입하여 부여받은 API 및 secret 키를 토대로, 유저 인증 토큰을 발행한다.\n\n단, 아임포트가 발급해주는 유저 인증 토큰에는 유효 시간 {@link IIamportUser.expired_at }\n이 있어, 해당 시간이 지나거든 기 발급 토큰이 만료되어 더 이상 쓸 수 없게 된다. 때문에\n아임포트의 이러한 시간 제한에 구애받지 않고 자유로이 아임포트의 API 를 이용하고 싶다면,\n`iamport-server-api` 에서 제공해주는 {@link IamportConnector } 를 활용하도록 하자.", - "x-nestia-namespace": "users.getToken.getToken", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "input", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "아임포트의 API 및 secret 키 정보", - "kind": "text" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "유저 인증 토큰 정보", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "POST" - } - }, - "/vbanks": { - "post": { - "tags": [], - "parameters": [], - "requestBody": { - "description": "가상 계좌 입력 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IIamportVBankPayment.IStore" - } - } - }, - "required": true, - "x-nestia-encrypted": false - }, - "responses": { - "201": { - "description": "가상 계좌 결제 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IIamportResponseIIamportVBankPayment" - } - } - }, - "x-nestia-encrypted": false - } - }, - "summary": "가상 계좌 발급하기", - "description": "가상 계좌 발급하기.", - "security": [ - { - "bearer": [] - } - ], - "x-nestia-namespace": "vbanks.store", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "input", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "가상 계좌 입력 정보", - "kind": "text" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "가상 계좌 결제 정보", - "kind": "text" - } - ] - }, - { - "name": "security", - "text": [ - { - "text": "bearer", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "POST" - }, - "put": { - "tags": [], - "parameters": [], - "requestBody": { - "description": "가상 계좌 편집 입력 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IIamportVBankPayment.IUpdate" - } - } - }, - "required": true, - "x-nestia-encrypted": false - }, - "responses": { - "201": { - "description": "편집된 가상 계좌 결제 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IIamportResponseIIamportVBankPayment" - } - } - }, - "x-nestia-encrypted": false - } - }, - "summary": "가상 계좌 편집하기", - "description": "가상 계좌 편집하기.", - "security": [ - { - "bearer": [] - } - ], - "x-nestia-namespace": "vbanks.update", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "input", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "가상 계좌 편집 입력 정보", - "kind": "text" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "편집된 가상 계좌 결제 정보", - "kind": "text" - } - ] - }, - { - "name": "security", - "text": [ - { - "text": "bearer", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "PUT" - } - } - }, - "components": { - "schemas": { - "IIamportResponseIIamportSubscription": { - "type": "object", - "properties": { - "code": { - "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "message": { - "description": "성공 또는 오류 메시지.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "response": { - "$ref": "#/components/schemas/IIamportSubscription" - } - }, - "nullable": false, - "required": [ - "code", - "message", - "response" - ], - "description": "아임포트 고유의 응답 데이터.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "IIamportSubscription": { - "type": "object", - "properties": { - "pg_provider": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "pg_id": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "card_name": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "card_code": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "card_number": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "card_type": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "customer_name": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "customer_tel": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "customer_email": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "customer_addr": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "customer_postcode": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "inserted": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "updated": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "customer_uid": { - "description": "고객 식별자 키.\n\n아임포트가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.\n\n다만 고객이라기보다 실제로는 카드의 식별자 키로 써야함.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "nullable": false, - "required": [ - "pg_provider", - "pg_id", - "card_name", - "card_code", - "card_number", - "card_type", - "customer_name", - "customer_tel", - "customer_email", - "customer_addr", - "customer_postcode", - "inserted", - "updated", - "customer_uid" - ], - "description": "간편 결제 카드 정보.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "IIamportSubscription.IStore": { - "type": "object", - "properties": { - "card_number": { - "description": "카드 번호.\n\n형식: XXXX-XXXX-XXXX-XXXX", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "pattern": "\\d{4}-\\d{4}-\\d{4}-\\d{4}", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Pattern<\"\\\\d{4}-\\\\d{4}-\\\\d{4}-\\\\d{4}\">", - "kind": "pattern", - "value": "\\d{4}-\\d{4}-\\d{4}-\\d{4}", - "validate": "/\\d{4}-\\d{4}-\\d{4}-\\d{4}/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "expiry": { - "description": "카드 유효기간.\n\n형식: YYYY-MM", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "pattern": "^([0-9]{4})-(0[1-9]|1[012])$", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Pattern<\"^([0-9]{4})-(0[1-9]|1[012])$\">", - "kind": "pattern", - "value": "^([0-9]{4})-(0[1-9]|1[012])$", - "validate": "/^([0-9]{4})-(0[1-9]|1[012])$/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "birth": { - "description": "생년월일 YYMMDD 또는 사업자등록번호 10자리.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "pattern": "^(([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01]))|(\\d{10})$", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Pattern<\"^(([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01]))|(\\\\d{10})$\">", - "kind": "pattern", - "value": "^(([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01]))|(\\d{10})$", - "validate": "/^(([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01]))|(\\d{10})$/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "pwd_2digit": { - "description": "카드 비밀번호 앞 두 자리.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string", - "pattern": "\\d{2}", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Pattern<\"\\\\d{2}\">", - "kind": "pattern", - "value": "\\d{2}", - "validate": "/\\d{2}/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "cvc": { - "description": "카드 인증번호 (카드 뒷면 3 자리).", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string", - "pattern": "\\d{2}", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Pattern<\"\\\\d{2}\">", - "kind": "pattern", - "value": "\\d{2}", - "validate": "/\\d{2}/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "customer_name": { - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "customer_tel": { - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "customer_email": { - "x-typia-required": false, - "x-typia-optional": true, - "type": "string", - "format": "email", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"email\">", - "kind": "format", - "value": "email", - "validate": "/^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "customr_addr": { - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "customer_postcode": { - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "customer_uid": { - "description": "고객 식별자 키.\n\n아임포트가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.\n\n다만 고객이라기보다 실제로는 카드의 식별자 키로 써야함.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "nullable": false, - "required": [ - "card_number", - "expiry", - "birth", - "customer_uid" - ], - "description": "간편 결제 카드 입력 정보.", - "x-typia-jsDocTags": [] - }, - "IIamportSubscription.IOnetime": { - "type": "object", - "properties": { - "customer_uid": { - "description": "고객 식별자 키.\n\n아임포트가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.\n\n다만 고객이라기보다 실제로는 카드의 식별자 키로 써야함.\n\n이를 생략시 단순 결제로만 그치며, 카드 정보가 간편 결제용으로 등록되지 아니함.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "card_number": { - "description": "카드 번호.\n\n형식: XXXX-XXXX-XXXX-XXXX", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "pattern": "\\d{4}-\\d{4}-\\d{4}-\\d{4}", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Pattern<\"\\\\d{4}-\\\\d{4}-\\\\d{4}-\\\\d{4}\">", - "kind": "pattern", - "value": "\\d{4}-\\d{4}-\\d{4}-\\d{4}", - "validate": "/\\d{4}-\\d{4}-\\d{4}-\\d{4}/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "expiry": { - "description": "카드 유효기간.\n\n형식: YYYY-MM", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "pattern": "^([0-9]{4})-(0[1-9]|1[012])$", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Pattern<\"^([0-9]{4})-(0[1-9]|1[012])$\">", - "kind": "pattern", - "value": "^([0-9]{4})-(0[1-9]|1[012])$", - "validate": "/^([0-9]{4})-(0[1-9]|1[012])$/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "birth": { - "description": "생년월일 YYMMDD 또는 사업자등록번호 10자리.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "pattern": "^(([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01]))|(\\d{10})$", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Pattern<\"^(([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01]))|(\\\\d{10})$\">", - "kind": "pattern", - "value": "^(([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01]))|(\\d{10})$", - "validate": "/^(([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01]))|(\\d{10})$/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "pwd_2digit": { - "description": "카드 비밀번호 앞 두 자리.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string", - "pattern": "\\d{2}", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Pattern<\"\\\\d{2}\">", - "kind": "pattern", - "value": "\\d{2}", - "validate": "/\\d{2}/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "cvc": { - "description": "카드 인증번호 (카드 뒷면 3 자리).", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string", - "pattern": "\\d{2}", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Pattern<\"\\\\d{2}\">", - "kind": "pattern", - "value": "\\d{2}", - "validate": "/\\d{2}/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "customer_name": { - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "customer_tel": { - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "customer_email": { - "x-typia-required": false, - "x-typia-optional": true, - "type": "string", - "format": "email", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"email\">", - "kind": "format", - "value": "email", - "validate": "/^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "customr_addr": { - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "customer_postcode": { - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "merchant_uid": { - "description": "주문 식별자 키.\n\n아임포트가 아닌 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "amount": { - "description": "결제 총액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "name": { - "description": "주문 이름.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "currency": { - "description": "통화 정보.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string", - "enum": [ - "KRW", - "USD", - "EUR", - "JPY" - ] - }, - "tax_free": { - "description": "면세 공급가액.\n\n기본값은 0 로써, 알아서 amount 의 1/11 로써 부가세 처리됨.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "number" - }, - "card_quota": { - "description": "할부 개월 수.\n\n일시불은 0.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "number" - }, - "buyer_name": { - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "buyer_email": { - "x-typia-required": false, - "x-typia-optional": true, - "type": "string", - "format": "email", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"email\">", - "kind": "format", - "value": "email", - "validate": "/^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "buyer_tel": { - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "buyer_addr": { - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "buyer_postcode": { - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "interest_free_by_merchant": { - "description": "카드할부처리할 때, 할부이자가 발생하는 경우 (카드사 무이자 프로모션 제외).\n\n부과되는 할부이자를 고객대신 가맹점이 지불하고자 PG사와 계약된 경우(현재, 나이스페이먼츠만 지원됨)", - "x-typia-required": false, - "x-typia-optional": true, - "type": "boolean" - }, - "use_card_point": { - "description": "승인요청시 카드사 포인트 차감하며 결제승인처리할지 flag.\n\nPG사 영업담당자와 계약 당시 사전 협의 필요(현재, 나이스페이먼츠만 지원됨)", - "x-typia-required": false, - "x-typia-optional": true, - "type": "boolean" - }, - "custom_data": { - "description": "임의 정보를 기재할 수 있다.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "notice_url": { - "description": "결제 성공시 통지될 Notification, 웹훅 URL.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string", - "format": "url", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"url\">", - "kind": "format", - "value": "url", - "validate": "/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - } - }, - "nullable": false, - "required": [ - "card_number", - "expiry", - "birth", - "merchant_uid", - "amount", - "name" - ], - "description": "결제 신청 입력 정보.", - "x-typia-jsDocTags": [] - }, - "IIamportResponseIIamportCardPayment": { - "type": "object", - "properties": { - "code": { - "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "message": { - "description": "성공 또는 오류 메시지.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "response": { - "$ref": "#/components/schemas/IIamportCardPayment" - } - }, - "nullable": false, - "required": [ - "code", - "message", - "response" - ], - "description": "아임포트 고유의 응답 데이터.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "IIamportCardPayment": { - "type": "object", - "properties": { - "card_code": { - "description": "카드 식별자 코드.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "card_name": { - "description": "카드 이름.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "card_number": { - "description": "카드 번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "pattern": "\\d{4}-\\d{4}-\\d{4}-\\d{4}", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Pattern<\"\\\\d{4}-\\\\d{4}-\\\\d{4}-\\\\d{4}\">", - "kind": "pattern", - "value": "\\d{4}-\\d{4}-\\d{4}-\\d{4}", - "validate": "/\\d{4}-\\d{4}-\\d{4}-\\d{4}/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "card_quota": { - "description": "할부 개월 수.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "integer", - "x-typia-typeTags": [ - { - "target": "number", - "name": "Type<\"uint32\">", - "kind": "type", - "value": "uint32", - "validate": "Math.floor($input) === $input && 0 <= $input && $input <= 4294967295", - "exclusive": true - } - ] - }, - "apply_num": { - "description": "카드사 승인번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "pay_method": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "card", - "samsung" - ] - }, - "imp_uid": { - "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "merchant_uid": { - "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "name": { - "description": "주문명, 누락 가능.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "amount": { - "description": "결제 총액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "cancel_amount": { - "description": "결제 취소, 환불 총액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "currency": { - "$ref": "#/components/schemas/IIamportPayment.Currency" - }, - "receipt_url": { - "description": "영수증 URL.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "url", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"url\">", - "kind": "format", - "value": "url", - "validate": "/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "cash_receipt_issue": { - "description": "현금 영수증 발행 여부.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "channel": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "pg_provider": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "emb_pg_provider": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "pg_id": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "pg_tid": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "escrow": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "buyer_name": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "buyer_email": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "email", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"email\">", - "kind": "format", - "value": "email", - "validate": "/^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ], - "nullable": true - }, - "buyer_tel": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "buyer_addr": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "buyer_postcode": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "customer_uid": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "customer_uid_usage": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "custom_data": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "user_agent": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "status": { - "$ref": "#/components/schemas/IIamportPayment.Status" - }, - "started_at": { - "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "paid_at": { - "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "failed_at": { - "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "cancelled_at": { - "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "fail_reason": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "cancel_reason": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "cancel_history": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "array", - "items": { - "$ref": "#/components/schemas/IIamportPaymentCancel" - } - } - }, - "nullable": false, - "required": [ - "card_code", - "card_name", - "card_number", - "card_quota", - "apply_num", - "pay_method", - "imp_uid", - "merchant_uid", - "name", - "amount", - "cancel_amount", - "currency", - "receipt_url", - "cash_receipt_issue", - "channel", - "pg_provider", - "emb_pg_provider", - "pg_id", - "pg_tid", - "escrow", - "buyer_name", - "buyer_email", - "buyer_tel", - "buyer_addr", - "buyer_postcode", - "customer_uid", - "customer_uid_usage", - "custom_data", - "user_agent", - "status", - "started_at", - "paid_at", - "failed_at", - "cancelled_at", - "fail_reason", - "cancel_reason", - "cancel_history" - ], - "description": "카드 결제 정보.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "IIamportPayment.Currency": { - "type": "string", - "enum": [ - "KRW", - "USD", - "EUR", - "JPY" - ] - }, - "IIamportPayment.Status": { - "type": "string", - "enum": [ - "paid", - "ready", - "failed", - "cancelled" - ] - }, - "IIamportPaymentCancel": { - "type": "object", - "properties": { - "pg_id": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "pg_tid": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "amount": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "cancelled_at": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "reason": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "receipt_url": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "url", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"url\">", - "kind": "format", - "value": "url", - "validate": "/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - } - }, - "nullable": false, - "required": [ - "pg_id", - "pg_tid", - "amount", - "cancelled_at", - "reason", - "receipt_url" - ], - "description": "결제 취소 정보.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "IIamportSubscription.IAgain": { - "type": "object", - "properties": { - "merchant_uid": { - "description": "주문 식별자 키.\n\n아임포트가 아닌 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "amount": { - "description": "결제 총액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "name": { - "description": "주문 이름.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "currency": { - "description": "통화 정보.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string", - "enum": [ - "KRW", - "USD", - "EUR", - "JPY" - ] - }, - "tax_free": { - "description": "면세 공급가액.\n\n기본값은 0 로써, 알아서 amount 의 1/11 로써 부가세 처리됨.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "number" - }, - "card_quota": { - "description": "할부 개월 수.\n\n일시불은 0.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "number" - }, - "buyer_name": { - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "buyer_email": { - "x-typia-required": false, - "x-typia-optional": true, - "type": "string", - "format": "email", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"email\">", - "kind": "format", - "value": "email", - "validate": "/^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "buyer_tel": { - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "buyer_addr": { - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "buyer_postcode": { - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "interest_free_by_merchant": { - "description": "카드할부처리할 때, 할부이자가 발생하는 경우 (카드사 무이자 프로모션 제외).\n\n부과되는 할부이자를 고객대신 가맹점이 지불하고자 PG사와 계약된 경우(현재, 나이스페이먼츠만 지원됨)", - "x-typia-required": false, - "x-typia-optional": true, - "type": "boolean" - }, - "use_card_point": { - "description": "승인요청시 카드사 포인트 차감하며 결제승인처리할지 flag.\n\nPG사 영업담당자와 계약 당시 사전 협의 필요(현재, 나이스페이먼츠만 지원됨)", - "x-typia-required": false, - "x-typia-optional": true, - "type": "boolean" - }, - "custom_data": { - "description": "임의 정보를 기재할 수 있다.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "notice_url": { - "description": "결제 성공시 통지될 Notification, 웹훅 URL.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string", - "format": "url", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"url\">", - "kind": "format", - "value": "url", - "validate": "/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "customer_uid": { - "description": "고객 식별자 키.\n\n아임포트가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.\n\n다만 고객이라기보다 실제로는 카드의 식별자 키로 써야함.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "nullable": false, - "required": [ - "merchant_uid", - "amount", - "name", - "customer_uid" - ], - "description": "간편 결제 카드로 결제 신청 입력 정보.", - "x-typia-jsDocTags": [] - }, - "IIamportResponseIIamportCertification": { - "type": "object", - "properties": { - "code": { - "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "message": { - "description": "성공 또는 오류 메시지.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "response": { - "$ref": "#/components/schemas/IIamportCertification" - } - }, - "nullable": false, - "required": [ - "code", - "message", - "response" - ], - "description": "아임포트 고유의 응답 데이터.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "IIamportCertification": { - "type": "object", - "properties": { - "imp_uid": { - "description": "아임포트가 발급해 준 식별자 번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "merchant_uid": { - "description": "서비스로부터의 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "name": { - "description": "본인인증대상자 성명.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "gender": { - "description": "성별.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "birth": { - "description": "생년월일.\n\n리눅스 타임이 쓰인다.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "birthday": { - "description": "생년월일, YYYYMMDD 형식.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "pattern": "^([0-9]{4})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Pattern<\"^([0-9]{4})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$\">", - "kind": "pattern", - "value": "^([0-9]{4})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$", - "validate": "/^([0-9]{4})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "foreigner": { - "description": "외국인 여부.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "phone": { - "description": "본인인증 대상자 핸드폰 번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "carrier": { - "description": "본인인증 대상자 통신사 코드.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "SKT", - "KT", - "LGT" - ] - }, - "certified": { - "description": "OTP 인증 여부.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "certified_at": { - "description": "OTP 인증 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "unique_key": { - "description": "뭔지 잘 모름, 용도 아시는 분?", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "unique_in_site": { - "description": "뭔지 잘 모름, 용도 아시는 분?", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "pg_tid": { - "description": "뭔지 잘 모름, 용도 아시는 분?", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "pg_provider": { - "description": "PG 제공자.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "origin": { - "description": "뭔지 잘 모름, 용도 아시는 분?", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "__otp": { - "description": "(테스트 전용) OTP 코드.\n\n오직 `fake-iamport-server` 에서만 쓰이는 속성으로써, 본인인증을 시뮬레이션할 때,\n어떠한 OTP 코드가 발급되었는 지를 확인하기 위하여 사용된다. 이를 이용하여\n{@link functional.certifications.otp.confirm } 함수를 호출하면, 본인인증을 완료할\n수 있다.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - } - }, - "nullable": false, - "required": [ - "imp_uid", - "merchant_uid", - "name", - "gender", - "birth", - "birthday", - "foreigner", - "phone", - "carrier", - "certified", - "certified_at", - "unique_key", - "unique_in_site", - "pg_tid", - "pg_provider", - "origin" - ], - "description": "본인 인증 내역.\n\n`IIamportCertification` 은 아임포트의 본인인증 정보를 형상화한 자료구조 인터페이스이다.\n\n단, `IIamportCertification` 레코드의 존재가 곧 본인인증의 완결을 뜻하는 것은 아니다.\n{@link IIamportCertification.certified } 값이 `true` 여야만이 비로소, 본인인증\n대상자가 자신의 핸드폰 번호로 전송된 OTP 를 아임포트의 본인인증 팝업창에 정확히 적어,\n본인인증을 완료했음을 의미한다.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "IIamportCertification.IStore": { - "type": "object", - "properties": { - "name": { - "description": "본인인증대상자 성명.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "phone": { - "description": "본인인증 대상자 핸드폰 번호.\n\n핸드폰 번호에 \"-\" 값이 들어가던 아니던 상관 없음.\n\n다만, 내부적으로는 \"-\" 값을 제거하여 처리한다.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "birth": { - "description": "생년월일.\n\nYYYYMMDD 형식.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "pattern": "^([0-9]{4})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Pattern<\"^([0-9]{4})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$\">", - "kind": "pattern", - "value": "^([0-9]{4})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$", - "validate": "/^([0-9]{4})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "gender_digit": { - "description": "주민등록 뒷부분 첫 자리.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "carrier": { - "description": "본인인증 대상자 통신사 코드.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "SKT", - "KT", - "LGT" - ] - }, - "is_mvno": { - "description": "알뜰폰 여부.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "boolean" - }, - "commpany": { - "description": "가맹점 서비스 명칭 또는 domain URL.\n\nKISA 에서 대상자에게 발송하는 SMS에 안내될 서비스 명칭.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "merchant_uid": { - "description": "귀사 서비스에서의 본인인증 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "pg": { - "description": "PG 사 구분자.\n\n다날 상점아이디를 2개 이상 동시에 사용하시려는 경우에 설정하면 된다.\n\n**danal.{상점아이디}** 형태로 지정.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - } - }, - "nullable": false, - "required": [ - "name", - "phone", - "birth", - "gender_digit", - "carrier" - ], - "description": "본인 인증 입력 정보.", - "x-typia-jsDocTags": [] - }, - "IIamportResponseIIamportCertification.IAccessor": { - "type": "object", - "properties": { - "code": { - "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "message": { - "description": "성공 또는 오류 메시지.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "response": { - "$ref": "#/components/schemas/IIamportCertification.IAccessor" - } - }, - "nullable": false, - "required": [ - "code", - "message", - "response" - ], - "description": "아임포트 고유의 응답 데이터.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "IIamportCertification.IAccessor": { - "type": "object", - "properties": { - "imp_uid": { - "description": "본인인증정보의 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "nullable": false, - "required": [ - "imp_uid" - ], - "description": "본인인증 정보의 접근자 구조체.", - "x-typia-jsDocTags": [] - }, - "IIamportCertification.IConfirm": { - "type": "object", - "properties": { - "otp": { - "description": "SMS 로 전송된 본인인증 번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "nullable": false, - "required": [ - "otp" - ], - "description": "본인인증 승인을 위한 입력 정보.", - "x-typia-jsDocTags": [] - }, - "IIamportPayment.IWebhook": { - "type": "object", - "properties": { - "imp_uid": { - "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "merchant_uid": { - "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "status": { - "description": "현재 상태.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "paid", - "ready", - "failed", - "cancelled" - ] - } - }, - "nullable": false, - "required": [ - "imp_uid", - "merchant_uid", - "status" - ], - "description": "웹훅 데이터.", - "x-typia-jsDocTags": [] - }, - "IIamportPayment.IQuery": { - "type": "object", - "properties": { - "extension": { - "description": "페이팔의 경우, 이 값을 `true` 로 할 것.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "boolean" - } - }, - "nullable": false, - "description": "결제 수단이 페이팔인 경우, 페이팔의 구매자 보호정책에 의해 결제 승인 시점에\nPending 상태를 만든 후, 내부 심사등을 통해 최종 결제 완료라고 변경함.\n\n`iamport` 의 기술적 이슈로 해당 상태를 status: failed 로 기록함. 추후\n페이팔에서 최종결제완료로 변경된 경우, `iamport` 에서 `paid` 로 변경 후,\n해당건에 대한 웹훅 발송. `iamport` 를 사용하는 고객사에서는, failed 로 이미\n처리된 결제건에 대한 paid 상태의 웹훅을 받는 문제점이 생김.\n\n이에, `iamport` 에서 제공하는 `/payment/{imp_uid}` 에 query-string 으로\n`extension=true` 옵션을 추가해야 함", - "x-typia-jsDocTags": [ - { - "name": "issue", - "text": [ - { - "text": "https://github.com/samchon/fake-iamport-server/issues/13", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Sangjin Han - https://github.com/ltnscp9028", - "kind": "text" - } - ] - } - ] - }, - "IIamportResponseIIamportPayment": { - "type": "object", - "properties": { - "code": { - "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "message": { - "description": "성공 또는 오류 메시지.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "response": { - "$ref": "#/components/schemas/IIamportPayment" - } - }, - "nullable": false, - "required": [ - "code", - "message", - "response" - ], - "description": "아임포트 고유의 응답 데이터.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "IIamportPayment": { - "oneOf": [ - { - "$ref": "#/components/schemas/IIamportCardPayment" - }, - { - "$ref": "#/components/schemas/IIamportTransferPayment" - }, - { - "$ref": "#/components/schemas/IIamportVBankPayment" - }, - { - "$ref": "#/components/schemas/IIamportPayment.IBasephonekpaykakaopaypaycolpayssgpaytosspayculturelandsmartculturehappymoneybooknlifepoint" - } - ], - "description": "결제 정보.\n\n`IIamportPayment` 는 아임포트의 결제 정보를 형상화한 자료구조이자 유니언 타입의\n인터페이스로써, if condition 을 통하여 method 값을 특정하면, 파생 타입이 자동으로\n지정된다.\n\n```typescript\nif (payment.pay_method === \"card\")\n payment.card_number; // payment be IIamportCardPayment\n```", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "IIamportTransferPayment": { - "type": "object", - "properties": { - "bank_code": { - "description": "은행 식별자 코드.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "bank_name": { - "description": "은행 이름.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "pay_method": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "trans" - ] - }, - "imp_uid": { - "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "merchant_uid": { - "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "name": { - "description": "주문명, 누락 가능.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "amount": { - "description": "결제 총액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "cancel_amount": { - "description": "결제 취소, 환불 총액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "currency": { - "$ref": "#/components/schemas/IIamportPayment.Currency" - }, - "receipt_url": { - "description": "영수증 URL.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "url", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"url\">", - "kind": "format", - "value": "url", - "validate": "/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "cash_receipt_issue": { - "description": "현금 영수증 발행 여부.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "channel": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "pg_provider": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "emb_pg_provider": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "pg_id": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "pg_tid": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "escrow": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "buyer_name": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "buyer_email": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "email", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"email\">", - "kind": "format", - "value": "email", - "validate": "/^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ], - "nullable": true - }, - "buyer_tel": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "buyer_addr": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "buyer_postcode": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "customer_uid": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "customer_uid_usage": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "custom_data": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "user_agent": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "status": { - "$ref": "#/components/schemas/IIamportPayment.Status" - }, - "started_at": { - "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "paid_at": { - "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "failed_at": { - "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "cancelled_at": { - "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "fail_reason": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "cancel_reason": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "cancel_history": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "array", - "items": { - "$ref": "#/components/schemas/IIamportPaymentCancel" - } - } - }, - "nullable": false, - "required": [ - "bank_code", - "bank_name", - "pay_method", - "imp_uid", - "merchant_uid", - "name", - "amount", - "cancel_amount", - "currency", - "receipt_url", - "cash_receipt_issue", - "channel", - "pg_provider", - "emb_pg_provider", - "pg_id", - "pg_tid", - "escrow", - "buyer_name", - "buyer_email", - "buyer_tel", - "buyer_addr", - "buyer_postcode", - "customer_uid", - "customer_uid_usage", - "custom_data", - "user_agent", - "status", - "started_at", - "paid_at", - "failed_at", - "cancelled_at", - "fail_reason", - "cancel_reason", - "cancel_history" - ], - "description": "계좌 이체 결제 정보.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "IIamportVBankPayment": { - "type": "object", - "properties": { - "vbank_code": { - "description": "가상 계좌 식별자 코드.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "vbank_name": { - "description": "가상 게좌 이름", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "vbank_num": { - "description": "가상 계좌 번호", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "vbank_holder": { - "description": "가상 계좌 예금주.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "vbank_date": { - "description": "가상 계좌 입금 만료 기한.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "vbank_issued_at": { - "description": "가상 계좌 개설 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "pay_method": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "vbank" - ] - }, - "imp_uid": { - "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "merchant_uid": { - "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "name": { - "description": "주문명, 누락 가능.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "amount": { - "description": "결제 총액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "cancel_amount": { - "description": "결제 취소, 환불 총액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "currency": { - "$ref": "#/components/schemas/IIamportPayment.Currency" - }, - "receipt_url": { - "description": "영수증 URL.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "url", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"url\">", - "kind": "format", - "value": "url", - "validate": "/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "cash_receipt_issue": { - "description": "현금 영수증 발행 여부.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "channel": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "pg_provider": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "emb_pg_provider": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "pg_id": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "pg_tid": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "escrow": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "buyer_name": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "buyer_email": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "email", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"email\">", - "kind": "format", - "value": "email", - "validate": "/^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ], - "nullable": true - }, - "buyer_tel": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "buyer_addr": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "buyer_postcode": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "customer_uid": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "customer_uid_usage": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "custom_data": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "user_agent": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "status": { - "$ref": "#/components/schemas/IIamportPayment.Status" - }, - "started_at": { - "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "paid_at": { - "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "failed_at": { - "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "cancelled_at": { - "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "fail_reason": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "cancel_reason": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "cancel_history": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "array", - "items": { - "$ref": "#/components/schemas/IIamportPaymentCancel" - } - } - }, - "nullable": false, - "required": [ - "vbank_code", - "vbank_name", - "vbank_num", - "vbank_holder", - "vbank_date", - "vbank_issued_at", - "pay_method", - "imp_uid", - "merchant_uid", - "name", - "amount", - "cancel_amount", - "currency", - "receipt_url", - "cash_receipt_issue", - "channel", - "pg_provider", - "emb_pg_provider", - "pg_id", - "pg_tid", - "escrow", - "buyer_name", - "buyer_email", - "buyer_tel", - "buyer_addr", - "buyer_postcode", - "customer_uid", - "customer_uid_usage", - "custom_data", - "user_agent", - "status", - "started_at", - "paid_at", - "failed_at", - "cancelled_at", - "fail_reason", - "cancel_reason", - "cancel_history" - ], - "description": "가상 계좌 결제 정보.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "IIamportPayment.IBasephonekpaykakaopaypaycolpayssgpaytosspayculturelandsmartculturehappymoneybooknlifepoint": { - "type": "object", - "properties": { - "pay_method": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "phone", - "kpay", - "kakaopay", - "payco", - "lpay", - "ssgpay", - "tosspay", - "cultureland", - "smartculture", - "happymoney", - "booknlife", - "point" - ] - }, - "imp_uid": { - "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "merchant_uid": { - "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "name": { - "description": "주문명, 누락 가능.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "amount": { - "description": "결제 총액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "cancel_amount": { - "description": "결제 취소, 환불 총액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "currency": { - "$ref": "#/components/schemas/IIamportPayment.Currency" - }, - "receipt_url": { - "description": "영수증 URL.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "url", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"url\">", - "kind": "format", - "value": "url", - "validate": "/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "cash_receipt_issue": { - "description": "현금 영수증 발행 여부.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "channel": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "pg_provider": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "emb_pg_provider": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "pg_id": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "pg_tid": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "escrow": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "buyer_name": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "buyer_email": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "email", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"email\">", - "kind": "format", - "value": "email", - "validate": "/^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ], - "nullable": true - }, - "buyer_tel": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "buyer_addr": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "buyer_postcode": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "customer_uid": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "customer_uid_usage": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "custom_data": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "user_agent": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "status": { - "$ref": "#/components/schemas/IIamportPayment.Status" - }, - "started_at": { - "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "paid_at": { - "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "failed_at": { - "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "cancelled_at": { - "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "fail_reason": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "cancel_reason": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "cancel_history": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "array", - "items": { - "$ref": "#/components/schemas/IIamportPaymentCancel" - } - } - }, - "nullable": false, - "required": [ - "pay_method", - "imp_uid", - "merchant_uid", - "name", - "amount", - "cancel_amount", - "currency", - "receipt_url", - "cash_receipt_issue", - "channel", - "pg_provider", - "emb_pg_provider", - "pg_id", - "pg_tid", - "escrow", - "buyer_name", - "buyer_email", - "buyer_tel", - "buyer_addr", - "buyer_postcode", - "customer_uid", - "customer_uid_usage", - "custom_data", - "user_agent", - "status", - "started_at", - "paid_at", - "failed_at", - "cancelled_at", - "fail_reason", - "cancel_reason", - "cancel_history" - ], - "description": "결제 기본 (공통) 정보.", - "x-typia-jsDocTags": [] - }, - "IIamportPaymentCancel.IStore": { - "type": "object", - "properties": { - "imp_uid": { - "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "merchant_uid": { - "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "amount": { - "description": "취소 금액, 부분 취소도 가능하다.\n\n누락시 전액 취소.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "number" - }, - "checksum": { - "description": "취소 트랜잭션 수행 전, 현재 시점의 취소 가능한 잔액.\n\nAPI요청자가 기록하고 있는 취소가능 잔액과 아임포트가 기록하고 있는 취소가능 잔액이\n일치하는지 사전에 검증하고, 검증에 실패하면 트랜잭션을 수행하지 않는다.\n\n`null` 인 경우에는 검증 프로세스를 생략.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number", - "minimum": 0, - "x-typia-typeTags": [ - { - "target": "number", - "name": "Minimum<0>", - "kind": "minimum", - "value": 0, - "validate": "0 <= $input", - "exclusive": [ - "minimum", - "exclusiveMinimum" - ] - } - ], - "nullable": true - }, - "reason": { - "description": "취소 사유.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "tax_free": { - "description": "취소요청금액 중 면세금액.", - "x-typia-jsDocTags": [ - { - "name": "default", - "text": [ - { - "text": "0", - "kind": "text" - } - ] - } - ], - "x-typia-required": false, - "x-typia-optional": true, - "type": "number", - "default": 0 - }, - "refund_holder": { - "description": "환불계좌 예금주.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "refund_bank": { - "description": "환불계좌 은행 코드.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "refund_account": { - "description": "환불계좌 계좌번호.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "refund_tel": { - "description": "환불계좌 예금주 연락처", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - } - }, - "nullable": false, - "required": [ - "imp_uid", - "merchant_uid", - "checksum", - "reason" - ], - "description": "결제 취소 입력 정보.", - "x-typia-jsDocTags": [] - }, - "IIamportResponseIIamportReceipt": { - "type": "object", - "properties": { - "code": { - "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "message": { - "description": "성공 또는 오류 메시지.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "response": { - "$ref": "#/components/schemas/IIamportReceipt" - } - }, - "nullable": false, - "required": [ - "code", - "message", - "response" - ], - "description": "아임포트 고유의 응답 데이터.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "IIamportReceipt": { - "type": "object", - "properties": { - "imp_uid": { - "description": "귀속 결제의 {@link IIamportPayment.imp_uid }.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "receipt_uid": { - "description": "현금 영수증의 고유 식별자 ID.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "apply_num": { - "description": "승인 번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "type": { - "$ref": "#/components/schemas/IIamportReceipt.Type" - }, - "amount": { - "description": "결제 총액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "vat": { - "description": "부가세.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "receipt_url": { - "description": "현금영수증 조회 URL.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "url", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"url\">", - "kind": "format", - "value": "url", - "validate": "/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "applied_at": { - "description": "현금영수증 발행 시간.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "cancelled_at": { - "description": "현금영수증 취소 시간.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - } - }, - "nullable": false, - "required": [ - "imp_uid", - "receipt_uid", - "apply_num", - "type", - "amount", - "vat", - "receipt_url", - "applied_at", - "cancelled_at" - ], - "description": "현금 영수증 정보.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "IIamportReceipt.Type": { - "description": "현금영수증 발행 타입 (대상).", - "type": "string", - "enum": [ - "person", - "company" - ] - }, - "IIamportReceipt.IStore": { - "type": "object", - "properties": { - "imp_uid": { - "description": "귀속 결제의 {@link IIamportPayment.imp_uid }.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "identifier": { - "description": "현금영수증 발생대상 식별정보.\n\n - 국세청현금영수증카드\n - 휴대폰번호\n - 주민등록번호\n - 사업자등록번호", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "identifier_type": { - "description": "현금영수증 발행대상 유형.\n\n - person: 주민등록번호\n - business: 사업자등록번호\n - phone: 휴대폰번호\n - taxcard: 국세청현금영수증카드\n\n일부 PG 사의 경우 이 항목이 없어 된다는데, 어지간하면 그냥 쓰기 바람.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string", - "enum": [ - "phone", - "person", - "business", - "taxcard" - ] - }, - "type": { - "description": "현금영수증 발행 타입 (대상).\n\n누락시 person 이 사용됨.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string", - "enum": [ - "person", - "company" - ] - }, - "buyer_name": { - "description": "구매자 이름.\n\n형금영수증 발행건 사후 추적을 위해 가급 입력하기 바람.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "buyer_email": { - "description": "구매자 이메일.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "buyer_tel": { - "description": "구매자 전화번호.\n\n현금영수증 발행건 사후 추적을 위해 가급 입력하기 바람.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "tax_free": { - "description": "면세 금액.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "number" - } - }, - "nullable": false, - "required": [ - "imp_uid", - "identifier" - ], - "description": "현금영수증 입력 정보.", - "x-typia-jsDocTags": [] - }, - "IIamportUser.IAccessor": { - "type": "object", - "properties": { - "imp_key": { - "description": "API 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "imp_secret": { - "description": "Secret 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "nullable": false, - "required": [ - "imp_key", - "imp_secret" - ], - "description": "아임포트에서 부여해 준 API 및 secret 키.", - "x-typia-jsDocTags": [] - }, - "IIamportResponseIIamportUser": { - "type": "object", - "properties": { - "code": { - "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "message": { - "description": "성공 또는 오류 메시지.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "response": { - "$ref": "#/components/schemas/IIamportUser" - } - }, - "nullable": false, - "required": [ - "code", - "message", - "response" - ], - "description": "아임포트 고유의 응답 데이터.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "IIamportUser": { - "type": "object", - "properties": { - "now": { - "description": "토큰 발행 시간.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "expired_at": { - "description": "토큰 만료 시간.\n\n리눅스 타임이 기준이며, 이를 JS 에서 사용하려거든, 아래와 같이 변환해야 한다.\n\n```typescript\nnew Date(user.expired_at * 1_000);\n```", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "access_token": { - "description": "유저 인증 토큰.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "nullable": false, - "required": [ - "now", - "expired_at", - "access_token" - ], - "description": "아임포트 유저 인증 정보.\n\n아임포트는 고객사에게 API 및 secret 키 정보, {@link IIamportUser.IAccessor } 를 발급해준다.\n\n하지만 이를 곧장 아임포트의 유저 인증에 사용할 수는 없고, 해당 API 및 secret 키를 토대로 유저\n인증 토큰을 발급받아야 하는데, 이 유저 인증 토큰에는 하필이면 만로 시간이라는 게 존재한다.\n`IIamportUser` 는 바로 이러한 유저 인증 토큰 및 그것의 만료 시간을 형상화한 자료구조\n인터페이스이다.\n\n더하여 이처럼 만료 시간이 존재하는 아임포트의 유저 인증 토큰의 특성상, 이것의 만료 시간이\n초과되지 않도록 관리하는 것은 매우 힘든 일이다. 이에 `iamport-server-api` 에서는 아임포트\n유저 인증 토큰이 만료될 때마다 자동 갱신해주는, {@link IamportConnector } 클래스를 제공한다.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "IIamportVBankPayment.IStore": { - "type": "object", - "properties": { - "merchant_uid": { - "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "amount": { - "description": "총액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "vbank_code": { - "description": "가상계좌 은행 코드.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "vbank_due": { - "description": "가상계좌 입금기한, 유닉스 타임.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "vbank_holder": { - "description": "예금주.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "name": { - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "buyer_name": { - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "buyer_email": { - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "buyer_tel": { - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "buyer_addr": { - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "buyer_postcode": { - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "pg": { - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "notice_url": { - "description": "가상 계좌 입금 정보를 수신할 URL.\n\n누락시 기본 웹훅 URL 사용.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "custom_data": { - "description": "커스텀 데이터, 자유롭게 사용 가능.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "pg_api_key": { - "description": "[이니시스 전용] 가맹점 콘솔에서 확인한 API 값.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - } - }, - "nullable": false, - "required": [ - "merchant_uid", - "amount", - "vbank_code", - "vbank_due", - "vbank_holder" - ], - "description": "가상 계좌 결제 입력 정보.\n\n가상 계좌를 임의 생성할 수 있다.\n\n단, 일부 PG 사 혹은 `fake-iamport-server` 만 가능.\n\n - 세틀뱅크\n - 나이스페이먼츠\n - KG이니시스", - "x-typia-jsDocTags": [] - }, - "IIamportResponseIIamportVBankPayment": { - "type": "object", - "properties": { - "code": { - "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "message": { - "description": "성공 또는 오류 메시지.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "response": { - "$ref": "#/components/schemas/IIamportVBankPayment" - } - }, - "nullable": false, - "required": [ - "code", - "message", - "response" - ], - "description": "아임포트 고유의 응답 데이터.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "IIamportVBankPayment.IUpdate": { - "type": "object", - "properties": { - "imp_uid": { - "description": "대상 결제 기록의 {@link IIamportPayment.imp_uid }.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "amount": { - "description": "수정할 결제 금액.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "number" - }, - "vbank_due": { - "description": "수정할 가상계좌 입금 기한.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "number" - } - }, - "nullable": false, - "required": [ - "imp_uid" - ], - "description": "가상 계좌 결제의 수정 입력 정보.\n\n아직 입금되지 않은 가상계좌의 입금기한 또는 입금금액을 수정할 수 있다.\n\n다만, 세틀뱅크 혹은 `fake-iamport-server` 만 가능.", - "x-typia-jsDocTags": [] - } - }, - "securitySchemes": { - "bearer": { - "type": "apiKey", - "name": "Authorization", - "in": "header" - } - } - } -} \ No newline at end of file +{"openapi":"3.0.1","servers":[{"url":"http://localhost:10851","description":"fake"},{"url":"https://api.iamport.kr","description":"real"}],"info":{"title":"Iamport API","description":"Built by [fake-iamport-server](https://github.com/samchon/payments/tree/master/packages/fake-iamport-server) with [nestia](https://github.com/samchon/nestia)","version":"5.1.5","license":{"name":"MIT"}},"paths":{"/subscribe/customers/{customer_uid}":{"get":{"tags":[],"parameters":[{"name":"customer_uid","in":"path","schema":{"type":"string"},"description":"고객 (간편 결제 카드) 식별자 키","required":true}],"responses":{"200":{"description":"간편 결제 카드 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IIamportResponseIIamportSubscription"}}},"x-nestia-encrypted":false}},"summary":"간편 결제 카드 정보 조회하기","description":"간편 결제 카드 정보 조회하기.\n\n`subscribe.customers.at` 은 고객이 {@link store } 나 혹은 아임포트가 제공하는\n간편 결제 카드 등록 창을 이용하여 저장한 간편 결제 카드 정보를 조회하는 API\n함수이다.","security":[{"bearer":[]}],"x-nestia-namespace":"subscribe.customers.at","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"customer_uid","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"고객 (간편 결제 카드) 식별자 키","kind":"text"}]},{"name":"returns","text":[{"text":"간편 결제 카드 정보","kind":"text"}]},{"name":"security","text":[{"text":"bearer","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"GET"},"post":{"tags":[],"parameters":[{"name":"customer_uid","in":"path","schema":{"type":"string"},"description":"고객 (간편 결제 카드) 식별자 키","required":true}],"requestBody":{"description":"카드 입력 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IIamportSubscription.IStore"}}},"required":true,"x-nestia-encrypted":false},"responses":{"201":{"description":"간편 결제 카드 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IIamportResponseIIamportSubscription"}}},"x-nestia-encrypted":false}},"summary":"간편 결제 카드 등록하기","description":"간편 결제 카드 등록하기.\n\n`subscribe.customers.stoer` 는 고객이 자신의 카드를 서버에 등록해두고, 매번 결제가\n필요할 때마다 카드 정보를 반복 입력하는 일 없이, 간편하게 결제를 진행하고자 할 때\n사용하는 API 함수이다.\n\n참고로 `subscribe.customers.store` 는 클라이언트 어플리케이션이 아임포트가 제공하는\n간편 결제 카드 등록 창을 사용하는 경우, 귀하의 백엔드 서버가 이를 실 서비스에서 호출하는\n일은 없을 것이다. 다만, 고객이 간편 결제 카드를 등록하는 상황을 시뮬레이션하기 위하여,\n테스트 자동화 프로그램 수준에서 사용될 수는 있다.","security":[{"bearer":[]}],"x-nestia-namespace":"subscribe.customers.store","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"customer_uid","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"고객 (간편 결제 카드) 식별자 키","kind":"text"}]},{"name":"param","text":[{"text":"input","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"카드 입력 정보","kind":"text"}]},{"name":"returns","text":[{"text":"간편 결제 카드 정보","kind":"text"}]},{"name":"security","text":[{"text":"bearer","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"POST"},"delete":{"tags":[],"parameters":[{"name":"customer_uid","in":"path","schema":{"type":"string"},"description":"고객 (간편 결제 카드) 식별자 키","required":true}],"responses":{"200":{"description":"삭제된 간편 결제 카드 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IIamportResponseIIamportSubscription"}}},"x-nestia-encrypted":false}},"summary":"간편 결제 카드 삭제하기","description":"간편 결제 카드 삭제하기.\n\n간편 결제를 위하여 등록한 카드를 제거한다.","security":[{"bearer":[]}],"x-nestia-namespace":"subscribe.customers.erase","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"customer_uid","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"고객 (간편 결제 카드) 식별자 키","kind":"text"}]},{"name":"returns","text":[{"text":"삭제된 간편 결제 카드 정보","kind":"text"}]},{"name":"security","text":[{"text":"bearer","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"DELETE"}},"/subscribe/payments/onetime":{"post":{"tags":[],"parameters":[],"requestBody":{"description":"카드 결제 신청 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IIamportSubscription.IOnetime"}}},"required":true,"x-nestia-encrypted":false},"responses":{"201":{"description":"카드 결제 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IIamportResponseIIamportCardPayment"}}},"x-nestia-encrypted":false}},"summary":"카드로 결제하기, 더불어 간편 결제용으로 등록 가능","description":"카드로 결제하기, 더불어 간편 결제용으로 등록 가능.\n\n`subscribe.payments.onetime` 은 카드를 매개로 한 결제를 하고자 할 때 호출하는 API\n함수이다. 더하여 입력 값에 {@link IIamportSubscription.IOnetime.customer_uid } 를\n기입하는 경우, 결제에 사용한 카드를 그대로 간편 결제용 카드\n{@link IIamportSubscription } 로 등록해버린다.\n\n다만, 정히 간편 카드 등록과 결제를 동시에 하고 싶다면,\n`subscribe.payments.onetime` 에 {@link IIamportSubscription.IOnetime.customer_uid }\n를 더하기보다, {@link subscribe.customers.store } 와 {@link subscribe.payments.again }\n을 각각 호출하는 것을 권장한다. 그것이 예외적인 상황에 보다 안전하게 대처할 수 있기\n때문이다.\n\n더하여 `subscribe.payments.onetime` 은 클라이언트 어플리케이션이 아임포트가 제공하는\n결제 창을 그대로 사용하는 경우, 귀하의 백엔드 서버가 이를 실 서비스에서 호출하는 일은\n없을 것이다. 다만, 고객이 카드를 통하여 결제하는 상황을 시뮬레이션하기 위하여, 테스트\n자동화 프로그램 수준에서 사용될 수는 있다.","security":[{"bearer":[]}],"x-nestia-namespace":"subscribe.payments.onetime.onetime","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"input","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"카드 결제 신청 정보","kind":"text"}]},{"name":"returns","text":[{"text":"카드 결제 정보","kind":"text"}]},{"name":"security","text":[{"text":"bearer","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"POST"}},"/subscribe/payments/again":{"post":{"tags":[],"parameters":[],"requestBody":{"description":"미리 등록한 카드를 이용한 결제 신청 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IIamportSubscription.IAgain"}}},"required":true,"x-nestia-encrypted":false},"responses":{"201":{"description":"카드 결제 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IIamportResponseIIamportCardPayment"}}},"x-nestia-encrypted":false}},"summary":"간편 결제에 등록된 카드로 결제하기","description":"간편 결제에 등록된 카드로 결제하기.\n\n`subscribe.payments.again` 은 고객이 간편 결제에 등록한 카드로 결제를 진행하고자 할 때\n호출하는 API 함수이다. 이는 간편하고 불편하고를 떠나, 본질적으로 카드 결제의 일환이기에,\n리턴값은 일반적인 카드 결제 때와 동일한 {@link IIamportCardPayment } 이다.\n\n그리고 `subscribe.payments.again` 은 결제 수단 중 유일하게, 클라이언트 어플리케이션이\n아임포트가 제공하는 결체 창을 사용할 수 없어, 오직 귀하의 백엔드 서버가 아임포트의 API\n함수를 직접 호출해야하는 경우에 해당한다. 따라서 간편 결제에 관하여 아임포트 서버와\n연동하는 백엔드 서버 및 프론트 어플리케이션을 개발할 때, 반드시 이 상황에 대한 별도의\n설계 및 개발이 필요하니, 이 점을 염두에 두기 바란다.","security":[{"bearer":[]}],"x-nestia-namespace":"subscribe.payments.again.again","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"input","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"미리 등록한 카드를 이용한 결제 신청 정보","kind":"text"}]},{"name":"returns","text":[{"text":"카드 결제 정보","kind":"text"}]},{"name":"security","text":[{"text":"bearer","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"POST"}},"/certifications/{imp_uid}":{"get":{"tags":[],"parameters":[{"name":"imp_uid","in":"path","schema":{"type":"string"},"description":"대상 본인인증 정보의 ","required":true}],"responses":{"200":{"description":"본인인증 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IIamportResponseIIamportCertification"}}},"x-nestia-encrypted":false}},"summary":"본인인증 정보 열람하기","description":"본인인증 정보 열람하기.\n\n`certiciations.at` 은 본인인증 정보를 열람할 때 사용하는 API 함수이다.\n\n다만 이 API 함수를 통하여 열람한 본인인증 정보 {@link IIamportCertification } 이\n곧 OTP 인증까지 마쳐 본인인증을 모두 마친 레코드라는 보장은 없다. 본인인증의 완결\n여부는 오직, {@link IIamportCertification.certified } 값을 직접 검사해봐야만 알\n수 있기 때문이다.","security":[{"bearer":[]}],"x-nestia-namespace":"certifications.at","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"imp_uid","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"대상 본인인증 정보의 ","kind":"text"},{"text":"{@link ","kind":"link"},{"text":"IIamportCertification.imp_uid","kind":"linkName","target":{"fileName":"D:/github/samchon/payments/packages/fake-iamport-server/src/api/structures/IIamportCertification.ts","textSpan":{"start":447,"length":16}}},{"text":"}","kind":"link"}]},{"name":"returns","text":[{"text":"본인인증 정보","kind":"text"}]},{"name":"security","text":[{"text":"bearer","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"GET"},"delete":{"tags":[],"parameters":[{"name":"imp_uid","in":"path","schema":{"type":"string"},"description":"대상 본인인증 정보의 ","required":true}],"responses":{"200":{"description":"삭제된 본인인증 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IIamportResponseIIamportCertification"}}},"x-nestia-encrypted":false}},"summary":"본인인증 정보 삭제하기","description":"본인인증 정보 삭제하기.","security":[{"bearer":[]}],"x-nestia-namespace":"certifications.erase","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"imp_uid","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"대상 본인인증 정보의 ","kind":"text"},{"text":"{@link ","kind":"link"},{"text":"IIamportCertification.imp_uid","kind":"linkName","target":{"fileName":"D:/github/samchon/payments/packages/fake-iamport-server/src/api/structures/IIamportCertification.ts","textSpan":{"start":447,"length":16}}},{"text":"}","kind":"link"}]},{"name":"returns","text":[{"text":"삭제된 본인인증 정보","kind":"text"}]},{"name":"security","text":[{"text":"bearer","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"DELETE"}},"/certifications/otp/request":{"post":{"tags":[],"parameters":[],"requestBody":{"description":"본인인증 요청 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IIamportCertification.IStore"}}},"required":true,"x-nestia-encrypted":false},"responses":{"201":{"description":"진행 중인 본인인증의 식별자 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IIamportResponseIIamportCertification.IAccessor"}}},"x-nestia-encrypted":false}},"summary":"본인인증 요청하기","description":"본인인증 요청하기.\n\n`certifications.otp.request` 는 아임포트 서버에 본인인증을 요청하는 API 함수이다.\n이 API 를 호출하면 본인인증 대상자의 핸드폰으로 OTP 문자가 전송되며, 본인인증\n대상자가 {@link certifications.otp.confirm } 을 통하여 이 OTP 번호를 정확히\n입력함으로써, 본인인증이 완결된다.\n\n또한 본인인증 대상자가 자신의 핸드폰으로 전송된 OTP 문자를 입력하기 전에도,\n여전히해당 본인인증 내역은 {@link certifications.at } 함수를 통하여 조회할 수 있다.\n다만, 이 때 리턴되는 {@link IIamportCertification } 에서 인증의 완결 여부를\n지칭하는 {@link IIamportCertification.certified } 값은 `false` 이다.","security":[{"bearer":[]}],"x-nestia-namespace":"certifications.otp.request.request","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"input","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"본인인증 요청 정보","kind":"text"}]},{"name":"returns","text":[{"text":"진행 중인 본인인증의 식별자 정보","kind":"text"}]},{"name":"security","text":[{"text":"bearer","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"POST"}},"/certifications/otp/confirm/{imp_uid}":{"post":{"tags":[],"parameters":[{"name":"imp_uid","in":"path","schema":{"type":"string"},"description":"대상 본인인증 정보의 ","required":true}],"requestBody":{"description":"OTP 코드","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IIamportCertification.IConfirm"}}},"required":true,"x-nestia-encrypted":false},"responses":{"201":{"description":"인증 완료된 본인인증 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IIamportResponseIIamportCertification"}}},"x-nestia-encrypted":false}},"summary":"본인인증 시 발급된 OTP 코드 입력하기","description":"본인인증 시 발급된 OTP 코드 입력하기.\n\n`certifications.otp.confirm` 는 {@link certifications.otp.request } 를 통하여\n발급된 본인인증 건에 대하여, 본인인증 대상자의 휴대폰으로 전송된 OTP 번호를\n검증하고, 입력한 OTP 번호가 맞거든 해당 본인인증 건을 승인하여 완료 처리해주는\nAPI 함수이다.\n\n이처럼 본인인증을 완료하거든, 해당 본인인증 건 {@link IIamportCertification } 의\n{@link IIamportCertification.certified } 값이 비로소 `true` 로 변경되어,\n비로소 완결된다.","security":[{"bearer":[]}],"x-nestia-namespace":"certifications.otp.confirm.confirm","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"imp_uid","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"대상 본인인증 정보의 ","kind":"text"},{"text":"{@link ","kind":"link"},{"text":"IIamportCertification.imp_uid","kind":"linkName","target":{"fileName":"D:/github/samchon/payments/packages/fake-iamport-server/src/api/structures/IIamportCertification.ts","textSpan":{"start":447,"length":16}}},{"text":"}","kind":"link"}]},{"name":"param","text":[{"text":"input","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"OTP 코드","kind":"text"}]},{"name":"returns","text":[{"text":"인증 완료된 본인인증 정보","kind":"text"}]},{"name":"security","text":[{"text":"bearer","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"POST"}},"/internal/webhook":{"post":{"tags":[],"parameters":[],"requestBody":{"description":"웹훅 이벤트 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IIamportPayment.IWebhook"}}},"required":true,"x-nestia-encrypted":false},"responses":{"201":{"description":"","x-nestia-encrypted":false}},"summary":"웹훅 이벤트 더미 리스너","description":"웹훅 이벤트 더미 리스너.\n\n`internal.webhook` 은 실제 아임포트의 서버에는 존재하지 않는 API 로써,\n`fake-impoart-server` 의 {@link Configuration.WEBHOOK_URL } 에 아무런 URL 을 설정하지\n않으면, `fake-iamport-server` 로부터 발생하는 모든 종류의 웹훅 이벤트는 이 곳으로 전달되어\n무의미하게 사라진다.\n\n따라서 `fake-iamport-server` 를 사용하여 아임포트 서버와의 연동을 미리 검증코자 할 때는,\n반드시 {@link Configuration.WEBHOOK_URL } 를 설정하여 웹훅 이벤트가 귀하의 백엔드 서버로\n제대로 전달되도록 하자.","x-nestia-namespace":"internal.webhook.webhook","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"input","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"웹훅 이벤트 정보","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"POST"}},"/internal/deposit/{imp_uid}":{"put":{"tags":[],"parameters":[{"name":"imp_uid","in":"path","schema":{"type":"string"},"description":"대상 결제의 ","required":true}],"responses":{"201":{"description":"","x-nestia-encrypted":false}},"summary":"가상 계좌에 입금하기","description":"가상 계좌에 입금하기.\n\n`internal.deposit` 은 실제 아임포트 결제 서버에는 존재하지 않는 API 로써, 가상 계좌\n결제를 신청한 고객이, 이후 가상 계좌에 목표 금액을 입금하는 상황을 시뮬레이션 할 수 있는\n함수이다.\n\n즉, `internal.deposit` 는 고객이 스스로에게 가상으로 발급된 계좌에 입금을 하고, 그에 따라\n아임포트 서버에서 webhook 이벤트가 발생, 이를 귀하의 백엔드 서버로 전송하는 일련의 상황을\n시뮬레이션하기 위하여 설계된 테스트 함수다.","security":[{"bearer":[]}],"x-nestia-namespace":"internal.deposit.deposit","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"imp_uid","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"대상 결제의 ","kind":"text"},{"text":"{@link ","kind":"link"},{"text":"IIamportVBankPayment.imp_uid ","kind":"linkText"},{"text":"}","kind":"link"}]},{"name":"security","text":[{"text":"bearer","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"PUT"}},"/payments/{imp_uid}":{"get":{"tags":[],"parameters":[{"name":"imp_uid","in":"path","schema":{"type":"string"},"description":"대상 결제 기록의 ","required":true},{"name":"query","in":"query","schema":{"$ref":"#/components/schemas/IIamportPayment.IQuery"},"description":"결제 수단이 페이팔인 경우에 사용","required":true}],"responses":{"200":{"description":"결제 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IIamportResponseIIamportPayment"}}},"x-nestia-encrypted":false}},"summary":"결제 기록 열람하기","description":"결제 기록 열람하기.\n\n아임포트를 통하여 발생한 결제 기록을 열람한다.","security":[{"bearer":[]}],"x-nestia-namespace":"payments.at","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"imp_uid","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"대상 결제 기록의 ","kind":"text"},{"text":"{@link ","kind":"link"},{"text":"IIamportPayment.imp_uid","kind":"linkName","target":{"fileName":"D:/github/samchon/payments/packages/fake-iamport-server/src/api/structures/IIamportPayment.ts","textSpan":{"start":2101,"length":16}}},{"text":"}","kind":"link"}]},{"name":"param","text":[{"text":"query","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"결제 수단이 페이팔인 경우에 사용","kind":"text"}]},{"name":"returns","text":[{"text":"결제 정보","kind":"text"}]},{"name":"security","text":[{"text":"bearer","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"GET"}},"/payments/cancel":{"post":{"tags":[],"parameters":[],"requestBody":{"description":"결제 취소 입력 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IIamportPaymentCancel.IStore"}}},"required":true,"x-nestia-encrypted":false},"responses":{"201":{"description":"취소된 결제 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IIamportResponseIIamportPayment"}}},"x-nestia-encrypted":false}},"summary":"결제 취소하기","description":"결제 취소하기.\n\n만약 가상 계좌를 통한 결제였다면, 반드시 환불 계좌 정보를 입력해줘야 한다.","security":[{"bearer":[]}],"x-nestia-namespace":"payments.cancel.cancel","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"input","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"결제 취소 입력 정보","kind":"text"}]},{"name":"returns","text":[{"text":"취소된 결제 정보","kind":"text"}]},{"name":"security","text":[{"text":"bearer","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"POST"}},"/receipts/{imp_uid}":{"get":{"tags":[],"parameters":[{"name":"imp_uid","in":"path","schema":{"type":"string"},"description":"귀속 결제의 ","required":true}],"responses":{"200":{"description":"현금 영수증 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IIamportResponseIIamportReceipt"}}},"x-nestia-encrypted":false}},"summary":"현금 영수증 조회하기","description":"현금 영수증 조회하기.","security":[{"bearer":[]}],"x-nestia-namespace":"receipts.at","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"imp_uid","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"귀속 결제의 ","kind":"text"},{"text":"{@link ","kind":"link"},{"text":"IIamportPayment.imp_uid","kind":"linkName","target":{"fileName":"D:/github/samchon/payments/packages/fake-iamport-server/src/api/structures/IIamportPayment.ts","textSpan":{"start":2101,"length":16}}},{"text":"}","kind":"link"}]},{"name":"returns","text":[{"text":"현금 영수증 정보","kind":"text"}]},{"name":"security","text":[{"text":"bearer","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"GET"},"post":{"tags":[],"parameters":[{"name":"imp_uid","in":"path","schema":{"type":"string"},"description":"귀속 결제의 ","required":true}],"requestBody":{"description":"현금 영수증 입력 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IIamportReceipt.IStore"}}},"required":true,"x-nestia-encrypted":false},"responses":{"201":{"description":"현금 영수증 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IIamportResponseIIamportReceipt"}}},"x-nestia-encrypted":false}},"summary":"현금 영수증 발행하기","description":"현금 영수증 발행하기.","security":[{"bearer":[]}],"x-nestia-namespace":"receipts.store","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"imp_uid","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"귀속 결제의 ","kind":"text"},{"text":"{@link ","kind":"link"},{"text":"IIamportPayment.imp_uid","kind":"linkName","target":{"fileName":"D:/github/samchon/payments/packages/fake-iamport-server/src/api/structures/IIamportPayment.ts","textSpan":{"start":2101,"length":16}}},{"text":"}","kind":"link"}]},{"name":"param","text":[{"text":"input","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"현금 영수증 입력 정보","kind":"text"}]},{"name":"returns","text":[{"text":"현금 영수증 정보","kind":"text"}]},{"name":"security","text":[{"text":"bearer","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"POST"},"delete":{"tags":[],"parameters":[{"name":"imp_uid","in":"path","schema":{"type":"string"},"description":"귀속 결제의 ","required":true}],"responses":{"200":{"description":"취소된 현금 영수증 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IIamportResponseIIamportReceipt"}}},"x-nestia-encrypted":false}},"summary":"현금 영수증 취소하기","description":"현금 영수증 취소하기.","security":[{"bearer":[]}],"x-nestia-namespace":"receipts.erase","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"imp_uid","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"귀속 결제의 ","kind":"text"},{"text":"{@link ","kind":"link"},{"text":"IIamportPayment.imp_uid","kind":"linkName","target":{"fileName":"D:/github/samchon/payments/packages/fake-iamport-server/src/api/structures/IIamportPayment.ts","textSpan":{"start":2101,"length":16}}},{"text":"}","kind":"link"}]},{"name":"returns","text":[{"text":"취소된 현금 영수증 정보","kind":"text"}]},{"name":"security","text":[{"text":"bearer","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"DELETE"}},"/users/getToken":{"post":{"tags":[],"parameters":[],"requestBody":{"description":"아임포트의 API 및 secret 키 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IIamportUser.IAccessor"}}},"required":true,"x-nestia-encrypted":false},"responses":{"201":{"description":"유저 인증 토큰 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IIamportResponseIIamportUser"}}},"x-nestia-encrypted":false}},"summary":"유저 인증 토큰 발행하기","description":"유저 인증 토큰 발행하기.\n\n아임포트에 가입하여 부여받은 API 및 secret 키를 토대로, 유저 인증 토큰을 발행한다.\n\n단, 아임포트가 발급해주는 유저 인증 토큰에는 유효 시간 {@link IIamportUser.expired_at }\n이 있어, 해당 시간이 지나거든 기 발급 토큰이 만료되어 더 이상 쓸 수 없게 된다. 때문에\n아임포트의 이러한 시간 제한에 구애받지 않고 자유로이 아임포트의 API 를 이용하고 싶다면,\n`iamport-server-api` 에서 제공해주는 {@link IamportConnector } 를 활용하도록 하자.","x-nestia-namespace":"users.getToken.getToken","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"input","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"아임포트의 API 및 secret 키 정보","kind":"text"}]},{"name":"returns","text":[{"text":"유저 인증 토큰 정보","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"POST"}},"/vbanks":{"post":{"tags":[],"parameters":[],"requestBody":{"description":"가상 계좌 입력 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IIamportVBankPayment.IStore"}}},"required":true,"x-nestia-encrypted":false},"responses":{"201":{"description":"가상 계좌 결제 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IIamportResponseIIamportVBankPayment"}}},"x-nestia-encrypted":false}},"summary":"가상 계좌 발급하기","description":"가상 계좌 발급하기.","security":[{"bearer":[]}],"x-nestia-namespace":"vbanks.store","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"input","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"가상 계좌 입력 정보","kind":"text"}]},{"name":"returns","text":[{"text":"가상 계좌 결제 정보","kind":"text"}]},{"name":"security","text":[{"text":"bearer","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"POST"},"put":{"tags":[],"parameters":[],"requestBody":{"description":"가상 계좌 편집 입력 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IIamportVBankPayment.IUpdate"}}},"required":true,"x-nestia-encrypted":false},"responses":{"201":{"description":"편집된 가상 계좌 결제 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IIamportResponseIIamportVBankPayment"}}},"x-nestia-encrypted":false}},"summary":"가상 계좌 편집하기","description":"가상 계좌 편집하기.","security":[{"bearer":[]}],"x-nestia-namespace":"vbanks.update","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"input","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"가상 계좌 편집 입력 정보","kind":"text"}]},{"name":"returns","text":[{"text":"편집된 가상 계좌 결제 정보","kind":"text"}]},{"name":"security","text":[{"text":"bearer","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"PUT"}}},"components":{"schemas":{"IIamportResponseIIamportSubscription":{"type":"object","properties":{"code":{"description":"에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"message":{"description":"성공 또는 오류 메시지.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"response":{"$ref":"#/components/schemas/IIamportSubscription"}},"nullable":false,"required":["code","message","response"],"description":"아임포트 고유의 응답 데이터.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"IIamportSubscription":{"type":"object","properties":{"pg_provider":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"pg_id":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"card_name":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"card_code":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"card_number":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"card_type":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"customer_name":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"customer_tel":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"customer_email":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"customer_addr":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"customer_postcode":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"inserted":{"x-typia-required":true,"x-typia-optional":false,"type":"number"},"updated":{"x-typia-required":true,"x-typia-optional":false,"type":"number"},"customer_uid":{"description":"고객 식별자 키.\n\n아임포트가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.\n\n다만 고객이라기보다 실제로는 카드의 식별자 키로 써야함.","x-typia-required":true,"x-typia-optional":false,"type":"string"}},"nullable":false,"required":["pg_provider","pg_id","card_name","card_code","card_number","card_type","customer_name","customer_tel","customer_email","customer_addr","customer_postcode","inserted","updated","customer_uid"],"description":"간편 결제 카드 정보.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"IIamportSubscription.IStore":{"type":"object","properties":{"card_number":{"description":"카드 번호.\n\n형식: XXXX-XXXX-XXXX-XXXX","x-typia-required":true,"x-typia-optional":false,"type":"string","pattern":"\\d{4}-\\d{4}-\\d{4}-\\d{4}","x-typia-typeTags":[{"target":"string","name":"Pattern<\"\\\\d{4}-\\\\d{4}-\\\\d{4}-\\\\d{4}\">","kind":"pattern","value":"\\d{4}-\\d{4}-\\d{4}-\\d{4}","validate":"/\\d{4}-\\d{4}-\\d{4}-\\d{4}/.test($input)","exclusive":["format","pattern"]}]},"expiry":{"description":"카드 유효기간.\n\n형식: YYYY-MM","x-typia-required":true,"x-typia-optional":false,"type":"string","pattern":"^([0-9]{4})-(0[1-9]|1[012])$","x-typia-typeTags":[{"target":"string","name":"Pattern<\"^([0-9]{4})-(0[1-9]|1[012])$\">","kind":"pattern","value":"^([0-9]{4})-(0[1-9]|1[012])$","validate":"/^([0-9]{4})-(0[1-9]|1[012])$/.test($input)","exclusive":["format","pattern"]}]},"birth":{"description":"생년월일 YYMMDD 또는 사업자등록번호 10자리.","x-typia-required":true,"x-typia-optional":false,"type":"string","pattern":"^(([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01]))|(\\d{10})$","x-typia-typeTags":[{"target":"string","name":"Pattern<\"^(([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01]))|(\\\\d{10})$\">","kind":"pattern","value":"^(([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01]))|(\\d{10})$","validate":"/^(([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01]))|(\\d{10})$/.test($input)","exclusive":["format","pattern"]}]},"pwd_2digit":{"description":"카드 비밀번호 앞 두 자리.","x-typia-required":false,"x-typia-optional":true,"type":"string","pattern":"\\d{2}","x-typia-typeTags":[{"target":"string","name":"Pattern<\"\\\\d{2}\">","kind":"pattern","value":"\\d{2}","validate":"/\\d{2}/.test($input)","exclusive":["format","pattern"]}]},"cvc":{"description":"카드 인증번호 (카드 뒷면 3 자리).","x-typia-required":false,"x-typia-optional":true,"type":"string","pattern":"\\d{2}","x-typia-typeTags":[{"target":"string","name":"Pattern<\"\\\\d{2}\">","kind":"pattern","value":"\\d{2}","validate":"/\\d{2}/.test($input)","exclusive":["format","pattern"]}]},"customer_name":{"x-typia-required":false,"x-typia-optional":true,"type":"string"},"customer_tel":{"x-typia-required":false,"x-typia-optional":true,"type":"string"},"customer_email":{"x-typia-required":false,"x-typia-optional":true,"type":"string","format":"email","x-typia-typeTags":[{"target":"string","name":"Format<\"email\">","kind":"format","value":"email","validate":"/^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i.test($input)","exclusive":["format","pattern"]}]},"customr_addr":{"x-typia-required":false,"x-typia-optional":true,"type":"string"},"customer_postcode":{"x-typia-required":false,"x-typia-optional":true,"type":"string"},"customer_uid":{"description":"고객 식별자 키.\n\n아임포트가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.\n\n다만 고객이라기보다 실제로는 카드의 식별자 키로 써야함.","x-typia-required":true,"x-typia-optional":false,"type":"string"}},"nullable":false,"required":["card_number","expiry","birth","customer_uid"],"description":"간편 결제 카드 입력 정보.","x-typia-jsDocTags":[]},"IIamportSubscription.IOnetime":{"type":"object","properties":{"customer_uid":{"description":"고객 식별자 키.\n\n아임포트가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.\n\n다만 고객이라기보다 실제로는 카드의 식별자 키로 써야함.\n\n이를 생략시 단순 결제로만 그치며, 카드 정보가 간편 결제용으로 등록되지 아니함.","x-typia-required":false,"x-typia-optional":true,"type":"string"},"card_number":{"description":"카드 번호.\n\n형식: XXXX-XXXX-XXXX-XXXX","x-typia-required":true,"x-typia-optional":false,"type":"string","pattern":"\\d{4}-\\d{4}-\\d{4}-\\d{4}","x-typia-typeTags":[{"target":"string","name":"Pattern<\"\\\\d{4}-\\\\d{4}-\\\\d{4}-\\\\d{4}\">","kind":"pattern","value":"\\d{4}-\\d{4}-\\d{4}-\\d{4}","validate":"/\\d{4}-\\d{4}-\\d{4}-\\d{4}/.test($input)","exclusive":["format","pattern"]}]},"expiry":{"description":"카드 유효기간.\n\n형식: YYYY-MM","x-typia-required":true,"x-typia-optional":false,"type":"string","pattern":"^([0-9]{4})-(0[1-9]|1[012])$","x-typia-typeTags":[{"target":"string","name":"Pattern<\"^([0-9]{4})-(0[1-9]|1[012])$\">","kind":"pattern","value":"^([0-9]{4})-(0[1-9]|1[012])$","validate":"/^([0-9]{4})-(0[1-9]|1[012])$/.test($input)","exclusive":["format","pattern"]}]},"birth":{"description":"생년월일 YYMMDD 또는 사업자등록번호 10자리.","x-typia-required":true,"x-typia-optional":false,"type":"string","pattern":"^(([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01]))|(\\d{10})$","x-typia-typeTags":[{"target":"string","name":"Pattern<\"^(([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01]))|(\\\\d{10})$\">","kind":"pattern","value":"^(([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01]))|(\\d{10})$","validate":"/^(([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01]))|(\\d{10})$/.test($input)","exclusive":["format","pattern"]}]},"pwd_2digit":{"description":"카드 비밀번호 앞 두 자리.","x-typia-required":false,"x-typia-optional":true,"type":"string","pattern":"\\d{2}","x-typia-typeTags":[{"target":"string","name":"Pattern<\"\\\\d{2}\">","kind":"pattern","value":"\\d{2}","validate":"/\\d{2}/.test($input)","exclusive":["format","pattern"]}]},"cvc":{"description":"카드 인증번호 (카드 뒷면 3 자리).","x-typia-required":false,"x-typia-optional":true,"type":"string","pattern":"\\d{2}","x-typia-typeTags":[{"target":"string","name":"Pattern<\"\\\\d{2}\">","kind":"pattern","value":"\\d{2}","validate":"/\\d{2}/.test($input)","exclusive":["format","pattern"]}]},"customer_name":{"x-typia-required":false,"x-typia-optional":true,"type":"string"},"customer_tel":{"x-typia-required":false,"x-typia-optional":true,"type":"string"},"customer_email":{"x-typia-required":false,"x-typia-optional":true,"type":"string","format":"email","x-typia-typeTags":[{"target":"string","name":"Format<\"email\">","kind":"format","value":"email","validate":"/^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i.test($input)","exclusive":["format","pattern"]}]},"customr_addr":{"x-typia-required":false,"x-typia-optional":true,"type":"string"},"customer_postcode":{"x-typia-required":false,"x-typia-optional":true,"type":"string"},"merchant_uid":{"description":"주문 식별자 키.\n\n아임포트가 아닌 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"amount":{"description":"결제 총액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"name":{"description":"주문 이름.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"currency":{"description":"통화 정보.","x-typia-required":false,"x-typia-optional":true,"type":"string","enum":["KRW","USD","EUR","JPY"]},"tax_free":{"description":"면세 공급가액.\n\n기본값은 0 로써, 알아서 amount 의 1/11 로써 부가세 처리됨.","x-typia-required":false,"x-typia-optional":true,"type":"number"},"card_quota":{"description":"할부 개월 수.\n\n일시불은 0.","x-typia-required":false,"x-typia-optional":true,"type":"number"},"buyer_name":{"x-typia-required":false,"x-typia-optional":true,"type":"string"},"buyer_email":{"x-typia-required":false,"x-typia-optional":true,"type":"string","format":"email","x-typia-typeTags":[{"target":"string","name":"Format<\"email\">","kind":"format","value":"email","validate":"/^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i.test($input)","exclusive":["format","pattern"]}]},"buyer_tel":{"x-typia-required":false,"x-typia-optional":true,"type":"string"},"buyer_addr":{"x-typia-required":false,"x-typia-optional":true,"type":"string"},"buyer_postcode":{"x-typia-required":false,"x-typia-optional":true,"type":"string"},"interest_free_by_merchant":{"description":"카드할부처리할 때, 할부이자가 발생하는 경우 (카드사 무이자 프로모션 제외).\n\n부과되는 할부이자를 고객대신 가맹점이 지불하고자 PG사와 계약된 경우(현재, 나이스페이먼츠만 지원됨)","x-typia-required":false,"x-typia-optional":true,"type":"boolean"},"use_card_point":{"description":"승인요청시 카드사 포인트 차감하며 결제승인처리할지 flag.\n\nPG사 영업담당자와 계약 당시 사전 협의 필요(현재, 나이스페이먼츠만 지원됨)","x-typia-required":false,"x-typia-optional":true,"type":"boolean"},"custom_data":{"description":"임의 정보를 기재할 수 있다.","x-typia-required":false,"x-typia-optional":true,"type":"string"},"notice_url":{"description":"결제 성공시 통지될 Notification, 웹훅 URL.","x-typia-required":false,"x-typia-optional":true,"type":"string","format":"url","x-typia-typeTags":[{"target":"string","name":"Format<\"url\">","kind":"format","value":"url","validate":"/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)","exclusive":["format","pattern"]}]}},"nullable":false,"required":["card_number","expiry","birth","merchant_uid","amount","name"],"description":"결제 신청 입력 정보.","x-typia-jsDocTags":[]},"IIamportResponseIIamportCardPayment":{"type":"object","properties":{"code":{"description":"에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"message":{"description":"성공 또는 오류 메시지.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"response":{"$ref":"#/components/schemas/IIamportCardPayment"}},"nullable":false,"required":["code","message","response"],"description":"아임포트 고유의 응답 데이터.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"IIamportCardPayment":{"type":"object","properties":{"card_code":{"description":"카드 식별자 코드.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"card_name":{"description":"카드 이름.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"card_number":{"description":"카드 번호.","x-typia-required":true,"x-typia-optional":false,"type":"string","pattern":"\\d{4}-\\d{4}-\\d{4}-\\d{4}","x-typia-typeTags":[{"target":"string","name":"Pattern<\"\\\\d{4}-\\\\d{4}-\\\\d{4}-\\\\d{4}\">","kind":"pattern","value":"\\d{4}-\\d{4}-\\d{4}-\\d{4}","validate":"/\\d{4}-\\d{4}-\\d{4}-\\d{4}/.test($input)","exclusive":["format","pattern"]}]},"card_quota":{"description":"할부 개월 수.","x-typia-required":true,"x-typia-optional":false,"type":"integer","x-typia-typeTags":[{"target":"number","name":"Type<\"uint32\">","kind":"type","value":"uint32","validate":"Math.floor($input) === $input && 0 <= $input && $input <= 4294967295","exclusive":true}]},"apply_num":{"description":"카드사 승인번호.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"pay_method":{"x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["card","samsung"]},"imp_uid":{"description":"결제 정보 {@link IIamportPayment } 의 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"merchant_uid":{"description":"주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"name":{"description":"주문명, 누락 가능.","x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"amount":{"description":"결제 총액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"cancel_amount":{"description":"결제 취소, 환불 총액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"currency":{"$ref":"#/components/schemas/IIamportPayment.Currency"},"receipt_url":{"description":"영수증 URL.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"url","x-typia-typeTags":[{"target":"string","name":"Format<\"url\">","kind":"format","value":"url","validate":"/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)","exclusive":["format","pattern"]}]},"cash_receipt_issue":{"description":"현금 영수증 발행 여부.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"channel":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"pg_provider":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"emb_pg_provider":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"pg_id":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"pg_tid":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"escrow":{"x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"buyer_name":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"buyer_email":{"x-typia-required":true,"x-typia-optional":false,"type":"string","format":"email","x-typia-typeTags":[{"target":"string","name":"Format<\"email\">","kind":"format","value":"email","validate":"/^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i.test($input)","exclusive":["format","pattern"]}],"nullable":true},"buyer_tel":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"buyer_addr":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"buyer_postcode":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"customer_uid":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"customer_uid_usage":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"custom_data":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"user_agent":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"status":{"$ref":"#/components/schemas/IIamportPayment.Status"},"started_at":{"description":"결제 신청 일시.\n\n리눅스 타임이 쓰임.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"paid_at":{"description":"결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"failed_at":{"description":"결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"cancelled_at":{"description":"결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"fail_reason":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"cancel_reason":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"cancel_history":{"x-typia-required":true,"x-typia-optional":false,"type":"array","items":{"$ref":"#/components/schemas/IIamportPaymentCancel"}}},"nullable":false,"required":["card_code","card_name","card_number","card_quota","apply_num","pay_method","imp_uid","merchant_uid","name","amount","cancel_amount","currency","receipt_url","cash_receipt_issue","channel","pg_provider","emb_pg_provider","pg_id","pg_tid","escrow","buyer_name","buyer_email","buyer_tel","buyer_addr","buyer_postcode","customer_uid","customer_uid_usage","custom_data","user_agent","status","started_at","paid_at","failed_at","cancelled_at","fail_reason","cancel_reason","cancel_history"],"description":"카드 결제 정보.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"IIamportPayment.Currency":{"type":"string","enum":["KRW","USD","EUR","JPY"]},"IIamportPayment.Status":{"type":"string","enum":["paid","ready","failed","cancelled"]},"IIamportPaymentCancel":{"type":"object","properties":{"pg_id":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"pg_tid":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"amount":{"x-typia-required":true,"x-typia-optional":false,"type":"number"},"cancelled_at":{"x-typia-required":true,"x-typia-optional":false,"type":"number"},"reason":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"receipt_url":{"x-typia-required":true,"x-typia-optional":false,"type":"string","format":"url","x-typia-typeTags":[{"target":"string","name":"Format<\"url\">","kind":"format","value":"url","validate":"/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)","exclusive":["format","pattern"]}]}},"nullable":false,"required":["pg_id","pg_tid","amount","cancelled_at","reason","receipt_url"],"description":"결제 취소 정보.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"IIamportSubscription.IAgain":{"type":"object","properties":{"merchant_uid":{"description":"주문 식별자 키.\n\n아임포트가 아닌 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"amount":{"description":"결제 총액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"name":{"description":"주문 이름.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"currency":{"description":"통화 정보.","x-typia-required":false,"x-typia-optional":true,"type":"string","enum":["KRW","USD","EUR","JPY"]},"tax_free":{"description":"면세 공급가액.\n\n기본값은 0 로써, 알아서 amount 의 1/11 로써 부가세 처리됨.","x-typia-required":false,"x-typia-optional":true,"type":"number"},"card_quota":{"description":"할부 개월 수.\n\n일시불은 0.","x-typia-required":false,"x-typia-optional":true,"type":"number"},"buyer_name":{"x-typia-required":false,"x-typia-optional":true,"type":"string"},"buyer_email":{"x-typia-required":false,"x-typia-optional":true,"type":"string","format":"email","x-typia-typeTags":[{"target":"string","name":"Format<\"email\">","kind":"format","value":"email","validate":"/^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i.test($input)","exclusive":["format","pattern"]}]},"buyer_tel":{"x-typia-required":false,"x-typia-optional":true,"type":"string"},"buyer_addr":{"x-typia-required":false,"x-typia-optional":true,"type":"string"},"buyer_postcode":{"x-typia-required":false,"x-typia-optional":true,"type":"string"},"interest_free_by_merchant":{"description":"카드할부처리할 때, 할부이자가 발생하는 경우 (카드사 무이자 프로모션 제외).\n\n부과되는 할부이자를 고객대신 가맹점이 지불하고자 PG사와 계약된 경우(현재, 나이스페이먼츠만 지원됨)","x-typia-required":false,"x-typia-optional":true,"type":"boolean"},"use_card_point":{"description":"승인요청시 카드사 포인트 차감하며 결제승인처리할지 flag.\n\nPG사 영업담당자와 계약 당시 사전 협의 필요(현재, 나이스페이먼츠만 지원됨)","x-typia-required":false,"x-typia-optional":true,"type":"boolean"},"custom_data":{"description":"임의 정보를 기재할 수 있다.","x-typia-required":false,"x-typia-optional":true,"type":"string"},"notice_url":{"description":"결제 성공시 통지될 Notification, 웹훅 URL.","x-typia-required":false,"x-typia-optional":true,"type":"string","format":"url","x-typia-typeTags":[{"target":"string","name":"Format<\"url\">","kind":"format","value":"url","validate":"/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)","exclusive":["format","pattern"]}]},"customer_uid":{"description":"고객 식별자 키.\n\n아임포트가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.\n\n다만 고객이라기보다 실제로는 카드의 식별자 키로 써야함.","x-typia-required":true,"x-typia-optional":false,"type":"string"}},"nullable":false,"required":["merchant_uid","amount","name","customer_uid"],"description":"간편 결제 카드로 결제 신청 입력 정보.","x-typia-jsDocTags":[]},"IIamportResponseIIamportCertification":{"type":"object","properties":{"code":{"description":"에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"message":{"description":"성공 또는 오류 메시지.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"response":{"$ref":"#/components/schemas/IIamportCertification"}},"nullable":false,"required":["code","message","response"],"description":"아임포트 고유의 응답 데이터.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"IIamportCertification":{"type":"object","properties":{"imp_uid":{"description":"아임포트가 발급해 준 식별자 번호.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"merchant_uid":{"description":"서비스로부터의 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.","x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"name":{"description":"본인인증대상자 성명.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"gender":{"description":"성별.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"birth":{"description":"생년월일.\n\n리눅스 타임이 쓰인다.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"birthday":{"description":"생년월일, YYYYMMDD 형식.","x-typia-required":true,"x-typia-optional":false,"type":"string","pattern":"^([0-9]{4})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$","x-typia-typeTags":[{"target":"string","name":"Pattern<\"^([0-9]{4})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$\">","kind":"pattern","value":"^([0-9]{4})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$","validate":"/^([0-9]{4})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$/.test($input)","exclusive":["format","pattern"]}]},"foreigner":{"description":"외국인 여부.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"phone":{"description":"본인인증 대상자 핸드폰 번호.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"carrier":{"description":"본인인증 대상자 통신사 코드.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["SKT","KT","LGT"]},"certified":{"description":"OTP 인증 여부.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"certified_at":{"description":"OTP 인증 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"unique_key":{"description":"뭔지 잘 모름, 용도 아시는 분?","x-typia-required":true,"x-typia-optional":false,"type":"string"},"unique_in_site":{"description":"뭔지 잘 모름, 용도 아시는 분?","x-typia-required":true,"x-typia-optional":false,"type":"string"},"pg_tid":{"description":"뭔지 잘 모름, 용도 아시는 분?","x-typia-required":true,"x-typia-optional":false,"type":"string"},"pg_provider":{"description":"PG 제공자.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"origin":{"description":"뭔지 잘 모름, 용도 아시는 분?","x-typia-required":true,"x-typia-optional":false,"type":"string"},"__otp":{"description":"(테스트 전용) OTP 코드.\n\n오직 `fake-iamport-server` 에서만 쓰이는 속성으로써, 본인인증을 시뮬레이션할 때,\n어떠한 OTP 코드가 발급되었는 지를 확인하기 위하여 사용된다. 이를 이용하여\n{@link functional.certifications.otp.confirm } 함수를 호출하면, 본인인증을 완료할\n수 있다.","x-typia-required":false,"x-typia-optional":true,"type":"string"}},"nullable":false,"required":["imp_uid","merchant_uid","name","gender","birth","birthday","foreigner","phone","carrier","certified","certified_at","unique_key","unique_in_site","pg_tid","pg_provider","origin"],"description":"본인 인증 내역.\n\n`IIamportCertification` 은 아임포트의 본인인증 정보를 형상화한 자료구조 인터페이스이다.\n\n단, `IIamportCertification` 레코드의 존재가 곧 본인인증의 완결을 뜻하는 것은 아니다.\n{@link IIamportCertification.certified } 값이 `true` 여야만이 비로소, 본인인증\n대상자가 자신의 핸드폰 번호로 전송된 OTP 를 아임포트의 본인인증 팝업창에 정확히 적어,\n본인인증을 완료했음을 의미한다.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"IIamportCertification.IStore":{"type":"object","properties":{"name":{"description":"본인인증대상자 성명.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"phone":{"description":"본인인증 대상자 핸드폰 번호.\n\n핸드폰 번호에 \"-\" 값이 들어가던 아니던 상관 없음.\n\n다만, 내부적으로는 \"-\" 값을 제거하여 처리한다.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"birth":{"description":"생년월일.\n\nYYYYMMDD 형식.","x-typia-required":true,"x-typia-optional":false,"type":"string","pattern":"^([0-9]{4})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$","x-typia-typeTags":[{"target":"string","name":"Pattern<\"^([0-9]{4})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$\">","kind":"pattern","value":"^([0-9]{4})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$","validate":"/^([0-9]{4})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$/.test($input)","exclusive":["format","pattern"]}]},"gender_digit":{"description":"주민등록 뒷부분 첫 자리.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"carrier":{"description":"본인인증 대상자 통신사 코드.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["SKT","KT","LGT"]},"is_mvno":{"description":"알뜰폰 여부.","x-typia-required":false,"x-typia-optional":true,"type":"boolean"},"commpany":{"description":"가맹점 서비스 명칭 또는 domain URL.\n\nKISA 에서 대상자에게 발송하는 SMS에 안내될 서비스 명칭.","x-typia-required":false,"x-typia-optional":true,"type":"string"},"merchant_uid":{"description":"귀사 서비스에서의 본인인증 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.","x-typia-required":false,"x-typia-optional":true,"type":"string"},"pg":{"description":"PG 사 구분자.\n\n다날 상점아이디를 2개 이상 동시에 사용하시려는 경우에 설정하면 된다.\n\n**danal.{상점아이디}** 형태로 지정.","x-typia-required":false,"x-typia-optional":true,"type":"string"}},"nullable":false,"required":["name","phone","birth","gender_digit","carrier"],"description":"본인 인증 입력 정보.","x-typia-jsDocTags":[]},"IIamportResponseIIamportCertification.IAccessor":{"type":"object","properties":{"code":{"description":"에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"message":{"description":"성공 또는 오류 메시지.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"response":{"$ref":"#/components/schemas/IIamportCertification.IAccessor"}},"nullable":false,"required":["code","message","response"],"description":"아임포트 고유의 응답 데이터.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"IIamportCertification.IAccessor":{"type":"object","properties":{"imp_uid":{"description":"본인인증정보의 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"}},"nullable":false,"required":["imp_uid"],"description":"본인인증 정보의 접근자 구조체.","x-typia-jsDocTags":[]},"IIamportCertification.IConfirm":{"type":"object","properties":{"otp":{"description":"SMS 로 전송된 본인인증 번호.","x-typia-required":true,"x-typia-optional":false,"type":"string"}},"nullable":false,"required":["otp"],"description":"본인인증 승인을 위한 입력 정보.","x-typia-jsDocTags":[]},"IIamportPayment.IWebhook":{"type":"object","properties":{"imp_uid":{"description":"결제 정보 {@link IIamportPayment } 의 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"merchant_uid":{"description":"주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"status":{"description":"현재 상태.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["paid","ready","failed","cancelled"]}},"nullable":false,"required":["imp_uid","merchant_uid","status"],"description":"웹훅 데이터.","x-typia-jsDocTags":[]},"IIamportPayment.IQuery":{"type":"object","properties":{"extension":{"description":"페이팔의 경우, 이 값을 `true` 로 할 것.","x-typia-required":false,"x-typia-optional":true,"type":"boolean"}},"nullable":false,"description":"결제 수단이 페이팔인 경우, 페이팔의 구매자 보호정책에 의해 결제 승인 시점에\nPending 상태를 만든 후, 내부 심사등을 통해 최종 결제 완료라고 변경함.\n\n`iamport` 의 기술적 이슈로 해당 상태를 status: failed 로 기록함. 추후\n페이팔에서 최종결제완료로 변경된 경우, `iamport` 에서 `paid` 로 변경 후,\n해당건에 대한 웹훅 발송. `iamport` 를 사용하는 고객사에서는, failed 로 이미\n처리된 결제건에 대한 paid 상태의 웹훅을 받는 문제점이 생김.\n\n이에, `iamport` 에서 제공하는 `/payment/{imp_uid}` 에 query-string 으로\n`extension=true` 옵션을 추가해야 함","x-typia-jsDocTags":[{"name":"issue","text":[{"text":"https://github.com/samchon/fake-iamport-server/issues/13","kind":"text"}]},{"name":"author","text":[{"text":"Sangjin Han - https://github.com/ltnscp9028","kind":"text"}]}]},"IIamportResponseIIamportPayment":{"type":"object","properties":{"code":{"description":"에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"message":{"description":"성공 또는 오류 메시지.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"response":{"$ref":"#/components/schemas/IIamportPayment"}},"nullable":false,"required":["code","message","response"],"description":"아임포트 고유의 응답 데이터.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"IIamportPayment":{"oneOf":[{"$ref":"#/components/schemas/IIamportCardPayment"},{"$ref":"#/components/schemas/IIamportTransferPayment"},{"$ref":"#/components/schemas/IIamportVBankPayment"},{"$ref":"#/components/schemas/IIamportPayment.IBasephonekpaykakaopaypaycolpayssgpaytosspayculturelandsmartculturehappymoneybooknlifepoint"}],"description":"결제 정보.\n\n`IIamportPayment` 는 아임포트의 결제 정보를 형상화한 자료구조이자 유니언 타입의\n인터페이스로써, if condition 을 통하여 method 값을 특정하면, 파생 타입이 자동으로\n지정된다.\n\n```typescript\nif (payment.pay_method === \"card\")\n payment.card_number; // payment be IIamportCardPayment\n```","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"IIamportTransferPayment":{"type":"object","properties":{"bank_code":{"description":"은행 식별자 코드.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"bank_name":{"description":"은행 이름.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"pay_method":{"x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["trans"]},"imp_uid":{"description":"결제 정보 {@link IIamportPayment } 의 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"merchant_uid":{"description":"주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"name":{"description":"주문명, 누락 가능.","x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"amount":{"description":"결제 총액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"cancel_amount":{"description":"결제 취소, 환불 총액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"currency":{"$ref":"#/components/schemas/IIamportPayment.Currency"},"receipt_url":{"description":"영수증 URL.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"url","x-typia-typeTags":[{"target":"string","name":"Format<\"url\">","kind":"format","value":"url","validate":"/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)","exclusive":["format","pattern"]}]},"cash_receipt_issue":{"description":"현금 영수증 발행 여부.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"channel":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"pg_provider":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"emb_pg_provider":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"pg_id":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"pg_tid":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"escrow":{"x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"buyer_name":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"buyer_email":{"x-typia-required":true,"x-typia-optional":false,"type":"string","format":"email","x-typia-typeTags":[{"target":"string","name":"Format<\"email\">","kind":"format","value":"email","validate":"/^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i.test($input)","exclusive":["format","pattern"]}],"nullable":true},"buyer_tel":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"buyer_addr":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"buyer_postcode":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"customer_uid":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"customer_uid_usage":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"custom_data":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"user_agent":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"status":{"$ref":"#/components/schemas/IIamportPayment.Status"},"started_at":{"description":"결제 신청 일시.\n\n리눅스 타임이 쓰임.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"paid_at":{"description":"결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"failed_at":{"description":"결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"cancelled_at":{"description":"결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"fail_reason":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"cancel_reason":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"cancel_history":{"x-typia-required":true,"x-typia-optional":false,"type":"array","items":{"$ref":"#/components/schemas/IIamportPaymentCancel"}}},"nullable":false,"required":["bank_code","bank_name","pay_method","imp_uid","merchant_uid","name","amount","cancel_amount","currency","receipt_url","cash_receipt_issue","channel","pg_provider","emb_pg_provider","pg_id","pg_tid","escrow","buyer_name","buyer_email","buyer_tel","buyer_addr","buyer_postcode","customer_uid","customer_uid_usage","custom_data","user_agent","status","started_at","paid_at","failed_at","cancelled_at","fail_reason","cancel_reason","cancel_history"],"description":"계좌 이체 결제 정보.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"IIamportVBankPayment":{"type":"object","properties":{"vbank_code":{"description":"가상 계좌 식별자 코드.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"vbank_name":{"description":"가상 게좌 이름","x-typia-required":true,"x-typia-optional":false,"type":"string"},"vbank_num":{"description":"가상 계좌 번호","x-typia-required":true,"x-typia-optional":false,"type":"string"},"vbank_holder":{"description":"가상 계좌 예금주.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"vbank_date":{"description":"가상 계좌 입금 만료 기한.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"vbank_issued_at":{"description":"가상 계좌 개설 일시.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"pay_method":{"x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["vbank"]},"imp_uid":{"description":"결제 정보 {@link IIamportPayment } 의 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"merchant_uid":{"description":"주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"name":{"description":"주문명, 누락 가능.","x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"amount":{"description":"결제 총액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"cancel_amount":{"description":"결제 취소, 환불 총액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"currency":{"$ref":"#/components/schemas/IIamportPayment.Currency"},"receipt_url":{"description":"영수증 URL.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"url","x-typia-typeTags":[{"target":"string","name":"Format<\"url\">","kind":"format","value":"url","validate":"/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)","exclusive":["format","pattern"]}]},"cash_receipt_issue":{"description":"현금 영수증 발행 여부.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"channel":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"pg_provider":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"emb_pg_provider":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"pg_id":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"pg_tid":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"escrow":{"x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"buyer_name":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"buyer_email":{"x-typia-required":true,"x-typia-optional":false,"type":"string","format":"email","x-typia-typeTags":[{"target":"string","name":"Format<\"email\">","kind":"format","value":"email","validate":"/^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i.test($input)","exclusive":["format","pattern"]}],"nullable":true},"buyer_tel":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"buyer_addr":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"buyer_postcode":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"customer_uid":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"customer_uid_usage":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"custom_data":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"user_agent":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"status":{"$ref":"#/components/schemas/IIamportPayment.Status"},"started_at":{"description":"결제 신청 일시.\n\n리눅스 타임이 쓰임.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"paid_at":{"description":"결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"failed_at":{"description":"결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"cancelled_at":{"description":"결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"fail_reason":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"cancel_reason":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"cancel_history":{"x-typia-required":true,"x-typia-optional":false,"type":"array","items":{"$ref":"#/components/schemas/IIamportPaymentCancel"}}},"nullable":false,"required":["vbank_code","vbank_name","vbank_num","vbank_holder","vbank_date","vbank_issued_at","pay_method","imp_uid","merchant_uid","name","amount","cancel_amount","currency","receipt_url","cash_receipt_issue","channel","pg_provider","emb_pg_provider","pg_id","pg_tid","escrow","buyer_name","buyer_email","buyer_tel","buyer_addr","buyer_postcode","customer_uid","customer_uid_usage","custom_data","user_agent","status","started_at","paid_at","failed_at","cancelled_at","fail_reason","cancel_reason","cancel_history"],"description":"가상 계좌 결제 정보.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"IIamportPayment.IBasephonekpaykakaopaypaycolpayssgpaytosspayculturelandsmartculturehappymoneybooknlifepoint":{"type":"object","properties":{"pay_method":{"x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["phone","kpay","kakaopay","payco","lpay","ssgpay","tosspay","cultureland","smartculture","happymoney","booknlife","point"]},"imp_uid":{"description":"결제 정보 {@link IIamportPayment } 의 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"merchant_uid":{"description":"주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"name":{"description":"주문명, 누락 가능.","x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"amount":{"description":"결제 총액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"cancel_amount":{"description":"결제 취소, 환불 총액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"currency":{"$ref":"#/components/schemas/IIamportPayment.Currency"},"receipt_url":{"description":"영수증 URL.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"url","x-typia-typeTags":[{"target":"string","name":"Format<\"url\">","kind":"format","value":"url","validate":"/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)","exclusive":["format","pattern"]}]},"cash_receipt_issue":{"description":"현금 영수증 발행 여부.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"channel":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"pg_provider":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"emb_pg_provider":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"pg_id":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"pg_tid":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"escrow":{"x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"buyer_name":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"buyer_email":{"x-typia-required":true,"x-typia-optional":false,"type":"string","format":"email","x-typia-typeTags":[{"target":"string","name":"Format<\"email\">","kind":"format","value":"email","validate":"/^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i.test($input)","exclusive":["format","pattern"]}],"nullable":true},"buyer_tel":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"buyer_addr":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"buyer_postcode":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"customer_uid":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"customer_uid_usage":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"custom_data":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"user_agent":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"status":{"$ref":"#/components/schemas/IIamportPayment.Status"},"started_at":{"description":"결제 신청 일시.\n\n리눅스 타임이 쓰임.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"paid_at":{"description":"결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"failed_at":{"description":"결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"cancelled_at":{"description":"결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"fail_reason":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"cancel_reason":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"cancel_history":{"x-typia-required":true,"x-typia-optional":false,"type":"array","items":{"$ref":"#/components/schemas/IIamportPaymentCancel"}}},"nullable":false,"required":["pay_method","imp_uid","merchant_uid","name","amount","cancel_amount","currency","receipt_url","cash_receipt_issue","channel","pg_provider","emb_pg_provider","pg_id","pg_tid","escrow","buyer_name","buyer_email","buyer_tel","buyer_addr","buyer_postcode","customer_uid","customer_uid_usage","custom_data","user_agent","status","started_at","paid_at","failed_at","cancelled_at","fail_reason","cancel_reason","cancel_history"],"description":"결제 기본 (공통) 정보.","x-typia-jsDocTags":[]},"IIamportPaymentCancel.IStore":{"type":"object","properties":{"imp_uid":{"description":"결제 정보 {@link IIamportPayment } 의 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"merchant_uid":{"description":"주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"amount":{"description":"취소 금액, 부분 취소도 가능하다.\n\n누락시 전액 취소.","x-typia-required":false,"x-typia-optional":true,"type":"number"},"checksum":{"description":"취소 트랜잭션 수행 전, 현재 시점의 취소 가능한 잔액.\n\nAPI요청자가 기록하고 있는 취소가능 잔액과 아임포트가 기록하고 있는 취소가능 잔액이\n일치하는지 사전에 검증하고, 검증에 실패하면 트랜잭션을 수행하지 않는다.\n\n`null` 인 경우에는 검증 프로세스를 생략.","x-typia-required":true,"x-typia-optional":false,"type":"number","minimum":0,"x-typia-typeTags":[{"target":"number","name":"Minimum<0>","kind":"minimum","value":0,"validate":"0 <= $input","exclusive":["minimum","exclusiveMinimum"]}],"nullable":true},"reason":{"description":"취소 사유.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"tax_free":{"description":"취소요청금액 중 면세금액.","x-typia-jsDocTags":[{"name":"default","text":[{"text":"0","kind":"text"}]}],"x-typia-required":false,"x-typia-optional":true,"type":"number","default":0},"refund_holder":{"description":"환불계좌 예금주.","x-typia-required":false,"x-typia-optional":true,"type":"string"},"refund_bank":{"description":"환불계좌 은행 코드.","x-typia-required":false,"x-typia-optional":true,"type":"string"},"refund_account":{"description":"환불계좌 계좌번호.","x-typia-required":false,"x-typia-optional":true,"type":"string"},"refund_tel":{"description":"환불계좌 예금주 연락처","x-typia-required":false,"x-typia-optional":true,"type":"string"}},"nullable":false,"required":["imp_uid","merchant_uid","checksum","reason"],"description":"결제 취소 입력 정보.","x-typia-jsDocTags":[]},"IIamportResponseIIamportReceipt":{"type":"object","properties":{"code":{"description":"에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"message":{"description":"성공 또는 오류 메시지.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"response":{"$ref":"#/components/schemas/IIamportReceipt"}},"nullable":false,"required":["code","message","response"],"description":"아임포트 고유의 응답 데이터.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"IIamportReceipt":{"type":"object","properties":{"imp_uid":{"description":"귀속 결제의 {@link IIamportPayment.imp_uid }.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"receipt_uid":{"description":"현금 영수증의 고유 식별자 ID.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"apply_num":{"description":"승인 번호.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"type":{"$ref":"#/components/schemas/IIamportReceipt.Type"},"amount":{"description":"결제 총액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"vat":{"description":"부가세.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"receipt_url":{"description":"현금영수증 조회 URL.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"url","x-typia-typeTags":[{"target":"string","name":"Format<\"url\">","kind":"format","value":"url","validate":"/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)","exclusive":["format","pattern"]}]},"applied_at":{"description":"현금영수증 발행 시간.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"cancelled_at":{"description":"현금영수증 취소 시간.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.","x-typia-required":true,"x-typia-optional":false,"type":"number"}},"nullable":false,"required":["imp_uid","receipt_uid","apply_num","type","amount","vat","receipt_url","applied_at","cancelled_at"],"description":"현금 영수증 정보.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"IIamportReceipt.Type":{"description":"현금영수증 발행 타입 (대상).","type":"string","enum":["person","company"]},"IIamportReceipt.IStore":{"type":"object","properties":{"imp_uid":{"description":"귀속 결제의 {@link IIamportPayment.imp_uid }.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"identifier":{"description":"현금영수증 발생대상 식별정보.\n\n - 국세청현금영수증카드\n - 휴대폰번호\n - 주민등록번호\n - 사업자등록번호","x-typia-required":true,"x-typia-optional":false,"type":"string"},"identifier_type":{"description":"현금영수증 발행대상 유형.\n\n - person: 주민등록번호\n - business: 사업자등록번호\n - phone: 휴대폰번호\n - taxcard: 국세청현금영수증카드\n\n일부 PG 사의 경우 이 항목이 없어 된다는데, 어지간하면 그냥 쓰기 바람.","x-typia-required":false,"x-typia-optional":true,"type":"string","enum":["phone","person","business","taxcard"]},"type":{"description":"현금영수증 발행 타입 (대상).\n\n누락시 person 이 사용됨.","x-typia-required":false,"x-typia-optional":true,"type":"string","enum":["person","company"]},"buyer_name":{"description":"구매자 이름.\n\n형금영수증 발행건 사후 추적을 위해 가급 입력하기 바람.","x-typia-required":false,"x-typia-optional":true,"type":"string"},"buyer_email":{"description":"구매자 이메일.","x-typia-required":false,"x-typia-optional":true,"type":"string"},"buyer_tel":{"description":"구매자 전화번호.\n\n현금영수증 발행건 사후 추적을 위해 가급 입력하기 바람.","x-typia-required":false,"x-typia-optional":true,"type":"string"},"tax_free":{"description":"면세 금액.","x-typia-required":false,"x-typia-optional":true,"type":"number"}},"nullable":false,"required":["imp_uid","identifier"],"description":"현금영수증 입력 정보.","x-typia-jsDocTags":[]},"IIamportUser.IAccessor":{"type":"object","properties":{"imp_key":{"description":"API 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"imp_secret":{"description":"Secret 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"}},"nullable":false,"required":["imp_key","imp_secret"],"description":"아임포트에서 부여해 준 API 및 secret 키.","x-typia-jsDocTags":[]},"IIamportResponseIIamportUser":{"type":"object","properties":{"code":{"description":"에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"message":{"description":"성공 또는 오류 메시지.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"response":{"$ref":"#/components/schemas/IIamportUser"}},"nullable":false,"required":["code","message","response"],"description":"아임포트 고유의 응답 데이터.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"IIamportUser":{"type":"object","properties":{"now":{"description":"토큰 발행 시간.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"expired_at":{"description":"토큰 만료 시간.\n\n리눅스 타임이 기준이며, 이를 JS 에서 사용하려거든, 아래와 같이 변환해야 한다.\n\n```typescript\nnew Date(user.expired_at * 1_000);\n```","x-typia-required":true,"x-typia-optional":false,"type":"number"},"access_token":{"description":"유저 인증 토큰.","x-typia-required":true,"x-typia-optional":false,"type":"string"}},"nullable":false,"required":["now","expired_at","access_token"],"description":"아임포트 유저 인증 정보.\n\n아임포트는 고객사에게 API 및 secret 키 정보, {@link IIamportUser.IAccessor } 를 발급해준다.\n\n하지만 이를 곧장 아임포트의 유저 인증에 사용할 수는 없고, 해당 API 및 secret 키를 토대로 유저\n인증 토큰을 발급받아야 하는데, 이 유저 인증 토큰에는 하필이면 만로 시간이라는 게 존재한다.\n`IIamportUser` 는 바로 이러한 유저 인증 토큰 및 그것의 만료 시간을 형상화한 자료구조\n인터페이스이다.\n\n더하여 이처럼 만료 시간이 존재하는 아임포트의 유저 인증 토큰의 특성상, 이것의 만료 시간이\n초과되지 않도록 관리하는 것은 매우 힘든 일이다. 이에 `iamport-server-api` 에서는 아임포트\n유저 인증 토큰이 만료될 때마다 자동 갱신해주는, {@link IamportConnector } 클래스를 제공한다.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"IIamportVBankPayment.IStore":{"type":"object","properties":{"merchant_uid":{"description":"주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"amount":{"description":"총액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"vbank_code":{"description":"가상계좌 은행 코드.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"vbank_due":{"description":"가상계좌 입금기한, 유닉스 타임.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"vbank_holder":{"description":"예금주.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"name":{"x-typia-required":false,"x-typia-optional":true,"type":"string"},"buyer_name":{"x-typia-required":false,"x-typia-optional":true,"type":"string"},"buyer_email":{"x-typia-required":false,"x-typia-optional":true,"type":"string"},"buyer_tel":{"x-typia-required":false,"x-typia-optional":true,"type":"string"},"buyer_addr":{"x-typia-required":false,"x-typia-optional":true,"type":"string"},"buyer_postcode":{"x-typia-required":false,"x-typia-optional":true,"type":"string"},"pg":{"x-typia-required":false,"x-typia-optional":true,"type":"string"},"notice_url":{"description":"가상 계좌 입금 정보를 수신할 URL.\n\n누락시 기본 웹훅 URL 사용.","x-typia-required":false,"x-typia-optional":true,"type":"string"},"custom_data":{"description":"커스텀 데이터, 자유롭게 사용 가능.","x-typia-required":false,"x-typia-optional":true,"type":"string"},"pg_api_key":{"description":"[이니시스 전용] 가맹점 콘솔에서 확인한 API 값.","x-typia-required":false,"x-typia-optional":true,"type":"string"}},"nullable":false,"required":["merchant_uid","amount","vbank_code","vbank_due","vbank_holder"],"description":"가상 계좌 결제 입력 정보.\n\n가상 계좌를 임의 생성할 수 있다.\n\n단, 일부 PG 사 혹은 `fake-iamport-server` 만 가능.\n\n - 세틀뱅크\n - 나이스페이먼츠\n - KG이니시스","x-typia-jsDocTags":[]},"IIamportResponseIIamportVBankPayment":{"type":"object","properties":{"code":{"description":"에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"message":{"description":"성공 또는 오류 메시지.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"response":{"$ref":"#/components/schemas/IIamportVBankPayment"}},"nullable":false,"required":["code","message","response"],"description":"아임포트 고유의 응답 데이터.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"IIamportVBankPayment.IUpdate":{"type":"object","properties":{"imp_uid":{"description":"대상 결제 기록의 {@link IIamportPayment.imp_uid }.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"amount":{"description":"수정할 결제 금액.","x-typia-required":false,"x-typia-optional":true,"type":"number"},"vbank_due":{"description":"수정할 가상계좌 입금 기한.","x-typia-required":false,"x-typia-optional":true,"type":"number"}},"nullable":false,"required":["imp_uid"],"description":"가상 계좌 결제의 수정 입력 정보.\n\n아직 입금되지 않은 가상계좌의 입금기한 또는 입금금액을 수정할 수 있다.\n\n다만, 세틀뱅크 혹은 `fake-iamport-server` 만 가능.","x-typia-jsDocTags":[]}},"securitySchemes":{"bearer":{"type":"apiKey","name":"Authorization","in":"header"}}}} \ No newline at end of file diff --git a/packages/payment-api/package.json b/packages/payment-api/package.json index db7804d..ecf3716 100644 --- a/packages/payment-api/package.json +++ b/packages/payment-api/package.json @@ -1,6 +1,6 @@ { "name": "@samchon/payment-api", - "version": "5.1.4", + "version": "5.1.5", "description": "API for Payment Backend", "main": "lib/index.js", "typings": "lib/index.d.ts", @@ -9,7 +9,7 @@ "build:sdk": "rimraf ../payment-backend/src/api/functional && cd ../payment-backend && npx nestia sdk && cd ../payment-api", "compile": "rimraf lib && tsc", "deploy": "npm run build && npm publish", - "prepare": "ts-patch install" + "prepare": "ts-patch install && typia patch" }, "repository": { "type": "git", @@ -31,12 +31,12 @@ "rimraf": "^5.0.1", "ts-node": "^10.9.1", "ts-patch": "^3.0.2", - "typescript": "^5.2.2" + "typescript": "^5.3.2" }, "dependencies": { - "@nestia/fetcher": "^2.3.9", - "iamport-server-api": "^5.1.4", - "toss-payments-server-api": "^5.1.4", - "typia": "^5.2.6" + "@nestia/fetcher": "^2.4.1", + "iamport-server-api": "^5.1.5", + "toss-payments-server-api": "^5.1.5", + "typia": "^5.3.1" } } \ No newline at end of file diff --git a/packages/payment-api/swagger.json b/packages/payment-api/swagger.json index 5016fb0..271ef10 100644 --- a/packages/payment-api/swagger.json +++ b/packages/payment-api/swagger.json @@ -1,5464 +1 @@ -{ - "openapi": "3.0.1", - "servers": [ - { - "url": "https://github.com/samchon/nestia", - "description": "insert your server url" - } - ], - "info": { - "version": "5.1.4", - "title": "@samchon/payment-backend", - "description": "Payment Backend Server", - "license": { - "name": "MIT" - } - }, - "paths": { - "/monitors/health": { - "get": { - "tags": [], - "parameters": [], - "responses": { - "200": { - "description": "", - "x-nestia-encrypted": false - } - }, - "x-nestia-namespace": "monitors.health.get", - "x-nestia-jsDocTags": [], - "x-nestia-method": "GET" - } - }, - "/monitors/performance": { - "get": { - "tags": [], - "parameters": [], - "responses": { - "200": { - "description": "## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.G.et](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.", - "content": { - "text/plain": { - "schema": { - "$ref": "#/components/schemas/IPerformance" - } - } - }, - "x-nestia-encrypted": true - } - }, - "x-nestia-namespace": "monitors.performance.get", - "x-nestia-jsDocTags": [], - "x-nestia-method": "GET" - } - }, - "/monitors/system": { - "get": { - "tags": [], - "parameters": [], - "responses": { - "200": { - "description": "## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.G.et](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.", - "content": { - "text/plain": { - "schema": { - "$ref": "#/components/schemas/ISystem" - } - } - }, - "x-nestia-encrypted": true - } - }, - "x-nestia-namespace": "monitors.system.get", - "x-nestia-jsDocTags": [], - "x-nestia-method": "GET" - } - }, - "/payments/histories/get": { - "patch": { - "tags": [], - "parameters": [], - "requestBody": { - "description": "## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.G.et](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.결제 내역의 원천 정보 + 비밀번호", - "content": { - "text/plain": { - "schema": { - "$ref": "#/components/schemas/IPaymentSource.IAccessor" - } - } - }, - "required": true, - "x-nestia-encrypted": true - }, - "responses": { - "201": { - "description": "## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.G.et](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.결제 내역", - "content": { - "text/plain": { - "schema": { - "$ref": "#/components/schemas/IPaymentHistory" - } - } - }, - "x-nestia-encrypted": true - } - }, - "summary": "결제 내역 상세 조회하기", - "description": "결제 내역 상세 조회하기.", - "x-nestia-namespace": "payments.histories.get.get", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "input", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "결제 내역의 원천 정보 + 비밀번호", - "kind": "text" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "결제 내역", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "PATCH" - } - }, - "/payments/histories/{id}": { - "patch": { - "tags": [], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"uuid\">", - "kind": "format", - "value": "uuid", - "validate": "/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "description": "Primary Key", - "required": true - } - ], - "requestBody": { - "description": "## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.G.et](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.결제 내역의 비밀번호", - "content": { - "text/plain": { - "schema": { - "$ref": "#/components/schemas/IPaymentSource.IPassword" - } - } - }, - "required": true, - "x-nestia-encrypted": true - }, - "responses": { - "201": { - "description": "## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.G.et](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.결제 내역", - "content": { - "text/plain": { - "schema": { - "$ref": "#/components/schemas/IPaymentHistory" - } - } - }, - "x-nestia-encrypted": true - } - }, - "summary": "결제 내역 상세 조회하기", - "description": "결제 내역 상세 조회하기.", - "x-nestia-namespace": "payments.histories.at", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "id", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "Primary Key", - "kind": "text" - } - ] - }, - { - "name": "param", - "text": [ - { - "text": "input", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "결제 내역의 비밀번호", - "kind": "text" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "결제 내역", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "PATCH" - } - }, - "/payments/histories": { - "post": { - "tags": [], - "parameters": [], - "requestBody": { - "description": "## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.G.et](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.결제 내역 입력 정보", - "content": { - "text/plain": { - "schema": { - "$ref": "#/components/schemas/IPaymentHistory.IStore" - } - } - }, - "required": true, - "x-nestia-encrypted": true - }, - "responses": { - "201": { - "description": "## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.G.et](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.결제 내역", - "content": { - "text/plain": { - "schema": { - "$ref": "#/components/schemas/IPaymentHistory" - } - } - }, - "x-nestia-encrypted": true - } - }, - "summary": "결제 내역 발행하기", - "description": "결제 내역 발행하기.", - "x-nestia-namespace": "payments.histories.store", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "input", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "결제 내역 입력 정보", - "kind": "text" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "결제 내역", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "POST" - } - }, - "/payments/histories/cancel": { - "put": { - "tags": [], - "parameters": [], - "requestBody": { - "description": "## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.G.et](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.결제 취소 내역 입력 정보", - "content": { - "text/plain": { - "schema": { - "$ref": "#/components/schemas/IPaymentCancelHistory.IStore" - } - } - }, - "required": true, - "x-nestia-encrypted": true - }, - "responses": { - "201": { - "description": "## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.G.et](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.", - "content": { - "text/plain": { - "schema": { - "$ref": "#/components/schemas/IPaymentHistory" - } - } - }, - "x-nestia-encrypted": true - } - }, - "summary": "결제 취소하기", - "description": "결제 취소하기.", - "x-nestia-namespace": "payments.histories.cancel.cancel", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "input", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "결제 취소 내역 입력 정보", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "PUT" - } - }, - "/payments/reservations/get": { - "patch": { - "tags": [], - "parameters": [], - "requestBody": { - "description": "## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.G.et](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.간편 결제 수단의 원천 정보 + 비밀번호", - "content": { - "text/plain": { - "schema": { - "$ref": "#/components/schemas/IPaymentSource.IAccessor" - } - } - }, - "required": true, - "x-nestia-encrypted": true - }, - "responses": { - "201": { - "description": "## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.G.et](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.결제 내역", - "content": { - "text/plain": { - "schema": { - "$ref": "#/components/schemas/IPaymentReservation" - } - } - }, - "x-nestia-encrypted": true - } - }, - "summary": "간편 결제 수단 조회하기", - "description": "간편 결제 수단 조회하기.", - "x-nestia-namespace": "payments.reservations.get.get", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "input", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "간편 결제 수단의 원천 정보 + 비밀번호", - "kind": "text" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "결제 내역", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "PATCH" - } - }, - "/payments/reservations/{id}": { - "patch": { - "tags": [], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"uuid\">", - "kind": "format", - "value": "uuid", - "validate": "/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "description": "Primary Key", - "required": true - } - ], - "requestBody": { - "description": "## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.G.et](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.비밀번호", - "content": { - "text/plain": { - "schema": { - "$ref": "#/components/schemas/IPaymentSource.IPassword" - } - } - }, - "required": true, - "x-nestia-encrypted": true - }, - "responses": { - "201": { - "description": "## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.G.et](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.간편 결제 수단 정보", - "content": { - "text/plain": { - "schema": { - "$ref": "#/components/schemas/IPaymentReservation" - } - } - }, - "x-nestia-encrypted": true - } - }, - "summary": "간편 결제 수단 조회하기", - "description": "간편 결제 수단 조회하기.", - "x-nestia-namespace": "payments.reservations.at", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "id", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "Primary Key", - "kind": "text" - } - ] - }, - { - "name": "param", - "text": [ - { - "text": "input", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "비밀번호", - "kind": "text" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "간편 결제 수단 정보", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "PATCH" - } - }, - "/payments/reservations": { - "post": { - "tags": [], - "parameters": [], - "requestBody": { - "description": "## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.G.et](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.간편 결제 수단 입력 정보", - "content": { - "text/plain": { - "schema": { - "$ref": "#/components/schemas/IPaymentReservation.IStore" - } - } - }, - "required": true, - "x-nestia-encrypted": true - }, - "responses": { - "201": { - "description": "## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.G.et](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.간편 결제 수단 정보", - "content": { - "text/plain": { - "schema": { - "$ref": "#/components/schemas/IPaymentReservation" - } - } - }, - "x-nestia-encrypted": true - } - }, - "summary": "간편 결제 수단 등록하기", - "description": "간편 결제 수단 등록하기.", - "x-nestia-namespace": "payments.reservations.store", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "input", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "간편 결제 수단 입력 정보", - "kind": "text" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "간편 결제 수단 정보", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "POST" - } - }, - "/payments/webhooks/iamport": { - "post": { - "tags": [], - "parameters": [], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IIamportPayment.IWebhook" - } - } - }, - "required": true, - "x-nestia-encrypted": false - }, - "responses": { - "201": { - "description": "", - "x-nestia-encrypted": false - } - }, - "x-nestia-namespace": "payments.webhooks.iamport.iamport", - "x-nestia-jsDocTags": [ - { - "name": "danger" - } - ], - "x-nestia-method": "POST" - } - } - }, - "components": { - "schemas": { - "IPerformance": { - "type": "object", - "properties": { - "cpu": { - "$ref": "#/components/schemas/process.global.NodeJS.CpuUsage" - }, - "memory": { - "$ref": "#/components/schemas/process.global.NodeJS.MemoryUsage" - }, - "resource": { - "$ref": "#/components/schemas/process.global.NodeJS.ResourceUsage" - } - }, - "nullable": false, - "required": [ - "cpu", - "memory", - "resource" - ], - "x-typia-jsDocTags": [] - }, - "process.global.NodeJS.CpuUsage": { - "type": "object", - "properties": { - "user": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "system": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - } - }, - "nullable": false, - "required": [ - "user", - "system" - ], - "x-typia-jsDocTags": [] - }, - "process.global.NodeJS.MemoryUsage": { - "type": "object", - "properties": { - "rss": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "heapTotal": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "heapUsed": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "external": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "arrayBuffers": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - } - }, - "nullable": false, - "required": [ - "rss", - "heapTotal", - "heapUsed", - "external", - "arrayBuffers" - ], - "x-typia-jsDocTags": [] - }, - "process.global.NodeJS.ResourceUsage": { - "type": "object", - "properties": { - "fsRead": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "fsWrite": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "involuntaryContextSwitches": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "ipcReceived": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "ipcSent": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "majorPageFault": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "maxRSS": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "minorPageFault": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "sharedMemorySize": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "signalsCount": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "swappedOut": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "systemCPUTime": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "unsharedDataSize": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "unsharedStackSize": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "userCPUTime": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "voluntaryContextSwitches": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - } - }, - "nullable": false, - "required": [ - "fsRead", - "fsWrite", - "involuntaryContextSwitches", - "ipcReceived", - "ipcSent", - "majorPageFault", - "maxRSS", - "minorPageFault", - "sharedMemorySize", - "signalsCount", - "swappedOut", - "systemCPUTime", - "unsharedDataSize", - "unsharedStackSize", - "userCPUTime", - "voluntaryContextSwitches" - ], - "x-typia-jsDocTags": [] - }, - "ISystem": { - "type": "object", - "properties": { - "uid": { - "description": "Random Unique ID.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "arguments": { - "description": "`process.argv`", - "x-typia-required": true, - "x-typia-optional": false, - "type": "array", - "items": { - "description": "`process.argv`", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "commit": { - "$ref": "#/components/schemas/ISystem.ICommit" - }, - "package": { - "$ref": "#/components/schemas/ISystem.IPackage" - }, - "created_at": { - "description": "Creation time of this system.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "nullable": false, - "required": [ - "uid", - "arguments", - "commit", - "package", - "created_at" - ], - "x-typia-jsDocTags": [] - }, - "ISystem.ICommit": { - "type": "object", - "properties": { - "shortHash": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "branch": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "hash": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "subject": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "sanitizedSubject": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "body": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "author": { - "$ref": "#/components/schemas/ISystem.ICommit.IUser" - }, - "committer": { - "$ref": "#/components/schemas/ISystem.ICommit.IUser" - }, - "authored_at": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "commited_at": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "notes": { - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "tags": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "array", - "items": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - } - }, - "nullable": false, - "required": [ - "shortHash", - "branch", - "hash", - "subject", - "sanitizedSubject", - "body", - "author", - "committer", - "authored_at", - "commited_at", - "tags" - ], - "description": "Git commit information.", - "x-typia-jsDocTags": [] - }, - "ISystem.ICommit.IUser": { - "type": "object", - "properties": { - "name": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "email": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "nullable": false, - "required": [ - "name", - "email" - ], - "description": "Git user information.", - "x-typia-jsDocTags": [] - }, - "ISystem.IPackage": { - "type": "object", - "properties": { - "name": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "version": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "description": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "scripts": { - "$ref": "#/components/schemas/Recordstringstring" - }, - "repository": { - "$ref": "#/components/schemas/__type" - }, - "author": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "license": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "bugs": { - "$ref": "#/components/schemas/__type.o1" - }, - "homepage": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "devDependencies": { - "$ref": "#/components/schemas/Recordstringstring" - }, - "dependencies": { - "$ref": "#/components/schemas/Recordstringstring" - }, - "publishConfig": { - "$ref": "#/components/schemas/__type.o2" - }, - "main": { - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "typings": { - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "files": { - "x-typia-required": false, - "x-typia-optional": true, - "type": "array", - "items": { - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - } - } - }, - "nullable": false, - "required": [ - "name", - "version", - "description", - "scripts", - "repository", - "author", - "license", - "bugs", - "homepage", - "devDependencies", - "dependencies" - ], - "description": "NPM package information.", - "x-typia-jsDocTags": [] - }, - "Recordstringstring": { - "type": "object", - "properties": {}, - "nullable": false, - "description": "Construct a type with a set of properties K of type T", - "x-typia-jsDocTags": [], - "x-typia-additionalProperties": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "additionalProperties": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "__type": { - "type": "object", - "properties": { - "type": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "git" - ] - }, - "url": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "nullable": false, - "required": [ - "type", - "url" - ], - "x-typia-jsDocTags": [] - }, - "__type.o1": { - "type": "object", - "properties": { - "url": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "nullable": false, - "required": [ - "url" - ], - "x-typia-jsDocTags": [] - }, - "__type.o2": { - "type": "object", - "properties": { - "registry": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "nullable": false, - "required": [ - "registry" - ], - "x-typia-jsDocTags": [] - }, - "IPaymentSource.IAccessor": { - "type": "object", - "properties": { - "schema": { - "description": "DB 스키마 이름", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "table": { - "description": "DB 테이블 명", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "id": { - "description": "참조 레코드의 PK", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "uuid", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"uuid\">", - "kind": "format", - "value": "uuid", - "validate": "/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "password": { - "description": "레코드 조회를 위한 비밀번호 입력.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "nullable": false, - "required": [ - "schema", - "table", - "id", - "password" - ], - "description": "접근자 정보.\n\n`IPaymentSource.IAccessor` 는 {@link IPaymentHistory 결제 내역} 내지\n{@link IPaymentReservation 간편 결제 수단 정보}를 조회할 때, 그것의 고유 식별자\nID 가 아닌 원천 레코드 식별자 정보 {@link IPaymentSource } 를 통하여 조회할 때\n사용하는 접근자 정보이다.\n\n다만 `payments-server` 의 모든 개별 레코드는 이를 조회할 시 비밀번호가 필요하기에,\n{@link IPaymentSource } 의 속성들에 비밀번호가 하나 더 추가되었을 뿐이다.", - "x-typia-jsDocTags": [] - }, - "IPaymentHistory": { - "oneOf": [ - { - "$ref": "#/components/schemas/IPaymentHistory.IamportType" - }, - { - "$ref": "#/components/schemas/IPaymentHistory.TossType" - } - ], - "description": "결제 내역.\n\n`IPaymentHistory` 는 결제 내역을 형상화한 자료구조이자 유니언 타입의 인터페이이다.\n서비스 시스템으로부 결제 사건의 귀속 정보 ({@link IPaymentHistory.IStore.vendor } +\n{@link IPaymentHistory.IStore.source }) 를 전달받아, 본 Payment 시스템이 PG 사에\n추가 정보를 취득하여 레코드가 완성된다.\n\n그리고 만일 현 결제 건이 가상계좌와 같이 레코드 생성 시점에 지불이 이루어지지 않은\n경우라면, 사후 {@link IPaymentWebhook 웹훅 이벤트}를 통하여 지불 완료 시각을 뜻하는\n{@link paid_at } 가 설정될 수 있다. 그리고 반대로 이미 결제가 완료된 경우라도,\n환불 등의 이유로 인하여 {@link cancelled_at } 이 사후 기재될 수 있다.\n\n참고로 `if condition` 을 통하여 {@link IPaymentHistory.vendor_code } 값을 특정하면,\n파생 타입이 자동으로 다운 캐스팅 된다.\n\n```typescript\nif (history.vendor_code === \"toss.payments\")\n history.data.paymentKey; // history.data be ITossPayment\n```", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "IPaymentHistory.IamportType": { - "type": "object", - "properties": { - "id": { - "description": "Primary Key.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "uuid", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"uuid\">", - "kind": "format", - "value": "uuid", - "validate": "/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "vendor_code": { - "description": "벤더사 식별자 코드.\n\n{@link IPaymentVendor.code }와 완전히 동일한 값이되, 단지 union type\nspecialization 을 위해 중복 표기하였을 뿐이다. `if condition` 을 통하여\n{@link IPaymentHistory.data }의 타입을 특정할 수 있다.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "iamport" - ] - }, - "vendor": { - "$ref": "#/components/schemas/IPaymentVendoriamport" - }, - "source": { - "$ref": "#/components/schemas/IPaymentSource" - }, - "data": { - "$ref": "#/components/schemas/IIamportPayment" - }, - "currency": { - "description": "통화 단위\n\nKRW, USB, JPY 등.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "price": { - "description": "결제 가격.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number", - "minimum": 0, - "x-typia-typeTags": [ - { - "target": "number", - "name": "Minimum<0>", - "kind": "minimum", - "value": 0, - "validate": "0 <= $input", - "exclusive": [ - "minimum", - "exclusiveMinimum" - ] - } - ] - }, - "refund": { - "description": "결제 취소시의 환불 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number", - "minimum": 0, - "x-typia-typeTags": [ - { - "target": "number", - "name": "Minimum<0>", - "kind": "minimum", - "value": 0, - "validate": "0 <= $input", - "exclusive": [ - "minimum", - "exclusiveMinimum" - ] - } - ], - "nullable": true - }, - "webhook_url": { - "description": "결제 정보가 갱신되었을 때, 이를 수신할 URL", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "url", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"url\">", - "kind": "format", - "value": "url", - "validate": "/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ], - "nullable": true - }, - "created_at": { - "description": "결제 레코드 생성 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "paid_at": { - "description": "결제 완료 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ], - "nullable": true - }, - "cancelled_at": { - "description": "결제 취소 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ], - "nullable": true - }, - "cancels": { - "description": "결제 취소 내역 리스트.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "array", - "items": { - "$ref": "#/components/schemas/IPaymentCancelHistory" - } - } - }, - "nullable": false, - "required": [ - "id", - "vendor_code", - "vendor", - "source", - "data", - "currency", - "price", - "refund", - "webhook_url", - "created_at", - "paid_at", - "cancelled_at", - "cancels" - ], - "description": "아임포트로부터의 결제 내역.", - "x-typia-jsDocTags": [] - }, - "IPaymentVendoriamport": { - "type": "object", - "properties": { - "code": { - "description": "벤더사 식별자 코드.\n\n아임포트의 경우에는 `iamport` 를, 토스의 경우에는 `toss.payments` 를 적어주면 된다.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "iamport" - ] - }, - "store_id": { - "description": "벤더사에 등록한 스토어 ID.\n\n결제 PG 사들은 서비스 주소가 다르거나, 또는 동일한 서비스이되 연결되는 백엔드 서버\n주소가 다르거든, 각기 다른 스토어 계정을 신청해 사용하라고 한다. 이는 요즘같이 MSA\n(Micro Service Architecture) 가 대세인 시대에 매우 불합리한 방식이기는 하지만, 어쨋든\n이러한 이유로 인하여, 한 회사 내지 단체가 복수의 스토어 ID 를 가지는 경우가 왕왕\n있다.\n\n때문에 `payments-server` 는, {@link IPaymentHistory 결제 내역}을 발행하거나\n{@link IPaymentReservation 간편 결제 수단}을 등록할 때 모두, 사용된 스토어의 ID\n를 반드시 기재하도록 하고 있다.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "uid": { - "description": "벤더사로부터 발급받은 식별자 번호.\n\n결제 PG 사들이 제공하는 팝업창을 이용하여 결제를 진행하거나 혹은 간편 결제 수단을\n등록하거든, 결제 PG 사들은 해당 건에 대하여 별도의 식별자 번호를 발급한다.\n`IPaymentVendor.uid` 는 이처럼 결제 PG 사들이 발급해 준 식별자 번호를 기재하는\n속성이다.\n\n단 예외가 하나 있어, 아임포트는 간편 결제 카드 등록 건에 대하여 별도의 식별자 번호를\n부여하지 않고, 귀하의 서비스에서 발급해 준 ID 를 그대로 사용한다. 때문에 아임포트를\n통한 간편 결제 카드 등록의 건만 예외적으로, `IPaymentVendor.uid` 에\n{@link IPaymentSource.id } 를 동일하게 할당해주어야 한다.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "nullable": false, - "required": [ - "code", - "store_id", - "uid" - ], - "description": "벤더사 정보.\n\n`IPaymentVendor` 결제 PG 벤더사에 관련된 정보를 형상화한 자료구조 인터페이스이다.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "IPaymentSource": { - "type": "object", - "properties": { - "schema": { - "description": "DB 스키마 이름", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "table": { - "description": "DB 테이블 명", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "id": { - "description": "참조 레코드의 PK", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "uuid", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"uuid\">", - "kind": "format", - "value": "uuid", - "validate": "/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - } - }, - "nullable": false, - "required": [ - "schema", - "table", - "id" - ], - "description": "원천 레코드 참조 정보.\n\n`IPaymentSource` 는 {@link IPaymentHistory 결제 내역} 및\n{@link IPaymentResrvation 간편 결제 수단}의 원천이 되는 레코드의 참조 정보를 형상화한\n자료구조 인터페이이다. 만일 대상이 {@link IPaymentHistory 결제 내역}이라면 결제의\n근원이 되는 주문에 대한 참조 정보를, 대상이 {@link IPaymentResrvation 간편 결제 수단}\n이라면 이를 기록한 귀사 서비스의 참조 정보를 기입하면 된다.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "IIamportPayment": { - "oneOf": [ - { - "$ref": "#/components/schemas/IIamportCardPayment" - }, - { - "$ref": "#/components/schemas/IIamportTransferPayment" - }, - { - "$ref": "#/components/schemas/IIamportVBankPayment" - }, - { - "$ref": "#/components/schemas/IIamportPayment.IBasephonekpaykakaopaypaycolpayssgpaytosspayculturelandsmartculturehappymoneybooknlifepoint" - } - ], - "description": "결제 정보.\n\n`IIamportPayment` 는 아임포트의 결제 정보를 형상화한 자료구조이자 유니언 타입의\n인터페이스로써, if condition 을 통하여 method 값을 특정하면, 파생 타입이 자동으로\n지정된다.\n\n```typescript\nif (payment.pay_method === \"card\")\n payment.card_number; // payment be IIamportCardPayment\n```", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "IIamportCardPayment": { - "type": "object", - "properties": { - "card_code": { - "description": "카드 식별자 코드.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "card_name": { - "description": "카드 이름.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "card_number": { - "description": "카드 번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "pattern": "\\d{4}-\\d{4}-\\d{4}-\\d{4}", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Pattern<\"\\\\d{4}-\\\\d{4}-\\\\d{4}-\\\\d{4}\">", - "kind": "pattern", - "value": "\\d{4}-\\d{4}-\\d{4}-\\d{4}", - "validate": "/\\d{4}-\\d{4}-\\d{4}-\\d{4}/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "card_quota": { - "description": "할부 개월 수.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "integer", - "x-typia-typeTags": [ - { - "target": "number", - "name": "Type<\"uint32\">", - "kind": "type", - "value": "uint32", - "validate": "Math.floor($input) === $input && 0 <= $input && $input <= 4294967295", - "exclusive": true - } - ] - }, - "apply_num": { - "description": "카드사 승인번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "pay_method": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "card", - "samsung" - ] - }, - "imp_uid": { - "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "merchant_uid": { - "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "name": { - "description": "주문명, 누락 가능.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "amount": { - "description": "결제 총액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "cancel_amount": { - "description": "결제 취소, 환불 총액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "currency": { - "$ref": "#/components/schemas/IIamportPayment.Currency" - }, - "receipt_url": { - "description": "영수증 URL.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "url", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"url\">", - "kind": "format", - "value": "url", - "validate": "/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "cash_receipt_issue": { - "description": "현금 영수증 발행 여부.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "channel": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "pg_provider": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "emb_pg_provider": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "pg_id": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "pg_tid": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "escrow": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "buyer_name": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "buyer_email": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "email", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"email\">", - "kind": "format", - "value": "email", - "validate": "/^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ], - "nullable": true - }, - "buyer_tel": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "buyer_addr": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "buyer_postcode": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "customer_uid": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "customer_uid_usage": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "custom_data": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "user_agent": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "status": { - "$ref": "#/components/schemas/IIamportPayment.Status" - }, - "started_at": { - "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "paid_at": { - "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "failed_at": { - "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "cancelled_at": { - "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "fail_reason": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "cancel_reason": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "cancel_history": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "array", - "items": { - "$ref": "#/components/schemas/IIamportPaymentCancel" - } - } - }, - "nullable": false, - "required": [ - "card_code", - "card_name", - "card_number", - "card_quota", - "apply_num", - "pay_method", - "imp_uid", - "merchant_uid", - "name", - "amount", - "cancel_amount", - "currency", - "receipt_url", - "cash_receipt_issue", - "channel", - "pg_provider", - "emb_pg_provider", - "pg_id", - "pg_tid", - "escrow", - "buyer_name", - "buyer_email", - "buyer_tel", - "buyer_addr", - "buyer_postcode", - "customer_uid", - "customer_uid_usage", - "custom_data", - "user_agent", - "status", - "started_at", - "paid_at", - "failed_at", - "cancelled_at", - "fail_reason", - "cancel_reason", - "cancel_history" - ], - "description": "카드 결제 정보.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "IIamportPayment.Currency": { - "type": "string", - "enum": [ - "KRW", - "USD", - "EUR", - "JPY" - ] - }, - "IIamportPayment.Status": { - "type": "string", - "enum": [ - "paid", - "ready", - "failed", - "cancelled" - ] - }, - "IIamportPaymentCancel": { - "type": "object", - "properties": { - "pg_id": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "pg_tid": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "amount": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "cancelled_at": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "reason": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "receipt_url": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "url", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"url\">", - "kind": "format", - "value": "url", - "validate": "/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - } - }, - "nullable": false, - "required": [ - "pg_id", - "pg_tid", - "amount", - "cancelled_at", - "reason", - "receipt_url" - ], - "description": "결제 취소 정보.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "IIamportTransferPayment": { - "type": "object", - "properties": { - "bank_code": { - "description": "은행 식별자 코드.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "bank_name": { - "description": "은행 이름.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "pay_method": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "trans" - ] - }, - "imp_uid": { - "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "merchant_uid": { - "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "name": { - "description": "주문명, 누락 가능.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "amount": { - "description": "결제 총액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "cancel_amount": { - "description": "결제 취소, 환불 총액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "currency": { - "$ref": "#/components/schemas/IIamportPayment.Currency" - }, - "receipt_url": { - "description": "영수증 URL.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "url", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"url\">", - "kind": "format", - "value": "url", - "validate": "/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "cash_receipt_issue": { - "description": "현금 영수증 발행 여부.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "channel": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "pg_provider": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "emb_pg_provider": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "pg_id": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "pg_tid": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "escrow": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "buyer_name": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "buyer_email": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "email", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"email\">", - "kind": "format", - "value": "email", - "validate": "/^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ], - "nullable": true - }, - "buyer_tel": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "buyer_addr": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "buyer_postcode": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "customer_uid": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "customer_uid_usage": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "custom_data": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "user_agent": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "status": { - "$ref": "#/components/schemas/IIamportPayment.Status" - }, - "started_at": { - "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "paid_at": { - "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "failed_at": { - "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "cancelled_at": { - "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "fail_reason": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "cancel_reason": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "cancel_history": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "array", - "items": { - "$ref": "#/components/schemas/IIamportPaymentCancel" - } - } - }, - "nullable": false, - "required": [ - "bank_code", - "bank_name", - "pay_method", - "imp_uid", - "merchant_uid", - "name", - "amount", - "cancel_amount", - "currency", - "receipt_url", - "cash_receipt_issue", - "channel", - "pg_provider", - "emb_pg_provider", - "pg_id", - "pg_tid", - "escrow", - "buyer_name", - "buyer_email", - "buyer_tel", - "buyer_addr", - "buyer_postcode", - "customer_uid", - "customer_uid_usage", - "custom_data", - "user_agent", - "status", - "started_at", - "paid_at", - "failed_at", - "cancelled_at", - "fail_reason", - "cancel_reason", - "cancel_history" - ], - "description": "계좌 이체 결제 정보.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "IIamportVBankPayment": { - "type": "object", - "properties": { - "vbank_code": { - "description": "가상 계좌 식별자 코드.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "vbank_name": { - "description": "가상 게좌 이름", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "vbank_num": { - "description": "가상 계좌 번호", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "vbank_holder": { - "description": "가상 계좌 예금주.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "vbank_date": { - "description": "가상 계좌 입금 만료 기한.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "vbank_issued_at": { - "description": "가상 계좌 개설 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "pay_method": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "vbank" - ] - }, - "imp_uid": { - "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "merchant_uid": { - "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "name": { - "description": "주문명, 누락 가능.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "amount": { - "description": "결제 총액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "cancel_amount": { - "description": "결제 취소, 환불 총액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "currency": { - "$ref": "#/components/schemas/IIamportPayment.Currency" - }, - "receipt_url": { - "description": "영수증 URL.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "url", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"url\">", - "kind": "format", - "value": "url", - "validate": "/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "cash_receipt_issue": { - "description": "현금 영수증 발행 여부.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "channel": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "pg_provider": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "emb_pg_provider": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "pg_id": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "pg_tid": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "escrow": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "buyer_name": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "buyer_email": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "email", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"email\">", - "kind": "format", - "value": "email", - "validate": "/^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ], - "nullable": true - }, - "buyer_tel": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "buyer_addr": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "buyer_postcode": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "customer_uid": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "customer_uid_usage": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "custom_data": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "user_agent": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "status": { - "$ref": "#/components/schemas/IIamportPayment.Status" - }, - "started_at": { - "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "paid_at": { - "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "failed_at": { - "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "cancelled_at": { - "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "fail_reason": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "cancel_reason": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "cancel_history": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "array", - "items": { - "$ref": "#/components/schemas/IIamportPaymentCancel" - } - } - }, - "nullable": false, - "required": [ - "vbank_code", - "vbank_name", - "vbank_num", - "vbank_holder", - "vbank_date", - "vbank_issued_at", - "pay_method", - "imp_uid", - "merchant_uid", - "name", - "amount", - "cancel_amount", - "currency", - "receipt_url", - "cash_receipt_issue", - "channel", - "pg_provider", - "emb_pg_provider", - "pg_id", - "pg_tid", - "escrow", - "buyer_name", - "buyer_email", - "buyer_tel", - "buyer_addr", - "buyer_postcode", - "customer_uid", - "customer_uid_usage", - "custom_data", - "user_agent", - "status", - "started_at", - "paid_at", - "failed_at", - "cancelled_at", - "fail_reason", - "cancel_reason", - "cancel_history" - ], - "description": "가상 계좌 결제 정보.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "IIamportPayment.IBasephonekpaykakaopaypaycolpayssgpaytosspayculturelandsmartculturehappymoneybooknlifepoint": { - "type": "object", - "properties": { - "pay_method": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "phone", - "kpay", - "kakaopay", - "payco", - "lpay", - "ssgpay", - "tosspay", - "cultureland", - "smartculture", - "happymoney", - "booknlife", - "point" - ] - }, - "imp_uid": { - "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "merchant_uid": { - "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "name": { - "description": "주문명, 누락 가능.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "amount": { - "description": "결제 총액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "cancel_amount": { - "description": "결제 취소, 환불 총액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "currency": { - "$ref": "#/components/schemas/IIamportPayment.Currency" - }, - "receipt_url": { - "description": "영수증 URL.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "url", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"url\">", - "kind": "format", - "value": "url", - "validate": "/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "cash_receipt_issue": { - "description": "현금 영수증 발행 여부.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "channel": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "pg_provider": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "emb_pg_provider": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "pg_id": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "pg_tid": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "escrow": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "buyer_name": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "buyer_email": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "email", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"email\">", - "kind": "format", - "value": "email", - "validate": "/^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ], - "nullable": true - }, - "buyer_tel": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "buyer_addr": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "buyer_postcode": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "customer_uid": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "customer_uid_usage": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "custom_data": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "user_agent": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "status": { - "$ref": "#/components/schemas/IIamportPayment.Status" - }, - "started_at": { - "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "paid_at": { - "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "failed_at": { - "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "cancelled_at": { - "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "fail_reason": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "cancel_reason": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "cancel_history": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "array", - "items": { - "$ref": "#/components/schemas/IIamportPaymentCancel" - } - } - }, - "nullable": false, - "required": [ - "pay_method", - "imp_uid", - "merchant_uid", - "name", - "amount", - "cancel_amount", - "currency", - "receipt_url", - "cash_receipt_issue", - "channel", - "pg_provider", - "emb_pg_provider", - "pg_id", - "pg_tid", - "escrow", - "buyer_name", - "buyer_email", - "buyer_tel", - "buyer_addr", - "buyer_postcode", - "customer_uid", - "customer_uid_usage", - "custom_data", - "user_agent", - "status", - "started_at", - "paid_at", - "failed_at", - "cancelled_at", - "fail_reason", - "cancel_reason", - "cancel_history" - ], - "description": "결제 기본 (공통) 정보.", - "x-typia-jsDocTags": [] - }, - "IPaymentCancelHistory": { - "type": "object", - "properties": { - "reason": { - "description": "결제 취소 사유.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "price": { - "description": "환불 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number", - "minimum": 0, - "x-typia-typeTags": [ - { - "target": "number", - "name": "Minimum<0>", - "kind": "minimum", - "value": 0, - "validate": "0 <= $input", - "exclusive": [ - "minimum", - "exclusiveMinimum" - ] - } - ] - }, - "created_at": { - "description": "레코드 생성 일시.\n\n즉, 결제 취소가 발생한 시각.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ] - } - }, - "nullable": false, - "required": [ - "reason", - "price", - "created_at" - ], - "description": "결제 취소 내역.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "IPaymentHistory.TossType": { - "type": "object", - "properties": { - "id": { - "description": "Primary Key.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "uuid", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"uuid\">", - "kind": "format", - "value": "uuid", - "validate": "/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "vendor_code": { - "description": "벤더사 식별자 코드.\n\n{@link IPaymentVendor.code }와 완전히 동일한 값이되, 단지 union type\nspecialization 을 위해 중복 표기하였을 뿐이다. `if condition` 을 통하여\n{@link IPaymentHistory.data }의 타입을 특정할 수 있다.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "toss.payments" - ] - }, - "vendor": { - "$ref": "#/components/schemas/IPaymentVendortoss.payments" - }, - "source": { - "$ref": "#/components/schemas/IPaymentSource" - }, - "data": { - "$ref": "#/components/schemas/ITossPayment" - }, - "currency": { - "description": "통화 단위\n\nKRW, USB, JPY 등.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "price": { - "description": "결제 가격.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number", - "minimum": 0, - "x-typia-typeTags": [ - { - "target": "number", - "name": "Minimum<0>", - "kind": "minimum", - "value": 0, - "validate": "0 <= $input", - "exclusive": [ - "minimum", - "exclusiveMinimum" - ] - } - ] - }, - "refund": { - "description": "결제 취소시의 환불 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number", - "minimum": 0, - "x-typia-typeTags": [ - { - "target": "number", - "name": "Minimum<0>", - "kind": "minimum", - "value": 0, - "validate": "0 <= $input", - "exclusive": [ - "minimum", - "exclusiveMinimum" - ] - } - ], - "nullable": true - }, - "webhook_url": { - "description": "결제 정보가 갱신되었을 때, 이를 수신할 URL", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "url", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"url\">", - "kind": "format", - "value": "url", - "validate": "/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ], - "nullable": true - }, - "created_at": { - "description": "결제 레코드 생성 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "paid_at": { - "description": "결제 완료 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ], - "nullable": true - }, - "cancelled_at": { - "description": "결제 취소 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ], - "nullable": true - }, - "cancels": { - "description": "결제 취소 내역 리스트.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "array", - "items": { - "$ref": "#/components/schemas/IPaymentCancelHistory" - } - } - }, - "nullable": false, - "required": [ - "id", - "vendor_code", - "vendor", - "source", - "data", - "currency", - "price", - "refund", - "webhook_url", - "created_at", - "paid_at", - "cancelled_at", - "cancels" - ], - "description": "토스 페이먼츠로부터의 결제 내역.", - "x-typia-jsDocTags": [] - }, - "IPaymentVendortoss.payments": { - "type": "object", - "properties": { - "code": { - "description": "벤더사 식별자 코드.\n\n아임포트의 경우에는 `iamport` 를, 토스의 경우에는 `toss.payments` 를 적어주면 된다.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "toss.payments" - ] - }, - "store_id": { - "description": "벤더사에 등록한 스토어 ID.\n\n결제 PG 사들은 서비스 주소가 다르거나, 또는 동일한 서비스이되 연결되는 백엔드 서버\n주소가 다르거든, 각기 다른 스토어 계정을 신청해 사용하라고 한다. 이는 요즘같이 MSA\n(Micro Service Architecture) 가 대세인 시대에 매우 불합리한 방식이기는 하지만, 어쨋든\n이러한 이유로 인하여, 한 회사 내지 단체가 복수의 스토어 ID 를 가지는 경우가 왕왕\n있다.\n\n때문에 `payments-server` 는, {@link IPaymentHistory 결제 내역}을 발행하거나\n{@link IPaymentReservation 간편 결제 수단}을 등록할 때 모두, 사용된 스토어의 ID\n를 반드시 기재하도록 하고 있다.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "uid": { - "description": "벤더사로부터 발급받은 식별자 번호.\n\n결제 PG 사들이 제공하는 팝업창을 이용하여 결제를 진행하거나 혹은 간편 결제 수단을\n등록하거든, 결제 PG 사들은 해당 건에 대하여 별도의 식별자 번호를 발급한다.\n`IPaymentVendor.uid` 는 이처럼 결제 PG 사들이 발급해 준 식별자 번호를 기재하는\n속성이다.\n\n단 예외가 하나 있어, 아임포트는 간편 결제 카드 등록 건에 대하여 별도의 식별자 번호를\n부여하지 않고, 귀하의 서비스에서 발급해 준 ID 를 그대로 사용한다. 때문에 아임포트를\n통한 간편 결제 카드 등록의 건만 예외적으로, `IPaymentVendor.uid` 에\n{@link IPaymentSource.id } 를 동일하게 할당해주어야 한다.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "nullable": false, - "required": [ - "code", - "store_id", - "uid" - ], - "description": "벤더사 정보.\n\n`IPaymentVendor` 결제 PG 벤더사에 관련된 정보를 형상화한 자료구조 인터페이스이다.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "ITossPayment": { - "oneOf": [ - { - "$ref": "#/components/schemas/ITossCardPayment" - }, - { - "$ref": "#/components/schemas/ITossGiftCertificatePayment" - }, - { - "$ref": "#/components/schemas/ITossMobilePhonePayment" - }, - { - "$ref": "#/components/schemas/ITossTransferPayment" - }, - { - "$ref": "#/components/schemas/ITossVirtualAccountPayment" - } - ], - "description": "결제 정보.\n\n`ITossPayment` 는 토스 페이먼츠의 결제 정보를 형상화한 자료구조이자 유니언 타입의\n인터페이스로써, if condition 을 통하여 method 값을 특정하면, 파생 타입이 자동으로\n지정된다.\n\n```typescript\nif (payment.method === \"카드\")\n payment.card; // payment be ITossCardPayment\n```", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "ITossCardPayment": { - "type": "object", - "properties": { - "card": { - "$ref": "#/components/schemas/ITossCardPayment.ICard" - }, - "discount": { - "$ref": "#/components/schemas/ITossCardPayment.IDiscount.Nullable" - }, - "easyPay": { - "description": "간편결제로 결제한 경우 간편결제 타입 정보.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "토스결제", - "페이코", - "삼성페이" - ], - "nullable": true - }, - "method": { - "description": "결제 수단.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "카드" - ] - }, - "type": { - "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "NORMAL", - "BILLING" - ] - }, - "status": { - "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "READY", - "IN_PROGRESS", - "WAITING_FOR_DEPOSIT", - "DONE", - "CANCELED", - "PARTIAL_CANCELED", - "ABORTED", - "EXPIRED" - ] - }, - "mId": { - "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "version": { - "description": "사용 중인 토스 페이먼츠 API 의 버전.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "paymentKey": { - "description": "결제 내역의 식별자 번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "orderId": { - "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "transactionKey": { - "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "orderName": { - "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "currency": { - "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "totalAmount": { - "description": "총 결제 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "balanceAmount": { - "description": "취소할 수 있는 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "suppliedAmount": { - "description": "공급가액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "taxFreeAmount": { - "description": "면세액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "vat": { - "description": "부가세.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "useEscrow": { - "description": "에스크로 사용 여부.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "cultureExpense": { - "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "requestedAt": { - "description": "결제 요청 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "approvedAt": { - "description": "결제 승인 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ], - "nullable": true - }, - "cancels": { - "description": "결제 취소 내역.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "array", - "items": { - "$ref": "#/components/schemas/ITossPaymentCancel" - }, - "nullable": true - }, - "cashReceipt": { - "$ref": "#/components/schemas/ITossCashReceipt.ISummary.Nullable" - } - }, - "nullable": false, - "required": [ - "card", - "discount", - "easyPay", - "method", - "type", - "status", - "mId", - "version", - "paymentKey", - "orderId", - "transactionKey", - "orderName", - "currency", - "totalAmount", - "balanceAmount", - "suppliedAmount", - "taxFreeAmount", - "vat", - "useEscrow", - "cultureExpense", - "requestedAt", - "approvedAt", - "cancels", - "cashReceipt" - ], - "description": "카드 결제 정보.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "ITossCardPayment.ICard": { - "type": "object", - "properties": { - "company": { - "description": "카드사 이름.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "number": { - "description": "카드 번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "pattern": "[0-9]{16}", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Pattern<\"[0-9]{16}\">", - "kind": "pattern", - "value": "[0-9]{16}", - "validate": "/[0-9]{16}/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "installmentPlanMonths": { - "description": "할부 개월 수.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "isInterestFree": { - "description": "무이자 할부 적용 여부.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "approveNo": { - "description": "승인 번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "useCardPoint": { - "description": "카드 포인트 사용 여부.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean", - "enum": [ - false - ] - }, - "cardType": { - "description": "카드 타입.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "신용", - "체크", - "기프트" - ] - }, - "ownerType": { - "description": "카드의 소유자 타입.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "개인", - "법인" - ] - }, - "acquireStatus": { - "description": "카드 결제의 매입 상태.\n\n - READY: 매입 대기\n - REQUESTED: 매입 요청됨\n - COMPLETED: 매입 완료\n - CANCEL_REQUESTED: 매입 취소 요청됨\n - CANCELD: 매입 취소됨", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "READY", - "CANCELED", - "REQUESTED", - "COMPLETED", - "CANCEL_REQUESTED" - ] - }, - "receiptUrl": { - "description": "영수증 URL.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "url", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"url\">", - "kind": "format", - "value": "url", - "validate": "/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - } - }, - "nullable": false, - "required": [ - "company", - "number", - "installmentPlanMonths", - "isInterestFree", - "approveNo", - "useCardPoint", - "cardType", - "ownerType", - "acquireStatus", - "receiptUrl" - ], - "description": "카드 정보.", - "x-typia-jsDocTags": [] - }, - "ITossCardPayment.IDiscount.Nullable": { - "type": "object", - "properties": { - "amount": { - "description": "카드사의 즉시 할인 프로모션을 적용한 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - } - }, - "nullable": true, - "required": [ - "amount" - ], - "description": "카드사의 즉시 할인 프로모션 정보.", - "x-typia-jsDocTags": [] - }, - "ITossPaymentCancel": { - "type": "object", - "properties": { - "cancelAmount": { - "description": "취소 총액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "cancelReason": { - "description": "취소 사유.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "taxFreeAmount": { - "description": "면세 처리된 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "taxAmount": { - "description": "과세 처리된 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "refundableAmount": { - "description": "결제 취소 후 환불 가능 잔액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "canceledAt": { - "description": "취소 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ] - } - }, - "nullable": false, - "required": [ - "cancelAmount", - "cancelReason", - "taxFreeAmount", - "taxAmount", - "refundableAmount", - "canceledAt" - ], - "description": "결제 취소 정보.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "ITossCashReceipt.ISummary.Nullable": { - "type": "object", - "properties": { - "type": { - "$ref": "#/components/schemas/ITossCashReceipt.Type" - }, - "amount": { - "description": "현금 영수증 처리된 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "taxFreeAmount": { - "description": "면세 처리된 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "issueNumber": { - "description": "현금영수증 발급번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "receiptUrl": { - "description": "현금영수증 조회 페이지 주소.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "nullable": true, - "required": [ - "type", - "amount", - "taxFreeAmount", - "issueNumber", - "receiptUrl" - ], - "description": "현금 영수증 요약 정보.", - "x-typia-jsDocTags": [] - }, - "ITossCashReceipt.Type": { - "description": "현금 영수증의 종류.", - "type": "string", - "enum": [ - "소득공제", - "지출증빙" - ] - }, - "ITossGiftCertificatePayment": { - "type": "object", - "properties": { - "giftCertificate": { - "$ref": "#/components/schemas/ITossGiftCertificatePayment.IGiftCertificate" - }, - "method": { - "description": "결제 수단.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "상품권" - ] - }, - "type": { - "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "NORMAL" - ] - }, - "status": { - "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "READY", - "IN_PROGRESS", - "WAITING_FOR_DEPOSIT", - "DONE", - "CANCELED", - "PARTIAL_CANCELED", - "ABORTED", - "EXPIRED" - ] - }, - "mId": { - "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "version": { - "description": "사용 중인 토스 페이먼츠 API 의 버전.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "paymentKey": { - "description": "결제 내역의 식별자 번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "orderId": { - "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "transactionKey": { - "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "orderName": { - "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "currency": { - "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "totalAmount": { - "description": "총 결제 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "balanceAmount": { - "description": "취소할 수 있는 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "suppliedAmount": { - "description": "공급가액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "taxFreeAmount": { - "description": "면세액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "vat": { - "description": "부가세.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "useEscrow": { - "description": "에스크로 사용 여부.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "cultureExpense": { - "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "requestedAt": { - "description": "결제 요청 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "approvedAt": { - "description": "결제 승인 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ], - "nullable": true - }, - "cancels": { - "description": "결제 취소 내역.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "array", - "items": { - "$ref": "#/components/schemas/ITossPaymentCancel" - }, - "nullable": true - }, - "cashReceipt": { - "$ref": "#/components/schemas/ITossCashReceipt.ISummary.Nullable" - } - }, - "nullable": false, - "required": [ - "giftCertificate", - "method", - "type", - "status", - "mId", - "version", - "paymentKey", - "orderId", - "transactionKey", - "orderName", - "currency", - "totalAmount", - "balanceAmount", - "suppliedAmount", - "taxFreeAmount", - "vat", - "useEscrow", - "cultureExpense", - "requestedAt", - "approvedAt", - "cancels", - "cashReceipt" - ], - "description": "상품권 결제 정보.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "ITossGiftCertificatePayment.IGiftCertificate": { - "type": "object", - "properties": { - "approveNo": { - "description": "승인 번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "settlementStatus": { - "description": "정산 상태.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "COMPLETE", - "INCOMPLETE" - ] - } - }, - "nullable": false, - "required": [ - "approveNo", - "settlementStatus" - ], - "description": "상품권 정보.", - "x-typia-jsDocTags": [] - }, - "ITossMobilePhonePayment": { - "type": "object", - "properties": { - "mobilePhone": { - "$ref": "#/components/schemas/ITossMobilePhonePayment.IMobilePhone" - }, - "method": { - "description": "결제 수단.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "휴대폰" - ] - }, - "type": { - "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "NORMAL" - ] - }, - "status": { - "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "READY", - "IN_PROGRESS", - "WAITING_FOR_DEPOSIT", - "DONE", - "CANCELED", - "PARTIAL_CANCELED", - "ABORTED", - "EXPIRED" - ] - }, - "mId": { - "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "version": { - "description": "사용 중인 토스 페이먼츠 API 의 버전.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "paymentKey": { - "description": "결제 내역의 식별자 번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "orderId": { - "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "transactionKey": { - "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "orderName": { - "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "currency": { - "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "totalAmount": { - "description": "총 결제 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "balanceAmount": { - "description": "취소할 수 있는 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "suppliedAmount": { - "description": "공급가액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "taxFreeAmount": { - "description": "면세액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "vat": { - "description": "부가세.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "useEscrow": { - "description": "에스크로 사용 여부.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "cultureExpense": { - "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "requestedAt": { - "description": "결제 요청 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "approvedAt": { - "description": "결제 승인 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ], - "nullable": true - }, - "cancels": { - "description": "결제 취소 내역.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "array", - "items": { - "$ref": "#/components/schemas/ITossPaymentCancel" - }, - "nullable": true - }, - "cashReceipt": { - "$ref": "#/components/schemas/ITossCashReceipt.ISummary.Nullable" - } - }, - "nullable": false, - "required": [ - "mobilePhone", - "method", - "type", - "status", - "mId", - "version", - "paymentKey", - "orderId", - "transactionKey", - "orderName", - "currency", - "totalAmount", - "balanceAmount", - "suppliedAmount", - "taxFreeAmount", - "vat", - "useEscrow", - "cultureExpense", - "requestedAt", - "approvedAt", - "cancels", - "cashReceipt" - ], - "description": "휴대폰 결제 정보.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "ITossMobilePhonePayment.IMobilePhone": { - "type": "object", - "properties": { - "carrier": { - "description": "통신사.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "customerMobilePhone": { - "description": "고객 휴대폰 번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "settlementStatus": { - "description": "정산 상태.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "COMPLETED", - "INCOMPLETED" - ] - } - }, - "nullable": false, - "required": [ - "carrier", - "customerMobilePhone", - "settlementStatus" - ], - "description": "휴대폰 정보.", - "x-typia-jsDocTags": [] - }, - "ITossTransferPayment": { - "type": "object", - "properties": { - "transfer": { - "$ref": "#/components/schemas/ITossTransferPayment.ITransfer" - }, - "method": { - "description": "결제 수단.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "계좌이체" - ] - }, - "type": { - "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "NORMAL" - ] - }, - "status": { - "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "READY", - "IN_PROGRESS", - "WAITING_FOR_DEPOSIT", - "DONE", - "CANCELED", - "PARTIAL_CANCELED", - "ABORTED", - "EXPIRED" - ] - }, - "mId": { - "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "version": { - "description": "사용 중인 토스 페이먼츠 API 의 버전.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "paymentKey": { - "description": "결제 내역의 식별자 번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "orderId": { - "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "transactionKey": { - "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "orderName": { - "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "currency": { - "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "totalAmount": { - "description": "총 결제 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "balanceAmount": { - "description": "취소할 수 있는 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "suppliedAmount": { - "description": "공급가액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "taxFreeAmount": { - "description": "면세액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "vat": { - "description": "부가세.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "useEscrow": { - "description": "에스크로 사용 여부.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "cultureExpense": { - "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "requestedAt": { - "description": "결제 요청 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "approvedAt": { - "description": "결제 승인 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ], - "nullable": true - }, - "cancels": { - "description": "결제 취소 내역.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "array", - "items": { - "$ref": "#/components/schemas/ITossPaymentCancel" - }, - "nullable": true - }, - "cashReceipt": { - "$ref": "#/components/schemas/ITossCashReceipt.ISummary.Nullable" - } - }, - "nullable": false, - "required": [ - "transfer", - "method", - "type", - "status", - "mId", - "version", - "paymentKey", - "orderId", - "transactionKey", - "orderName", - "currency", - "totalAmount", - "balanceAmount", - "suppliedAmount", - "taxFreeAmount", - "vat", - "useEscrow", - "cultureExpense", - "requestedAt", - "approvedAt", - "cancels", - "cashReceipt" - ], - "description": "계좌 이체 결제 정보.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "ITossTransferPayment.ITransfer": { - "type": "object", - "properties": { - "bank": { - "description": "은행명.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "settlementStatus": { - "description": "이체 상태.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "COMPLETED", - "INCOMPLETED" - ] - } - }, - "nullable": false, - "required": [ - "bank", - "settlementStatus" - ], - "description": "계좌 이체 정보.", - "x-typia-jsDocTags": [] - }, - "ITossVirtualAccountPayment": { - "type": "object", - "properties": { - "secret": { - "description": "가상 계좌로 결제할 때 전달되는 입금 콜백을 검증하기 위한 값.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "virtualAccount": { - "$ref": "#/components/schemas/ITossVirtualAccountPayment.IVirtualAccount" - }, - "method": { - "description": "결제 수단.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "가상계좌" - ] - }, - "type": { - "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "NORMAL" - ] - }, - "status": { - "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "READY", - "IN_PROGRESS", - "WAITING_FOR_DEPOSIT", - "DONE", - "CANCELED", - "PARTIAL_CANCELED", - "ABORTED", - "EXPIRED" - ] - }, - "mId": { - "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "version": { - "description": "사용 중인 토스 페이먼츠 API 의 버전.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "paymentKey": { - "description": "결제 내역의 식별자 번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "orderId": { - "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "transactionKey": { - "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "orderName": { - "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "currency": { - "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "totalAmount": { - "description": "총 결제 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "balanceAmount": { - "description": "취소할 수 있는 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "suppliedAmount": { - "description": "공급가액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "taxFreeAmount": { - "description": "면세액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "vat": { - "description": "부가세.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "useEscrow": { - "description": "에스크로 사용 여부.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "cultureExpense": { - "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "requestedAt": { - "description": "결제 요청 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "approvedAt": { - "description": "결제 승인 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ], - "nullable": true - }, - "cancels": { - "description": "결제 취소 내역.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "array", - "items": { - "$ref": "#/components/schemas/ITossPaymentCancel" - }, - "nullable": true - }, - "cashReceipt": { - "$ref": "#/components/schemas/ITossCashReceipt.ISummary.Nullable" - } - }, - "nullable": false, - "required": [ - "secret", - "virtualAccount", - "method", - "type", - "status", - "mId", - "version", - "paymentKey", - "orderId", - "transactionKey", - "orderName", - "currency", - "totalAmount", - "balanceAmount", - "suppliedAmount", - "taxFreeAmount", - "vat", - "useEscrow", - "cultureExpense", - "requestedAt", - "approvedAt", - "cancels", - "cashReceipt" - ], - "description": "가상 계좌 결제 정보.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "ITossVirtualAccountPayment.IVirtualAccount": { - "type": "object", - "properties": { - "accountNumber": { - "description": "계좌 번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "accountType": { - "description": "가상 계좌 타입.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "일반", - "고정" - ] - }, - "bank": { - "description": "은행명.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "customerName": { - "description": "고객 이름.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "dueDate": { - "description": "입금 기한.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date\">", - "kind": "format", - "value": "date", - "validate": "/^(\\d{4})-(\\d{2})-(\\d{2})$/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "expired": { - "description": "가상 계좌 만료 여부.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "settlementStatus": { - "description": "정산 상태.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "COMPLETED", - "INCOMPLETED" - ] - }, - "refundStatus": { - "description": "환불 처리 상태.\n\n - NONE: 해당 없음\n - FAILED: 환불 실패\n - PENDING: 환불 처리중\n - PARTIAL_FAILED: 부분 환불 실패\n - COMPLETED: 환불 완료", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "COMPLETED", - "NONE", - "FAILED", - "PENDING", - "PARTIAL_FAILED" - ] - } - }, - "nullable": false, - "required": [ - "accountNumber", - "accountType", - "bank", - "customerName", - "dueDate", - "expired", - "settlementStatus", - "refundStatus" - ], - "description": "가상 계좌 정보.", - "x-typia-jsDocTags": [] - }, - "IPaymentSource.IPassword": { - "type": "object", - "properties": { - "password": { - "description": "레코드 조회를 위한 비밀번호 입력.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "nullable": false, - "required": [ - "password" - ], - "description": "비밀번호 입력 정보.", - "x-typia-jsDocTags": [] - }, - "IPaymentHistory.IStore": { - "type": "object", - "properties": { - "vendor": { - "$ref": "#/components/schemas/IPaymentVendoriamporttoss.payments" - }, - "source": { - "$ref": "#/components/schemas/IPaymentSource" - }, - "price": { - "description": "결제되어야 할 총액.\n\n실 결제금액과 비교하여 이와 다를 시, 422 에러가 리턴됨.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number", - "minimum": 0, - "x-typia-typeTags": [ - { - "target": "number", - "name": "Minimum<0>", - "kind": "minimum", - "value": 0, - "validate": "0 <= $input", - "exclusive": [ - "minimum", - "exclusiveMinimum" - ] - } - ] - }, - "password": { - "description": "레코드 열람에 사용할 비밀번호 설정.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "webhook_url": { - "description": "결제 정보가 갱신되었을 때, 이를 수신할 URL", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "url", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"url\">", - "kind": "format", - "value": "url", - "validate": "/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - } - }, - "nullable": false, - "required": [ - "vendor", - "source", - "price", - "password", - "webhook_url" - ], - "description": "결제 입력 정보.\n\nSDK 에서 받은 데이터를 취합하여 결제 진행 상황을 서버에 알려준다.", - "x-typia-jsDocTags": [] - }, - "IPaymentVendoriamporttoss.payments": { - "type": "object", - "properties": { - "code": { - "description": "벤더사 식별자 코드.\n\n아임포트의 경우에는 `iamport` 를, 토스의 경우에는 `toss.payments` 를 적어주면 된다.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "iamport", - "toss.payments" - ] - }, - "store_id": { - "description": "벤더사에 등록한 스토어 ID.\n\n결제 PG 사들은 서비스 주소가 다르거나, 또는 동일한 서비스이되 연결되는 백엔드 서버\n주소가 다르거든, 각기 다른 스토어 계정을 신청해 사용하라고 한다. 이는 요즘같이 MSA\n(Micro Service Architecture) 가 대세인 시대에 매우 불합리한 방식이기는 하지만, 어쨋든\n이러한 이유로 인하여, 한 회사 내지 단체가 복수의 스토어 ID 를 가지는 경우가 왕왕\n있다.\n\n때문에 `payments-server` 는, {@link IPaymentHistory 결제 내역}을 발행하거나\n{@link IPaymentReservation 간편 결제 수단}을 등록할 때 모두, 사용된 스토어의 ID\n를 반드시 기재하도록 하고 있다.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "uid": { - "description": "벤더사로부터 발급받은 식별자 번호.\n\n결제 PG 사들이 제공하는 팝업창을 이용하여 결제를 진행하거나 혹은 간편 결제 수단을\n등록하거든, 결제 PG 사들은 해당 건에 대하여 별도의 식별자 번호를 발급한다.\n`IPaymentVendor.uid` 는 이처럼 결제 PG 사들이 발급해 준 식별자 번호를 기재하는\n속성이다.\n\n단 예외가 하나 있어, 아임포트는 간편 결제 카드 등록 건에 대하여 별도의 식별자 번호를\n부여하지 않고, 귀하의 서비스에서 발급해 준 ID 를 그대로 사용한다. 때문에 아임포트를\n통한 간편 결제 카드 등록의 건만 예외적으로, `IPaymentVendor.uid` 에\n{@link IPaymentSource.id } 를 동일하게 할당해주어야 한다.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "nullable": false, - "required": [ - "code", - "store_id", - "uid" - ], - "description": "벤더사 정보.\n\n`IPaymentVendor` 결제 PG 벤더사에 관련된 정보를 형상화한 자료구조 인터페이스이다.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "IPaymentCancelHistory.IStore": { - "type": "object", - "properties": { - "source": { - "$ref": "#/components/schemas/IPaymentSource" - }, - "password": { - "description": "결제 이력에 대한 비밀번호 입력.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "price": { - "description": "환불 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number", - "minimum": 0, - "x-typia-typeTags": [ - { - "target": "number", - "name": "Minimum<0>", - "kind": "minimum", - "value": 0, - "validate": "0 <= $input", - "exclusive": [ - "minimum", - "exclusiveMinimum" - ] - } - ] - }, - "reason": { - "description": "결제 취소 사유.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "account": { - "$ref": "#/components/schemas/IPaymentCancelHistory.IBankAccount.Nullable" - } - }, - "nullable": false, - "required": [ - "source", - "password", - "price", - "reason", - "account" - ], - "description": "결제 취소 입력 정보.", - "x-typia-jsDocTags": [] - }, - "IPaymentCancelHistory.IBankAccount.Nullable": { - "type": "object", - "properties": { - "bank": { - "description": "은행 이름.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "account": { - "description": "계좌번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "holder": { - "description": "예금주.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "mobile": { - "description": "연락처, 핸드폰 번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "nullable": true, - "required": [ - "bank", - "account", - "holder", - "mobile" - ], - "description": "은행 계좌 정보.\n\n가상 계좌로 입금한 경우, 결제 취소시, 이를 환불받을 계좌가 필요함.\n\n단, 이 정보는 본 결제 시스템에 저장하지 아니함.", - "x-typia-jsDocTags": [] - }, - "IPaymentReservation": { - "oneOf": [ - { - "$ref": "#/components/schemas/IPaymentReservation.IamportType" - }, - { - "$ref": "#/components/schemas/IPaymentReservation.TossType" - } - ], - "description": "간편 결제 수단 정보.\n\n`IPaymentReservation` 은 간편 결제 수단을 형상화한 자료구조이자 유니언 타입의\n인터페이스로써, if condition 을 통하여 {@link IPaymentReservation.vendor_code } 값을\n특정하면, 파생 타입이 자동으로 다운 캐스팅 된다.\n\n```typescript\nif (history.vendor_code === \"toss.payments\")\n history.data.billingKey; // history.data be ITossBilling\n```", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "IPaymentReservation.IamportType": { - "type": "object", - "properties": { - "id": { - "description": "Primary Key.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "uuid", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"uuid\">", - "kind": "format", - "value": "uuid", - "validate": "/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "vendor_code": { - "description": "벤더사 코드.\n\n{@link IPaymentVendor.code }와 완전히 동일한 값이되, 단지 union type\nspecialization 을 위해 중복 표기하였을 뿐이다. If else condition 을 통하여\n{@link IPaymentReservation.data }의 타입을 특정할 수 있다.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "iamport" - ] - }, - "vendor": { - "$ref": "#/components/schemas/IPaymentVendoriamport" - }, - "source": { - "$ref": "#/components/schemas/IPaymentSource" - }, - "title": { - "description": "제목.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "data": { - "$ref": "#/components/schemas/IIamportSubscription" - }, - "created_at": { - "description": "레코드 생성 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ] - } - }, - "nullable": false, - "required": [ - "id", - "vendor_code", - "vendor", - "source", - "title", - "data", - "created_at" - ], - "description": "아임 포트의 간편 결제 카드 정보.", - "x-typia-jsDocTags": [] - }, - "IIamportSubscription": { - "type": "object", - "properties": { - "pg_provider": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "pg_id": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "card_name": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "card_code": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "card_number": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "card_type": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "customer_name": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "customer_tel": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "customer_email": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "customer_addr": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "customer_postcode": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "nullable": true - }, - "inserted": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "updated": { - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "customer_uid": { - "description": "고객 식별자 키.\n\n아임포트가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.\n\n다만 고객이라기보다 실제로는 카드의 식별자 키로 써야함.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "nullable": false, - "required": [ - "pg_provider", - "pg_id", - "card_name", - "card_code", - "card_number", - "card_type", - "customer_name", - "customer_tel", - "customer_email", - "customer_addr", - "customer_postcode", - "inserted", - "updated", - "customer_uid" - ], - "description": "간편 결제 카드 정보.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "IPaymentReservation.TossType": { - "type": "object", - "properties": { - "id": { - "description": "Primary Key.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "uuid", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"uuid\">", - "kind": "format", - "value": "uuid", - "validate": "/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "vendor_code": { - "description": "벤더사 코드.\n\n{@link IPaymentVendor.code }와 완전히 동일한 값이되, 단지 union type\nspecialization 을 위해 중복 표기하였을 뿐이다. If else condition 을 통하여\n{@link IPaymentReservation.data }의 타입을 특정할 수 있다.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "toss.payments" - ] - }, - "vendor": { - "$ref": "#/components/schemas/IPaymentVendortoss.payments" - }, - "source": { - "$ref": "#/components/schemas/IPaymentSource" - }, - "title": { - "description": "제목.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "data": { - "$ref": "#/components/schemas/ITossBilling" - }, - "created_at": { - "description": "레코드 생성 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ] - } - }, - "nullable": false, - "required": [ - "id", - "vendor_code", - "vendor", - "source", - "title", - "data", - "created_at" - ], - "description": "토스의 간편 결제 수단 정보.", - "x-typia-jsDocTags": [] - }, - "ITossBilling": { - "type": "object", - "properties": { - "mId": { - "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "billingKey": { - "description": "{@link ITossBilling } 의 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "method": { - "description": "결제 수단.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "카드" - ] - }, - "cardCompany": { - "description": "카드사 이름.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "cardNumber": { - "description": "카드 번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "pattern": "[0-9]{16}", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Pattern<\"[0-9]{16}\">", - "kind": "pattern", - "value": "[0-9]{16}", - "validate": "/[0-9]{16}/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "authenticatedAt": { - "description": "인증 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "customerKey": { - "description": "고객 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "nullable": false, - "required": [ - "mId", - "billingKey", - "method", - "cardCompany", - "cardNumber", - "authenticatedAt", - "customerKey" - ], - "description": "간편 결제 등록 수단 정보.\n\n`ITossBilling` 은 간편 결제 등록 수단을 형상화한 자료구조 인터페이스로써, 고객이 자신의\n신용 카드를 서버에 등록해두고, 매번 결제가 필요할 때마다 카드 정보를 반복 입려하는 일\n없이 간편하게 결제를 진행하고자 할 때 사용한다.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "IPaymentReservation.IStore": { - "type": "object", - "properties": { - "vendor": { - "$ref": "#/components/schemas/IPaymentVendorIPaymentVendor.Code" - }, - "source": { - "$ref": "#/components/schemas/IPaymentSource" - }, - "title": { - "description": "제목", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "password": { - "description": "간편결제 비밀번호.\n\n주의할 점은 카드 비밀번호가 아니라는 것.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "nullable": false, - "required": [ - "vendor", - "source", - "title", - "password" - ], - "description": "간편 결제 수단 등록 정보.\n\n결제사의 팝업 창로부터 전달받은 식별자 정보를 취합하여 전달한다.\n\n참고로 아임포트의 경우 간편 결제로 등록한 카드에 자체 식별자 번호를 부여하지 않는다.\n따라서 귀하의 서비스가 발행한 식별자 ID 가 곧, 해당 간편 결제 수단의 유일무이한\n식별자ㅏ 되니, 이를 {@link IPaymentVendor.uid } 와 {@link IPaymentSource.id } 에\n모두 동일하게 할당해주면 된다.", - "x-typia-jsDocTags": [] - }, - "IPaymentVendorIPaymentVendor.Code": { - "type": "object", - "properties": { - "code": { - "description": "벤더사 식별자 코드.\n\n아임포트의 경우에는 `iamport` 를, 토스의 경우에는 `toss.payments` 를 적어주면 된다.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "iamport", - "toss.payments" - ] - }, - "store_id": { - "description": "벤더사에 등록한 스토어 ID.\n\n결제 PG 사들은 서비스 주소가 다르거나, 또는 동일한 서비스이되 연결되는 백엔드 서버\n주소가 다르거든, 각기 다른 스토어 계정을 신청해 사용하라고 한다. 이는 요즘같이 MSA\n(Micro Service Architecture) 가 대세인 시대에 매우 불합리한 방식이기는 하지만, 어쨋든\n이러한 이유로 인하여, 한 회사 내지 단체가 복수의 스토어 ID 를 가지는 경우가 왕왕\n있다.\n\n때문에 `payments-server` 는, {@link IPaymentHistory 결제 내역}을 발행하거나\n{@link IPaymentReservation 간편 결제 수단}을 등록할 때 모두, 사용된 스토어의 ID\n를 반드시 기재하도록 하고 있다.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "uid": { - "description": "벤더사로부터 발급받은 식별자 번호.\n\n결제 PG 사들이 제공하는 팝업창을 이용하여 결제를 진행하거나 혹은 간편 결제 수단을\n등록하거든, 결제 PG 사들은 해당 건에 대하여 별도의 식별자 번호를 발급한다.\n`IPaymentVendor.uid` 는 이처럼 결제 PG 사들이 발급해 준 식별자 번호를 기재하는\n속성이다.\n\n단 예외가 하나 있어, 아임포트는 간편 결제 카드 등록 건에 대하여 별도의 식별자 번호를\n부여하지 않고, 귀하의 서비스에서 발급해 준 ID 를 그대로 사용한다. 때문에 아임포트를\n통한 간편 결제 카드 등록의 건만 예외적으로, `IPaymentVendor.uid` 에\n{@link IPaymentSource.id } 를 동일하게 할당해주어야 한다.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "nullable": false, - "required": [ - "code", - "store_id", - "uid" - ], - "description": "벤더사 정보.\n\n`IPaymentVendor` 결제 PG 벤더사에 관련된 정보를 형상화한 자료구조 인터페이스이다.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "IIamportPayment.IWebhook": { - "type": "object", - "properties": { - "imp_uid": { - "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "merchant_uid": { - "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "status": { - "description": "현재 상태.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "paid", - "ready", - "failed", - "cancelled" - ] - } - }, - "nullable": false, - "required": [ - "imp_uid", - "merchant_uid", - "status" - ], - "description": "웹훅 데이터.", - "x-typia-jsDocTags": [] - } - } - } -} \ No newline at end of file +{"openapi":"3.0.1","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"5.1.5","title":"@samchon/payment-backend","description":"Payment Backend Server","license":{"name":"MIT"}},"paths":{"/monitors/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","x-nestia-encrypted":false}},"x-nestia-namespace":"monitors.health.get","x-nestia-jsDocTags":[],"x-nestia-method":"GET"}},"/monitors/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.G.et](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/IPerformance"}}},"x-nestia-encrypted":true}},"x-nestia-namespace":"monitors.performance.get","x-nestia-jsDocTags":[],"x-nestia-method":"GET"}},"/monitors/system":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.G.et](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ISystem"}}},"x-nestia-encrypted":true}},"x-nestia-namespace":"monitors.system.get","x-nestia-jsDocTags":[],"x-nestia-method":"GET"}},"/payments/histories/get":{"patch":{"tags":[],"parameters":[],"requestBody":{"description":"## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.G.et](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.결제 내역의 원천 정보 + 비밀번호","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/IPaymentSource.IAccessor"}}},"required":true,"x-nestia-encrypted":true},"responses":{"201":{"description":"## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.G.et](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.결제 내역","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/IPaymentHistory"}}},"x-nestia-encrypted":true}},"summary":"결제 내역 상세 조회하기","description":"결제 내역 상세 조회하기.","x-nestia-namespace":"payments.histories.get.get","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"input","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"결제 내역의 원천 정보 + 비밀번호","kind":"text"}]},{"name":"returns","text":[{"text":"결제 내역","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"PATCH"}},"/payments/histories/{id}":{"patch":{"tags":[],"parameters":[{"name":"id","in":"path","schema":{"type":"string","format":"uuid","x-typia-typeTags":[{"target":"string","name":"Format<\"uuid\">","kind":"format","value":"uuid","validate":"/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test($input)","exclusive":["format","pattern"]}]},"description":"Primary Key","required":true}],"requestBody":{"description":"## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.G.et](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.결제 내역의 비밀번호","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/IPaymentSource.IPassword"}}},"required":true,"x-nestia-encrypted":true},"responses":{"201":{"description":"## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.G.et](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.결제 내역","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/IPaymentHistory"}}},"x-nestia-encrypted":true}},"summary":"결제 내역 상세 조회하기","description":"결제 내역 상세 조회하기.","x-nestia-namespace":"payments.histories.at","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"id","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"Primary Key","kind":"text"}]},{"name":"param","text":[{"text":"input","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"결제 내역의 비밀번호","kind":"text"}]},{"name":"returns","text":[{"text":"결제 내역","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"PATCH"}},"/payments/histories":{"post":{"tags":[],"parameters":[],"requestBody":{"description":"## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.G.et](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.결제 내역 입력 정보","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/IPaymentHistory.IStore"}}},"required":true,"x-nestia-encrypted":true},"responses":{"201":{"description":"## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.G.et](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.결제 내역","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/IPaymentHistory"}}},"x-nestia-encrypted":true}},"summary":"결제 내역 발행하기","description":"결제 내역 발행하기.","x-nestia-namespace":"payments.histories.store","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"input","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"결제 내역 입력 정보","kind":"text"}]},{"name":"returns","text":[{"text":"결제 내역","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"POST"}},"/payments/histories/cancel":{"put":{"tags":[],"parameters":[],"requestBody":{"description":"## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.G.et](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.결제 취소 내역 입력 정보","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/IPaymentCancelHistory.IStore"}}},"required":true,"x-nestia-encrypted":true},"responses":{"201":{"description":"## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.G.et](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/IPaymentHistory"}}},"x-nestia-encrypted":true}},"summary":"결제 취소하기","description":"결제 취소하기.","x-nestia-namespace":"payments.histories.cancel.cancel","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"input","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"결제 취소 내역 입력 정보","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"PUT"}},"/payments/reservations/get":{"patch":{"tags":[],"parameters":[],"requestBody":{"description":"## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.G.et](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.간편 결제 수단의 원천 정보 + 비밀번호","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/IPaymentSource.IAccessor"}}},"required":true,"x-nestia-encrypted":true},"responses":{"201":{"description":"## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.G.et](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.결제 내역","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/IPaymentReservation"}}},"x-nestia-encrypted":true}},"summary":"간편 결제 수단 조회하기","description":"간편 결제 수단 조회하기.","x-nestia-namespace":"payments.reservations.get.get","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"input","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"간편 결제 수단의 원천 정보 + 비밀번호","kind":"text"}]},{"name":"returns","text":[{"text":"결제 내역","kind":"text"}]}],"x-nestia-method":"PATCH"}},"/payments/reservations/{id}":{"patch":{"tags":[],"parameters":[{"name":"id","in":"path","schema":{"type":"string","format":"uuid","x-typia-typeTags":[{"target":"string","name":"Format<\"uuid\">","kind":"format","value":"uuid","validate":"/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test($input)","exclusive":["format","pattern"]}]},"description":"Primary Key","required":true}],"requestBody":{"description":"## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.G.et](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.비밀번호","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/IPaymentSource.IPassword"}}},"required":true,"x-nestia-encrypted":true},"responses":{"201":{"description":"## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.G.et](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.간편 결제 수단 정보","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/IPaymentReservation"}}},"x-nestia-encrypted":true}},"summary":"간편 결제 수단 조회하기","description":"간편 결제 수단 조회하기.","x-nestia-namespace":"payments.reservations.at","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"id","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"Primary Key","kind":"text"}]},{"name":"param","text":[{"text":"input","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"비밀번호","kind":"text"}]},{"name":"returns","text":[{"text":"간편 결제 수단 정보","kind":"text"}]}],"x-nestia-method":"PATCH"}},"/payments/reservations":{"post":{"tags":[],"parameters":[],"requestBody":{"description":"## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.G.et](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.간편 결제 수단 입력 정보","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/IPaymentReservation.IStore"}}},"required":true,"x-nestia-encrypted":true},"responses":{"201":{"description":"## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.G.et](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.간편 결제 수단 정보","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/IPaymentReservation"}}},"x-nestia-encrypted":true}},"summary":"간편 결제 수단 등록하기","description":"간편 결제 수단 등록하기.","x-nestia-namespace":"payments.reservations.store","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"input","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"간편 결제 수단 입력 정보","kind":"text"}]},{"name":"returns","text":[{"text":"간편 결제 수단 정보","kind":"text"}]}],"x-nestia-method":"POST"}},"/payments/webhooks/iamport":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IIamportPayment.IWebhook"}}},"required":true,"x-nestia-encrypted":false},"responses":{"201":{"description":"","x-nestia-encrypted":false}},"x-nestia-namespace":"payments.webhooks.iamport.iamport","x-nestia-jsDocTags":[{"name":"danger"}],"x-nestia-method":"POST"}}},"components":{"schemas":{"IPerformance":{"type":"object","properties":{"cpu":{"$ref":"#/components/schemas/process.global.NodeJS.CpuUsage"},"memory":{"$ref":"#/components/schemas/process.global.NodeJS.MemoryUsage"},"resource":{"$ref":"#/components/schemas/process.global.NodeJS.ResourceUsage"}},"nullable":false,"required":["cpu","memory","resource"],"x-typia-jsDocTags":[]},"process.global.NodeJS.CpuUsage":{"type":"object","properties":{"user":{"x-typia-required":true,"x-typia-optional":false,"type":"number"},"system":{"x-typia-required":true,"x-typia-optional":false,"type":"number"}},"nullable":false,"required":["user","system"],"x-typia-jsDocTags":[]},"process.global.NodeJS.MemoryUsage":{"type":"object","properties":{"rss":{"x-typia-required":true,"x-typia-optional":false,"type":"number"},"heapTotal":{"x-typia-required":true,"x-typia-optional":false,"type":"number"},"heapUsed":{"x-typia-required":true,"x-typia-optional":false,"type":"number"},"external":{"x-typia-required":true,"x-typia-optional":false,"type":"number"},"arrayBuffers":{"x-typia-required":true,"x-typia-optional":false,"type":"number"}},"nullable":false,"required":["rss","heapTotal","heapUsed","external","arrayBuffers"],"x-typia-jsDocTags":[]},"process.global.NodeJS.ResourceUsage":{"type":"object","properties":{"fsRead":{"x-typia-required":true,"x-typia-optional":false,"type":"number"},"fsWrite":{"x-typia-required":true,"x-typia-optional":false,"type":"number"},"involuntaryContextSwitches":{"x-typia-required":true,"x-typia-optional":false,"type":"number"},"ipcReceived":{"x-typia-required":true,"x-typia-optional":false,"type":"number"},"ipcSent":{"x-typia-required":true,"x-typia-optional":false,"type":"number"},"majorPageFault":{"x-typia-required":true,"x-typia-optional":false,"type":"number"},"maxRSS":{"x-typia-required":true,"x-typia-optional":false,"type":"number"},"minorPageFault":{"x-typia-required":true,"x-typia-optional":false,"type":"number"},"sharedMemorySize":{"x-typia-required":true,"x-typia-optional":false,"type":"number"},"signalsCount":{"x-typia-required":true,"x-typia-optional":false,"type":"number"},"swappedOut":{"x-typia-required":true,"x-typia-optional":false,"type":"number"},"systemCPUTime":{"x-typia-required":true,"x-typia-optional":false,"type":"number"},"unsharedDataSize":{"x-typia-required":true,"x-typia-optional":false,"type":"number"},"unsharedStackSize":{"x-typia-required":true,"x-typia-optional":false,"type":"number"},"userCPUTime":{"x-typia-required":true,"x-typia-optional":false,"type":"number"},"voluntaryContextSwitches":{"x-typia-required":true,"x-typia-optional":false,"type":"number"}},"nullable":false,"required":["fsRead","fsWrite","involuntaryContextSwitches","ipcReceived","ipcSent","majorPageFault","maxRSS","minorPageFault","sharedMemorySize","signalsCount","swappedOut","systemCPUTime","unsharedDataSize","unsharedStackSize","userCPUTime","voluntaryContextSwitches"],"x-typia-jsDocTags":[]},"ISystem":{"type":"object","properties":{"uid":{"description":"Random Unique ID.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"arguments":{"description":"`process.argv`","x-typia-required":true,"x-typia-optional":false,"type":"array","items":{"description":"`process.argv`","x-typia-required":true,"x-typia-optional":false,"type":"string"}},"commit":{"$ref":"#/components/schemas/ISystem.ICommit"},"package":{"$ref":"#/components/schemas/ISystem.IPackage"},"created_at":{"description":"Creation time of this system.","x-typia-required":true,"x-typia-optional":false,"type":"string"}},"nullable":false,"required":["uid","arguments","commit","package","created_at"],"x-typia-jsDocTags":[]},"ISystem.ICommit":{"type":"object","properties":{"shortHash":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"branch":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"hash":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"subject":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"sanitizedSubject":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"body":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"author":{"$ref":"#/components/schemas/ISystem.ICommit.IUser"},"committer":{"$ref":"#/components/schemas/ISystem.ICommit.IUser"},"authored_at":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"commited_at":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"notes":{"x-typia-required":false,"x-typia-optional":true,"type":"string"},"tags":{"x-typia-required":true,"x-typia-optional":false,"type":"array","items":{"x-typia-required":true,"x-typia-optional":false,"type":"string"}}},"nullable":false,"required":["shortHash","branch","hash","subject","sanitizedSubject","body","author","committer","authored_at","commited_at","tags"],"description":"Git commit information.","x-typia-jsDocTags":[]},"ISystem.ICommit.IUser":{"type":"object","properties":{"name":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"email":{"x-typia-required":true,"x-typia-optional":false,"type":"string"}},"nullable":false,"required":["name","email"],"description":"Git user information.","x-typia-jsDocTags":[]},"ISystem.IPackage":{"type":"object","properties":{"name":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"version":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"description":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"scripts":{"$ref":"#/components/schemas/Recordstringstring"},"repository":{"$ref":"#/components/schemas/__type"},"author":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"license":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"bugs":{"$ref":"#/components/schemas/__type.o1"},"homepage":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"devDependencies":{"$ref":"#/components/schemas/Recordstringstring"},"dependencies":{"$ref":"#/components/schemas/Recordstringstring"},"publishConfig":{"$ref":"#/components/schemas/__type.o2"},"main":{"x-typia-required":false,"x-typia-optional":true,"type":"string"},"typings":{"x-typia-required":false,"x-typia-optional":true,"type":"string"},"files":{"x-typia-required":false,"x-typia-optional":true,"type":"array","items":{"x-typia-required":false,"x-typia-optional":true,"type":"string"}}},"nullable":false,"required":["name","version","description","scripts","repository","author","license","bugs","homepage","devDependencies","dependencies"],"description":"NPM package information.","x-typia-jsDocTags":[]},"Recordstringstring":{"type":"object","properties":{},"nullable":false,"description":"Construct a type with a set of properties K of type T","x-typia-jsDocTags":[],"x-typia-additionalProperties":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"additionalProperties":{"x-typia-required":true,"x-typia-optional":false,"type":"string"}},"__type":{"type":"object","properties":{"type":{"x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["git"]},"url":{"x-typia-required":true,"x-typia-optional":false,"type":"string"}},"nullable":false,"required":["type","url"],"x-typia-jsDocTags":[]},"__type.o1":{"type":"object","properties":{"url":{"x-typia-required":true,"x-typia-optional":false,"type":"string"}},"nullable":false,"required":["url"],"x-typia-jsDocTags":[]},"__type.o2":{"type":"object","properties":{"registry":{"x-typia-required":true,"x-typia-optional":false,"type":"string"}},"nullable":false,"required":["registry"],"x-typia-jsDocTags":[]},"IPaymentSource.IAccessor":{"type":"object","properties":{"schema":{"description":"DB 스키마 이름","x-typia-required":true,"x-typia-optional":false,"type":"string"},"table":{"description":"DB 테이블 명","x-typia-required":true,"x-typia-optional":false,"type":"string"},"id":{"description":"참조 레코드의 PK","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"uuid","x-typia-typeTags":[{"target":"string","name":"Format<\"uuid\">","kind":"format","value":"uuid","validate":"/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test($input)","exclusive":["format","pattern"]}]},"password":{"description":"레코드 조회를 위한 비밀번호 입력.","x-typia-required":true,"x-typia-optional":false,"type":"string"}},"nullable":false,"required":["schema","table","id","password"],"description":"접근자 정보.\n\n`IPaymentSource.IAccessor` 는 {@link IPaymentHistory 결제 내역} 내지\n{@link IPaymentReservation 간편 결제 수단 정보}를 조회할 때, 그것의 고유 식별자\nID 가 아닌 원천 레코드 식별자 정보 {@link IPaymentSource } 를 통하여 조회할 때\n사용하는 접근자 정보이다.\n\n다만 `payments-server` 의 모든 개별 레코드는 이를 조회할 시 비밀번호가 필요하기에,\n{@link IPaymentSource } 의 속성들에 비밀번호가 하나 더 추가되었을 뿐이다.","x-typia-jsDocTags":[]},"IPaymentHistory":{"oneOf":[{"$ref":"#/components/schemas/IPaymentHistory.IamportType"},{"$ref":"#/components/schemas/IPaymentHistory.TossType"}],"description":"결제 내역.\n\n`IPaymentHistory` 는 결제 내역을 형상화한 자료구조이자 유니언 타입의 인터페이이다.\n서비스 시스템으로부 결제 사건의 귀속 정보 ({@link IPaymentHistory.IStore.vendor } +\n{@link IPaymentHistory.IStore.source }) 를 전달받아, 본 Payment 시스템이 PG 사에\n추가 정보를 취득하여 레코드가 완성된다.\n\n그리고 만일 현 결제 건이 가상계좌와 같이 레코드 생성 시점에 지불이 이루어지지 않은\n경우라면, 사후 {@link IPaymentWebhook 웹훅 이벤트}를 통하여 지불 완료 시각을 뜻하는\n{@link paid_at } 가 설정될 수 있다. 그리고 반대로 이미 결제가 완료된 경우라도,\n환불 등의 이유로 인하여 {@link cancelled_at } 이 사후 기재될 수 있다.\n\n참고로 `if condition` 을 통하여 {@link IPaymentHistory.vendor_code } 값을 특정하면,\n파생 타입이 자동으로 다운 캐스팅 된다.\n\n```typescript\nif (history.vendor_code === \"toss.payments\")\n history.data.paymentKey; // history.data be ITossPayment\n```","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"IPaymentHistory.IamportType":{"type":"object","properties":{"id":{"description":"Primary Key.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"uuid","x-typia-typeTags":[{"target":"string","name":"Format<\"uuid\">","kind":"format","value":"uuid","validate":"/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test($input)","exclusive":["format","pattern"]}]},"vendor_code":{"description":"벤더사 식별자 코드.\n\n{@link IPaymentVendor.code }와 완전히 동일한 값이되, 단지 union type\nspecialization 을 위해 중복 표기하였을 뿐이다. `if condition` 을 통하여\n{@link IPaymentHistory.data }의 타입을 특정할 수 있다.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["iamport"]},"vendor":{"$ref":"#/components/schemas/IPaymentVendoriamport"},"source":{"$ref":"#/components/schemas/IPaymentSource"},"data":{"$ref":"#/components/schemas/IIamportPayment"},"currency":{"description":"통화 단위\n\nKRW, USB, JPY 등.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"price":{"description":"결제 가격.","x-typia-required":true,"x-typia-optional":false,"type":"number","minimum":0,"x-typia-typeTags":[{"target":"number","name":"Minimum<0>","kind":"minimum","value":0,"validate":"0 <= $input","exclusive":["minimum","exclusiveMinimum"]}]},"refund":{"description":"결제 취소시의 환불 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number","minimum":0,"x-typia-typeTags":[{"target":"number","name":"Minimum<0>","kind":"minimum","value":0,"validate":"0 <= $input","exclusive":["minimum","exclusiveMinimum"]}],"nullable":true},"webhook_url":{"description":"결제 정보가 갱신되었을 때, 이를 수신할 URL","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"url","x-typia-typeTags":[{"target":"string","name":"Format<\"url\">","kind":"format","value":"url","validate":"/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)","exclusive":["format","pattern"]}],"nullable":true},"created_at":{"description":"결제 레코드 생성 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}]},"paid_at":{"description":"결제 완료 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}],"nullable":true},"cancelled_at":{"description":"결제 취소 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}],"nullable":true},"cancels":{"description":"결제 취소 내역 리스트.","x-typia-required":true,"x-typia-optional":false,"type":"array","items":{"$ref":"#/components/schemas/IPaymentCancelHistory"}}},"nullable":false,"required":["id","vendor_code","vendor","source","data","currency","price","refund","webhook_url","created_at","paid_at","cancelled_at","cancels"],"description":"아임포트로부터의 결제 내역.","x-typia-jsDocTags":[]},"IPaymentVendoriamport":{"type":"object","properties":{"code":{"description":"벤더사 식별자 코드.\n\n아임포트의 경우에는 `iamport` 를, 토스의 경우에는 `toss.payments` 를 적어주면 된다.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["iamport"]},"store_id":{"description":"벤더사에 등록한 스토어 ID.\n\n결제 PG 사들은 서비스 주소가 다르거나, 또는 동일한 서비스이되 연결되는 백엔드 서버\n주소가 다르거든, 각기 다른 스토어 계정을 신청해 사용하라고 한다. 이는 요즘같이 MSA\n(Micro Service Architecture) 가 대세인 시대에 매우 불합리한 방식이기는 하지만, 어쨋든\n이러한 이유로 인하여, 한 회사 내지 단체가 복수의 스토어 ID 를 가지는 경우가 왕왕\n있다.\n\n때문에 `payments-server` 는, {@link IPaymentHistory 결제 내역}을 발행하거나\n{@link IPaymentReservation 간편 결제 수단}을 등록할 때 모두, 사용된 스토어의 ID\n를 반드시 기재하도록 하고 있다.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"uid":{"description":"벤더사로부터 발급받은 식별자 번호.\n\n결제 PG 사들이 제공하는 팝업창을 이용하여 결제를 진행하거나 혹은 간편 결제 수단을\n등록하거든, 결제 PG 사들은 해당 건에 대하여 별도의 식별자 번호를 발급한다.\n`IPaymentVendor.uid` 는 이처럼 결제 PG 사들이 발급해 준 식별자 번호를 기재하는\n속성이다.\n\n단 예외가 하나 있어, 아임포트는 간편 결제 카드 등록 건에 대하여 별도의 식별자 번호를\n부여하지 않고, 귀하의 서비스에서 발급해 준 ID 를 그대로 사용한다. 때문에 아임포트를\n통한 간편 결제 카드 등록의 건만 예외적으로, `IPaymentVendor.uid` 에\n{@link IPaymentSource.id } 를 동일하게 할당해주어야 한다.","x-typia-required":true,"x-typia-optional":false,"type":"string"}},"nullable":false,"required":["code","store_id","uid"],"description":"벤더사 정보.\n\n`IPaymentVendor` 결제 PG 벤더사에 관련된 정보를 형상화한 자료구조 인터페이스이다.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"IPaymentSource":{"type":"object","properties":{"schema":{"description":"DB 스키마 이름","x-typia-required":true,"x-typia-optional":false,"type":"string"},"table":{"description":"DB 테이블 명","x-typia-required":true,"x-typia-optional":false,"type":"string"},"id":{"description":"참조 레코드의 PK","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"uuid","x-typia-typeTags":[{"target":"string","name":"Format<\"uuid\">","kind":"format","value":"uuid","validate":"/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test($input)","exclusive":["format","pattern"]}]}},"nullable":false,"required":["schema","table","id"],"description":"원천 레코드 참조 정보.\n\n`IPaymentSource` 는 {@link IPaymentHistory 결제 내역} 및\n{@link IPaymentResrvation 간편 결제 수단}의 원천이 되는 레코드의 참조 정보를 형상화한\n자료구조 인터페이이다. 만일 대상이 {@link IPaymentHistory 결제 내역}이라면 결제의\n근원이 되는 주문에 대한 참조 정보를, 대상이 {@link IPaymentResrvation 간편 결제 수단}\n이라면 이를 기록한 귀사 서비스의 참조 정보를 기입하면 된다.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"IIamportPayment":{"oneOf":[{"$ref":"#/components/schemas/IIamportCardPayment"},{"$ref":"#/components/schemas/IIamportTransferPayment"},{"$ref":"#/components/schemas/IIamportVBankPayment"},{"$ref":"#/components/schemas/IIamportPayment.IBasephonekpaykakaopaypaycolpayssgpaytosspayculturelandsmartculturehappymoneybooknlifepoint"}],"description":"결제 정보.\n\n`IIamportPayment` 는 아임포트의 결제 정보를 형상화한 자료구조이자 유니언 타입의\n인터페이스로써, if condition 을 통하여 method 값을 특정하면, 파생 타입이 자동으로\n지정된다.\n\n```typescript\nif (payment.pay_method === \"card\")\n payment.card_number; // payment be IIamportCardPayment\n```","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"IIamportCardPayment":{"type":"object","properties":{"card_code":{"description":"카드 식별자 코드.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"card_name":{"description":"카드 이름.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"card_number":{"description":"카드 번호.","x-typia-required":true,"x-typia-optional":false,"type":"string","pattern":"\\d{4}-\\d{4}-\\d{4}-\\d{4}","x-typia-typeTags":[{"target":"string","name":"Pattern<\"\\\\d{4}-\\\\d{4}-\\\\d{4}-\\\\d{4}\">","kind":"pattern","value":"\\d{4}-\\d{4}-\\d{4}-\\d{4}","validate":"/\\d{4}-\\d{4}-\\d{4}-\\d{4}/.test($input)","exclusive":["format","pattern"]}]},"card_quota":{"description":"할부 개월 수.","x-typia-required":true,"x-typia-optional":false,"type":"integer","x-typia-typeTags":[{"target":"number","name":"Type<\"uint32\">","kind":"type","value":"uint32","validate":"Math.floor($input) === $input && 0 <= $input && $input <= 4294967295","exclusive":true}]},"apply_num":{"description":"카드사 승인번호.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"pay_method":{"x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["card","samsung"]},"imp_uid":{"description":"결제 정보 {@link IIamportPayment } 의 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"merchant_uid":{"description":"주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"name":{"description":"주문명, 누락 가능.","x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"amount":{"description":"결제 총액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"cancel_amount":{"description":"결제 취소, 환불 총액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"currency":{"$ref":"#/components/schemas/IIamportPayment.Currency"},"receipt_url":{"description":"영수증 URL.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"url","x-typia-typeTags":[{"target":"string","name":"Format<\"url\">","kind":"format","value":"url","validate":"/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)","exclusive":["format","pattern"]}]},"cash_receipt_issue":{"description":"현금 영수증 발행 여부.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"channel":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"pg_provider":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"emb_pg_provider":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"pg_id":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"pg_tid":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"escrow":{"x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"buyer_name":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"buyer_email":{"x-typia-required":true,"x-typia-optional":false,"type":"string","format":"email","x-typia-typeTags":[{"target":"string","name":"Format<\"email\">","kind":"format","value":"email","validate":"/^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i.test($input)","exclusive":["format","pattern"]}],"nullable":true},"buyer_tel":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"buyer_addr":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"buyer_postcode":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"customer_uid":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"customer_uid_usage":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"custom_data":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"user_agent":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"status":{"$ref":"#/components/schemas/IIamportPayment.Status"},"started_at":{"description":"결제 신청 일시.\n\n리눅스 타임이 쓰임.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"paid_at":{"description":"결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"failed_at":{"description":"결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"cancelled_at":{"description":"결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"fail_reason":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"cancel_reason":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"cancel_history":{"x-typia-required":true,"x-typia-optional":false,"type":"array","items":{"$ref":"#/components/schemas/IIamportPaymentCancel"}}},"nullable":false,"required":["card_code","card_name","card_number","card_quota","apply_num","pay_method","imp_uid","merchant_uid","name","amount","cancel_amount","currency","receipt_url","cash_receipt_issue","channel","pg_provider","emb_pg_provider","pg_id","pg_tid","escrow","buyer_name","buyer_email","buyer_tel","buyer_addr","buyer_postcode","customer_uid","customer_uid_usage","custom_data","user_agent","status","started_at","paid_at","failed_at","cancelled_at","fail_reason","cancel_reason","cancel_history"],"description":"카드 결제 정보.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"IIamportPayment.Currency":{"type":"string","enum":["KRW","USD","EUR","JPY"]},"IIamportPayment.Status":{"type":"string","enum":["paid","ready","failed","cancelled"]},"IIamportPaymentCancel":{"type":"object","properties":{"pg_id":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"pg_tid":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"amount":{"x-typia-required":true,"x-typia-optional":false,"type":"number"},"cancelled_at":{"x-typia-required":true,"x-typia-optional":false,"type":"number"},"reason":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"receipt_url":{"x-typia-required":true,"x-typia-optional":false,"type":"string","format":"url","x-typia-typeTags":[{"target":"string","name":"Format<\"url\">","kind":"format","value":"url","validate":"/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)","exclusive":["format","pattern"]}]}},"nullable":false,"required":["pg_id","pg_tid","amount","cancelled_at","reason","receipt_url"],"description":"결제 취소 정보.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"IIamportTransferPayment":{"type":"object","properties":{"bank_code":{"description":"은행 식별자 코드.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"bank_name":{"description":"은행 이름.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"pay_method":{"x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["trans"]},"imp_uid":{"description":"결제 정보 {@link IIamportPayment } 의 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"merchant_uid":{"description":"주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"name":{"description":"주문명, 누락 가능.","x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"amount":{"description":"결제 총액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"cancel_amount":{"description":"결제 취소, 환불 총액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"currency":{"$ref":"#/components/schemas/IIamportPayment.Currency"},"receipt_url":{"description":"영수증 URL.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"url","x-typia-typeTags":[{"target":"string","name":"Format<\"url\">","kind":"format","value":"url","validate":"/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)","exclusive":["format","pattern"]}]},"cash_receipt_issue":{"description":"현금 영수증 발행 여부.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"channel":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"pg_provider":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"emb_pg_provider":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"pg_id":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"pg_tid":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"escrow":{"x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"buyer_name":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"buyer_email":{"x-typia-required":true,"x-typia-optional":false,"type":"string","format":"email","x-typia-typeTags":[{"target":"string","name":"Format<\"email\">","kind":"format","value":"email","validate":"/^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i.test($input)","exclusive":["format","pattern"]}],"nullable":true},"buyer_tel":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"buyer_addr":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"buyer_postcode":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"customer_uid":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"customer_uid_usage":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"custom_data":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"user_agent":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"status":{"$ref":"#/components/schemas/IIamportPayment.Status"},"started_at":{"description":"결제 신청 일시.\n\n리눅스 타임이 쓰임.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"paid_at":{"description":"결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"failed_at":{"description":"결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"cancelled_at":{"description":"결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"fail_reason":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"cancel_reason":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"cancel_history":{"x-typia-required":true,"x-typia-optional":false,"type":"array","items":{"$ref":"#/components/schemas/IIamportPaymentCancel"}}},"nullable":false,"required":["bank_code","bank_name","pay_method","imp_uid","merchant_uid","name","amount","cancel_amount","currency","receipt_url","cash_receipt_issue","channel","pg_provider","emb_pg_provider","pg_id","pg_tid","escrow","buyer_name","buyer_email","buyer_tel","buyer_addr","buyer_postcode","customer_uid","customer_uid_usage","custom_data","user_agent","status","started_at","paid_at","failed_at","cancelled_at","fail_reason","cancel_reason","cancel_history"],"description":"계좌 이체 결제 정보.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"IIamportVBankPayment":{"type":"object","properties":{"vbank_code":{"description":"가상 계좌 식별자 코드.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"vbank_name":{"description":"가상 게좌 이름","x-typia-required":true,"x-typia-optional":false,"type":"string"},"vbank_num":{"description":"가상 계좌 번호","x-typia-required":true,"x-typia-optional":false,"type":"string"},"vbank_holder":{"description":"가상 계좌 예금주.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"vbank_date":{"description":"가상 계좌 입금 만료 기한.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"vbank_issued_at":{"description":"가상 계좌 개설 일시.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"pay_method":{"x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["vbank"]},"imp_uid":{"description":"결제 정보 {@link IIamportPayment } 의 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"merchant_uid":{"description":"주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"name":{"description":"주문명, 누락 가능.","x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"amount":{"description":"결제 총액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"cancel_amount":{"description":"결제 취소, 환불 총액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"currency":{"$ref":"#/components/schemas/IIamportPayment.Currency"},"receipt_url":{"description":"영수증 URL.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"url","x-typia-typeTags":[{"target":"string","name":"Format<\"url\">","kind":"format","value":"url","validate":"/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)","exclusive":["format","pattern"]}]},"cash_receipt_issue":{"description":"현금 영수증 발행 여부.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"channel":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"pg_provider":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"emb_pg_provider":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"pg_id":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"pg_tid":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"escrow":{"x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"buyer_name":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"buyer_email":{"x-typia-required":true,"x-typia-optional":false,"type":"string","format":"email","x-typia-typeTags":[{"target":"string","name":"Format<\"email\">","kind":"format","value":"email","validate":"/^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i.test($input)","exclusive":["format","pattern"]}],"nullable":true},"buyer_tel":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"buyer_addr":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"buyer_postcode":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"customer_uid":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"customer_uid_usage":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"custom_data":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"user_agent":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"status":{"$ref":"#/components/schemas/IIamportPayment.Status"},"started_at":{"description":"결제 신청 일시.\n\n리눅스 타임이 쓰임.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"paid_at":{"description":"결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"failed_at":{"description":"결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"cancelled_at":{"description":"결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"fail_reason":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"cancel_reason":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"cancel_history":{"x-typia-required":true,"x-typia-optional":false,"type":"array","items":{"$ref":"#/components/schemas/IIamportPaymentCancel"}}},"nullable":false,"required":["vbank_code","vbank_name","vbank_num","vbank_holder","vbank_date","vbank_issued_at","pay_method","imp_uid","merchant_uid","name","amount","cancel_amount","currency","receipt_url","cash_receipt_issue","channel","pg_provider","emb_pg_provider","pg_id","pg_tid","escrow","buyer_name","buyer_email","buyer_tel","buyer_addr","buyer_postcode","customer_uid","customer_uid_usage","custom_data","user_agent","status","started_at","paid_at","failed_at","cancelled_at","fail_reason","cancel_reason","cancel_history"],"description":"가상 계좌 결제 정보.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"IIamportPayment.IBasephonekpaykakaopaypaycolpayssgpaytosspayculturelandsmartculturehappymoneybooknlifepoint":{"type":"object","properties":{"pay_method":{"x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["phone","kpay","kakaopay","payco","lpay","ssgpay","tosspay","cultureland","smartculture","happymoney","booknlife","point"]},"imp_uid":{"description":"결제 정보 {@link IIamportPayment } 의 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"merchant_uid":{"description":"주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"name":{"description":"주문명, 누락 가능.","x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"amount":{"description":"결제 총액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"cancel_amount":{"description":"결제 취소, 환불 총액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"currency":{"$ref":"#/components/schemas/IIamportPayment.Currency"},"receipt_url":{"description":"영수증 URL.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"url","x-typia-typeTags":[{"target":"string","name":"Format<\"url\">","kind":"format","value":"url","validate":"/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)","exclusive":["format","pattern"]}]},"cash_receipt_issue":{"description":"현금 영수증 발행 여부.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"channel":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"pg_provider":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"emb_pg_provider":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"pg_id":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"pg_tid":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"escrow":{"x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"buyer_name":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"buyer_email":{"x-typia-required":true,"x-typia-optional":false,"type":"string","format":"email","x-typia-typeTags":[{"target":"string","name":"Format<\"email\">","kind":"format","value":"email","validate":"/^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i.test($input)","exclusive":["format","pattern"]}],"nullable":true},"buyer_tel":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"buyer_addr":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"buyer_postcode":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"customer_uid":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"customer_uid_usage":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"custom_data":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"user_agent":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"status":{"$ref":"#/components/schemas/IIamportPayment.Status"},"started_at":{"description":"결제 신청 일시.\n\n리눅스 타임이 쓰임.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"paid_at":{"description":"결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"failed_at":{"description":"결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"cancelled_at":{"description":"결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"fail_reason":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"cancel_reason":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"cancel_history":{"x-typia-required":true,"x-typia-optional":false,"type":"array","items":{"$ref":"#/components/schemas/IIamportPaymentCancel"}}},"nullable":false,"required":["pay_method","imp_uid","merchant_uid","name","amount","cancel_amount","currency","receipt_url","cash_receipt_issue","channel","pg_provider","emb_pg_provider","pg_id","pg_tid","escrow","buyer_name","buyer_email","buyer_tel","buyer_addr","buyer_postcode","customer_uid","customer_uid_usage","custom_data","user_agent","status","started_at","paid_at","failed_at","cancelled_at","fail_reason","cancel_reason","cancel_history"],"description":"결제 기본 (공통) 정보.","x-typia-jsDocTags":[]},"IPaymentCancelHistory":{"type":"object","properties":{"reason":{"description":"결제 취소 사유.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"price":{"description":"환불 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number","minimum":0,"x-typia-typeTags":[{"target":"number","name":"Minimum<0>","kind":"minimum","value":0,"validate":"0 <= $input","exclusive":["minimum","exclusiveMinimum"]}]},"created_at":{"description":"레코드 생성 일시.\n\n즉, 결제 취소가 발생한 시각.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}]}},"nullable":false,"required":["reason","price","created_at"],"description":"결제 취소 내역.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"IPaymentHistory.TossType":{"type":"object","properties":{"id":{"description":"Primary Key.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"uuid","x-typia-typeTags":[{"target":"string","name":"Format<\"uuid\">","kind":"format","value":"uuid","validate":"/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test($input)","exclusive":["format","pattern"]}]},"vendor_code":{"description":"벤더사 식별자 코드.\n\n{@link IPaymentVendor.code }와 완전히 동일한 값이되, 단지 union type\nspecialization 을 위해 중복 표기하였을 뿐이다. `if condition` 을 통하여\n{@link IPaymentHistory.data }의 타입을 특정할 수 있다.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["toss.payments"]},"vendor":{"$ref":"#/components/schemas/IPaymentVendortoss.payments"},"source":{"$ref":"#/components/schemas/IPaymentSource"},"data":{"$ref":"#/components/schemas/ITossPayment"},"currency":{"description":"통화 단위\n\nKRW, USB, JPY 등.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"price":{"description":"결제 가격.","x-typia-required":true,"x-typia-optional":false,"type":"number","minimum":0,"x-typia-typeTags":[{"target":"number","name":"Minimum<0>","kind":"minimum","value":0,"validate":"0 <= $input","exclusive":["minimum","exclusiveMinimum"]}]},"refund":{"description":"결제 취소시의 환불 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number","minimum":0,"x-typia-typeTags":[{"target":"number","name":"Minimum<0>","kind":"minimum","value":0,"validate":"0 <= $input","exclusive":["minimum","exclusiveMinimum"]}],"nullable":true},"webhook_url":{"description":"결제 정보가 갱신되었을 때, 이를 수신할 URL","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"url","x-typia-typeTags":[{"target":"string","name":"Format<\"url\">","kind":"format","value":"url","validate":"/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)","exclusive":["format","pattern"]}],"nullable":true},"created_at":{"description":"결제 레코드 생성 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}]},"paid_at":{"description":"결제 완료 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}],"nullable":true},"cancelled_at":{"description":"결제 취소 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}],"nullable":true},"cancels":{"description":"결제 취소 내역 리스트.","x-typia-required":true,"x-typia-optional":false,"type":"array","items":{"$ref":"#/components/schemas/IPaymentCancelHistory"}}},"nullable":false,"required":["id","vendor_code","vendor","source","data","currency","price","refund","webhook_url","created_at","paid_at","cancelled_at","cancels"],"description":"토스 페이먼츠로부터의 결제 내역.","x-typia-jsDocTags":[]},"IPaymentVendortoss.payments":{"type":"object","properties":{"code":{"description":"벤더사 식별자 코드.\n\n아임포트의 경우에는 `iamport` 를, 토스의 경우에는 `toss.payments` 를 적어주면 된다.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["toss.payments"]},"store_id":{"description":"벤더사에 등록한 스토어 ID.\n\n결제 PG 사들은 서비스 주소가 다르거나, 또는 동일한 서비스이되 연결되는 백엔드 서버\n주소가 다르거든, 각기 다른 스토어 계정을 신청해 사용하라고 한다. 이는 요즘같이 MSA\n(Micro Service Architecture) 가 대세인 시대에 매우 불합리한 방식이기는 하지만, 어쨋든\n이러한 이유로 인하여, 한 회사 내지 단체가 복수의 스토어 ID 를 가지는 경우가 왕왕\n있다.\n\n때문에 `payments-server` 는, {@link IPaymentHistory 결제 내역}을 발행하거나\n{@link IPaymentReservation 간편 결제 수단}을 등록할 때 모두, 사용된 스토어의 ID\n를 반드시 기재하도록 하고 있다.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"uid":{"description":"벤더사로부터 발급받은 식별자 번호.\n\n결제 PG 사들이 제공하는 팝업창을 이용하여 결제를 진행하거나 혹은 간편 결제 수단을\n등록하거든, 결제 PG 사들은 해당 건에 대하여 별도의 식별자 번호를 발급한다.\n`IPaymentVendor.uid` 는 이처럼 결제 PG 사들이 발급해 준 식별자 번호를 기재하는\n속성이다.\n\n단 예외가 하나 있어, 아임포트는 간편 결제 카드 등록 건에 대하여 별도의 식별자 번호를\n부여하지 않고, 귀하의 서비스에서 발급해 준 ID 를 그대로 사용한다. 때문에 아임포트를\n통한 간편 결제 카드 등록의 건만 예외적으로, `IPaymentVendor.uid` 에\n{@link IPaymentSource.id } 를 동일하게 할당해주어야 한다.","x-typia-required":true,"x-typia-optional":false,"type":"string"}},"nullable":false,"required":["code","store_id","uid"],"description":"벤더사 정보.\n\n`IPaymentVendor` 결제 PG 벤더사에 관련된 정보를 형상화한 자료구조 인터페이스이다.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"ITossPayment":{"oneOf":[{"$ref":"#/components/schemas/ITossCardPayment"},{"$ref":"#/components/schemas/ITossGiftCertificatePayment"},{"$ref":"#/components/schemas/ITossMobilePhonePayment"},{"$ref":"#/components/schemas/ITossTransferPayment"},{"$ref":"#/components/schemas/ITossVirtualAccountPayment"}],"description":"결제 정보.\n\n`ITossPayment` 는 토스 페이먼츠의 결제 정보를 형상화한 자료구조이자 유니언 타입의\n인터페이스로써, if condition 을 통하여 method 값을 특정하면, 파생 타입이 자동으로\n지정된다.\n\n```typescript\nif (payment.method === \"카드\")\n payment.card; // payment be ITossCardPayment\n```","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"ITossCardPayment":{"type":"object","properties":{"card":{"$ref":"#/components/schemas/ITossCardPayment.ICard"},"discount":{"$ref":"#/components/schemas/ITossCardPayment.IDiscount.Nullable"},"easyPay":{"description":"간편결제로 결제한 경우 간편결제 타입 정보.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["토스결제","페이코","삼성페이"],"nullable":true},"method":{"description":"결제 수단.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["카드"]},"type":{"description":"결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["NORMAL","BILLING"]},"status":{"description":"결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["READY","IN_PROGRESS","WAITING_FOR_DEPOSIT","DONE","CANCELED","PARTIAL_CANCELED","ABORTED","EXPIRED"]},"mId":{"description":"가맹점 ID.\n\n현재 tosspayments 가 쓰임.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"version":{"description":"사용 중인 토스 페이먼츠 API 의 버전.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"paymentKey":{"description":"결제 내역의 식별자 번호.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"orderId":{"description":"주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"transactionKey":{"description":"거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"orderName":{"description":"주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"currency":{"description":"화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"totalAmount":{"description":"총 결제 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"balanceAmount":{"description":"취소할 수 있는 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"suppliedAmount":{"description":"공급가액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"taxFreeAmount":{"description":"면세액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"vat":{"description":"부가세.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"useEscrow":{"description":"에스크로 사용 여부.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"cultureExpense":{"description":"문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"requestedAt":{"description":"결제 요청 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}]},"approvedAt":{"description":"결제 승인 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}],"nullable":true},"cancels":{"description":"결제 취소 내역.","x-typia-required":true,"x-typia-optional":false,"type":"array","items":{"$ref":"#/components/schemas/ITossPaymentCancel"},"nullable":true},"cashReceipt":{"$ref":"#/components/schemas/ITossCashReceipt.ISummary.Nullable"}},"nullable":false,"required":["card","discount","easyPay","method","type","status","mId","version","paymentKey","orderId","transactionKey","orderName","currency","totalAmount","balanceAmount","suppliedAmount","taxFreeAmount","vat","useEscrow","cultureExpense","requestedAt","approvedAt","cancels","cashReceipt"],"description":"카드 결제 정보.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"ITossCardPayment.ICard":{"type":"object","properties":{"company":{"description":"카드사 이름.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"number":{"description":"카드 번호.","x-typia-required":true,"x-typia-optional":false,"type":"string","pattern":"[0-9]{16}","x-typia-typeTags":[{"target":"string","name":"Pattern<\"[0-9]{16}\">","kind":"pattern","value":"[0-9]{16}","validate":"/[0-9]{16}/.test($input)","exclusive":["format","pattern"]}]},"installmentPlanMonths":{"description":"할부 개월 수.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"isInterestFree":{"description":"무이자 할부 적용 여부.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"approveNo":{"description":"승인 번호.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"useCardPoint":{"description":"카드 포인트 사용 여부.","x-typia-required":true,"x-typia-optional":false,"type":"boolean","enum":[false]},"cardType":{"description":"카드 타입.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["신용","체크","기프트"]},"ownerType":{"description":"카드의 소유자 타입.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["개인","법인"]},"acquireStatus":{"description":"카드 결제의 매입 상태.\n\n - READY: 매입 대기\n - REQUESTED: 매입 요청됨\n - COMPLETED: 매입 완료\n - CANCEL_REQUESTED: 매입 취소 요청됨\n - CANCELD: 매입 취소됨","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["READY","CANCELED","REQUESTED","COMPLETED","CANCEL_REQUESTED"]},"receiptUrl":{"description":"영수증 URL.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"url","x-typia-typeTags":[{"target":"string","name":"Format<\"url\">","kind":"format","value":"url","validate":"/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)","exclusive":["format","pattern"]}]}},"nullable":false,"required":["company","number","installmentPlanMonths","isInterestFree","approveNo","useCardPoint","cardType","ownerType","acquireStatus","receiptUrl"],"description":"카드 정보.","x-typia-jsDocTags":[]},"ITossCardPayment.IDiscount.Nullable":{"type":"object","properties":{"amount":{"description":"카드사의 즉시 할인 프로모션을 적용한 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number"}},"nullable":true,"required":["amount"],"description":"카드사의 즉시 할인 프로모션 정보.","x-typia-jsDocTags":[]},"ITossPaymentCancel":{"type":"object","properties":{"cancelAmount":{"description":"취소 총액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"cancelReason":{"description":"취소 사유.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"taxFreeAmount":{"description":"면세 처리된 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"taxAmount":{"description":"과세 처리된 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"refundableAmount":{"description":"결제 취소 후 환불 가능 잔액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"canceledAt":{"description":"취소 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}]}},"nullable":false,"required":["cancelAmount","cancelReason","taxFreeAmount","taxAmount","refundableAmount","canceledAt"],"description":"결제 취소 정보.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"ITossCashReceipt.ISummary.Nullable":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/ITossCashReceipt.Type"},"amount":{"description":"현금 영수증 처리된 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"taxFreeAmount":{"description":"면세 처리된 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"issueNumber":{"description":"현금영수증 발급번호.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"receiptUrl":{"description":"현금영수증 조회 페이지 주소.","x-typia-required":true,"x-typia-optional":false,"type":"string"}},"nullable":true,"required":["type","amount","taxFreeAmount","issueNumber","receiptUrl"],"description":"현금 영수증 요약 정보.","x-typia-jsDocTags":[]},"ITossCashReceipt.Type":{"description":"현금 영수증의 종류.","type":"string","enum":["소득공제","지출증빙"]},"ITossGiftCertificatePayment":{"type":"object","properties":{"giftCertificate":{"$ref":"#/components/schemas/ITossGiftCertificatePayment.IGiftCertificate"},"method":{"description":"결제 수단.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["상품권"]},"type":{"description":"결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["NORMAL"]},"status":{"description":"결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["READY","IN_PROGRESS","WAITING_FOR_DEPOSIT","DONE","CANCELED","PARTIAL_CANCELED","ABORTED","EXPIRED"]},"mId":{"description":"가맹점 ID.\n\n현재 tosspayments 가 쓰임.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"version":{"description":"사용 중인 토스 페이먼츠 API 의 버전.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"paymentKey":{"description":"결제 내역의 식별자 번호.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"orderId":{"description":"주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"transactionKey":{"description":"거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"orderName":{"description":"주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"currency":{"description":"화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"totalAmount":{"description":"총 결제 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"balanceAmount":{"description":"취소할 수 있는 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"suppliedAmount":{"description":"공급가액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"taxFreeAmount":{"description":"면세액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"vat":{"description":"부가세.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"useEscrow":{"description":"에스크로 사용 여부.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"cultureExpense":{"description":"문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"requestedAt":{"description":"결제 요청 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}]},"approvedAt":{"description":"결제 승인 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}],"nullable":true},"cancels":{"description":"결제 취소 내역.","x-typia-required":true,"x-typia-optional":false,"type":"array","items":{"$ref":"#/components/schemas/ITossPaymentCancel"},"nullable":true},"cashReceipt":{"$ref":"#/components/schemas/ITossCashReceipt.ISummary.Nullable"}},"nullable":false,"required":["giftCertificate","method","type","status","mId","version","paymentKey","orderId","transactionKey","orderName","currency","totalAmount","balanceAmount","suppliedAmount","taxFreeAmount","vat","useEscrow","cultureExpense","requestedAt","approvedAt","cancels","cashReceipt"],"description":"상품권 결제 정보.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"ITossGiftCertificatePayment.IGiftCertificate":{"type":"object","properties":{"approveNo":{"description":"승인 번호.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"settlementStatus":{"description":"정산 상태.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["COMPLETE","INCOMPLETE"]}},"nullable":false,"required":["approveNo","settlementStatus"],"description":"상품권 정보.","x-typia-jsDocTags":[]},"ITossMobilePhonePayment":{"type":"object","properties":{"mobilePhone":{"$ref":"#/components/schemas/ITossMobilePhonePayment.IMobilePhone"},"method":{"description":"결제 수단.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["휴대폰"]},"type":{"description":"결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["NORMAL"]},"status":{"description":"결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["READY","IN_PROGRESS","WAITING_FOR_DEPOSIT","DONE","CANCELED","PARTIAL_CANCELED","ABORTED","EXPIRED"]},"mId":{"description":"가맹점 ID.\n\n현재 tosspayments 가 쓰임.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"version":{"description":"사용 중인 토스 페이먼츠 API 의 버전.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"paymentKey":{"description":"결제 내역의 식별자 번호.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"orderId":{"description":"주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"transactionKey":{"description":"거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"orderName":{"description":"주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"currency":{"description":"화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"totalAmount":{"description":"총 결제 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"balanceAmount":{"description":"취소할 수 있는 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"suppliedAmount":{"description":"공급가액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"taxFreeAmount":{"description":"면세액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"vat":{"description":"부가세.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"useEscrow":{"description":"에스크로 사용 여부.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"cultureExpense":{"description":"문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"requestedAt":{"description":"결제 요청 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}]},"approvedAt":{"description":"결제 승인 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}],"nullable":true},"cancels":{"description":"결제 취소 내역.","x-typia-required":true,"x-typia-optional":false,"type":"array","items":{"$ref":"#/components/schemas/ITossPaymentCancel"},"nullable":true},"cashReceipt":{"$ref":"#/components/schemas/ITossCashReceipt.ISummary.Nullable"}},"nullable":false,"required":["mobilePhone","method","type","status","mId","version","paymentKey","orderId","transactionKey","orderName","currency","totalAmount","balanceAmount","suppliedAmount","taxFreeAmount","vat","useEscrow","cultureExpense","requestedAt","approvedAt","cancels","cashReceipt"],"description":"휴대폰 결제 정보.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"ITossMobilePhonePayment.IMobilePhone":{"type":"object","properties":{"carrier":{"description":"통신사.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"customerMobilePhone":{"description":"고객 휴대폰 번호.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"settlementStatus":{"description":"정산 상태.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["COMPLETED","INCOMPLETED"]}},"nullable":false,"required":["carrier","customerMobilePhone","settlementStatus"],"description":"휴대폰 정보.","x-typia-jsDocTags":[]},"ITossTransferPayment":{"type":"object","properties":{"transfer":{"$ref":"#/components/schemas/ITossTransferPayment.ITransfer"},"method":{"description":"결제 수단.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["계좌이체"]},"type":{"description":"결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["NORMAL"]},"status":{"description":"결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["READY","IN_PROGRESS","WAITING_FOR_DEPOSIT","DONE","CANCELED","PARTIAL_CANCELED","ABORTED","EXPIRED"]},"mId":{"description":"가맹점 ID.\n\n현재 tosspayments 가 쓰임.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"version":{"description":"사용 중인 토스 페이먼츠 API 의 버전.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"paymentKey":{"description":"결제 내역의 식별자 번호.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"orderId":{"description":"주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"transactionKey":{"description":"거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"orderName":{"description":"주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"currency":{"description":"화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"totalAmount":{"description":"총 결제 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"balanceAmount":{"description":"취소할 수 있는 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"suppliedAmount":{"description":"공급가액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"taxFreeAmount":{"description":"면세액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"vat":{"description":"부가세.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"useEscrow":{"description":"에스크로 사용 여부.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"cultureExpense":{"description":"문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"requestedAt":{"description":"결제 요청 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}]},"approvedAt":{"description":"결제 승인 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}],"nullable":true},"cancels":{"description":"결제 취소 내역.","x-typia-required":true,"x-typia-optional":false,"type":"array","items":{"$ref":"#/components/schemas/ITossPaymentCancel"},"nullable":true},"cashReceipt":{"$ref":"#/components/schemas/ITossCashReceipt.ISummary.Nullable"}},"nullable":false,"required":["transfer","method","type","status","mId","version","paymentKey","orderId","transactionKey","orderName","currency","totalAmount","balanceAmount","suppliedAmount","taxFreeAmount","vat","useEscrow","cultureExpense","requestedAt","approvedAt","cancels","cashReceipt"],"description":"계좌 이체 결제 정보.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"ITossTransferPayment.ITransfer":{"type":"object","properties":{"bank":{"description":"은행명.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"settlementStatus":{"description":"이체 상태.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["COMPLETED","INCOMPLETED"]}},"nullable":false,"required":["bank","settlementStatus"],"description":"계좌 이체 정보.","x-typia-jsDocTags":[]},"ITossVirtualAccountPayment":{"type":"object","properties":{"secret":{"description":"가상 계좌로 결제할 때 전달되는 입금 콜백을 검증하기 위한 값.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"virtualAccount":{"$ref":"#/components/schemas/ITossVirtualAccountPayment.IVirtualAccount"},"method":{"description":"결제 수단.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["가상계좌"]},"type":{"description":"결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["NORMAL"]},"status":{"description":"결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["READY","IN_PROGRESS","WAITING_FOR_DEPOSIT","DONE","CANCELED","PARTIAL_CANCELED","ABORTED","EXPIRED"]},"mId":{"description":"가맹점 ID.\n\n현재 tosspayments 가 쓰임.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"version":{"description":"사용 중인 토스 페이먼츠 API 의 버전.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"paymentKey":{"description":"결제 내역의 식별자 번호.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"orderId":{"description":"주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"transactionKey":{"description":"거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"orderName":{"description":"주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"currency":{"description":"화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"totalAmount":{"description":"총 결제 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"balanceAmount":{"description":"취소할 수 있는 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"suppliedAmount":{"description":"공급가액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"taxFreeAmount":{"description":"면세액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"vat":{"description":"부가세.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"useEscrow":{"description":"에스크로 사용 여부.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"cultureExpense":{"description":"문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"requestedAt":{"description":"결제 요청 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}]},"approvedAt":{"description":"결제 승인 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}],"nullable":true},"cancels":{"description":"결제 취소 내역.","x-typia-required":true,"x-typia-optional":false,"type":"array","items":{"$ref":"#/components/schemas/ITossPaymentCancel"},"nullable":true},"cashReceipt":{"$ref":"#/components/schemas/ITossCashReceipt.ISummary.Nullable"}},"nullable":false,"required":["secret","virtualAccount","method","type","status","mId","version","paymentKey","orderId","transactionKey","orderName","currency","totalAmount","balanceAmount","suppliedAmount","taxFreeAmount","vat","useEscrow","cultureExpense","requestedAt","approvedAt","cancels","cashReceipt"],"description":"가상 계좌 결제 정보.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"ITossVirtualAccountPayment.IVirtualAccount":{"type":"object","properties":{"accountNumber":{"description":"계좌 번호.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"accountType":{"description":"가상 계좌 타입.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["일반","고정"]},"bank":{"description":"은행명.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"customerName":{"description":"고객 이름.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"dueDate":{"description":"입금 기한.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date","x-typia-typeTags":[{"target":"string","name":"Format<\"date\">","kind":"format","value":"date","validate":"/^(\\d{4})-(\\d{2})-(\\d{2})$/.test($input)","exclusive":["format","pattern"]}]},"expired":{"description":"가상 계좌 만료 여부.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"settlementStatus":{"description":"정산 상태.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["COMPLETED","INCOMPLETED"]},"refundStatus":{"description":"환불 처리 상태.\n\n - NONE: 해당 없음\n - FAILED: 환불 실패\n - PENDING: 환불 처리중\n - PARTIAL_FAILED: 부분 환불 실패\n - COMPLETED: 환불 완료","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["COMPLETED","NONE","FAILED","PENDING","PARTIAL_FAILED"]}},"nullable":false,"required":["accountNumber","accountType","bank","customerName","dueDate","expired","settlementStatus","refundStatus"],"description":"가상 계좌 정보.","x-typia-jsDocTags":[]},"IPaymentSource.IPassword":{"type":"object","properties":{"password":{"description":"레코드 조회를 위한 비밀번호 입력.","x-typia-required":true,"x-typia-optional":false,"type":"string"}},"nullable":false,"required":["password"],"description":"비밀번호 입력 정보.","x-typia-jsDocTags":[]},"IPaymentHistory.IStore":{"type":"object","properties":{"vendor":{"$ref":"#/components/schemas/IPaymentVendoriamporttoss.payments"},"source":{"$ref":"#/components/schemas/IPaymentSource"},"price":{"description":"결제되어야 할 총액.\n\n실 결제금액과 비교하여 이와 다를 시, 422 에러가 리턴됨.","x-typia-required":true,"x-typia-optional":false,"type":"number","minimum":0,"x-typia-typeTags":[{"target":"number","name":"Minimum<0>","kind":"minimum","value":0,"validate":"0 <= $input","exclusive":["minimum","exclusiveMinimum"]}]},"password":{"description":"레코드 열람에 사용할 비밀번호 설정.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"webhook_url":{"description":"결제 정보가 갱신되었을 때, 이를 수신할 URL","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"url","x-typia-typeTags":[{"target":"string","name":"Format<\"url\">","kind":"format","value":"url","validate":"/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)","exclusive":["format","pattern"]}]}},"nullable":false,"required":["vendor","source","price","password","webhook_url"],"description":"결제 입력 정보.\n\nSDK 에서 받은 데이터를 취합하여 결제 진행 상황을 서버에 알려준다.","x-typia-jsDocTags":[]},"IPaymentVendoriamporttoss.payments":{"type":"object","properties":{"code":{"description":"벤더사 식별자 코드.\n\n아임포트의 경우에는 `iamport` 를, 토스의 경우에는 `toss.payments` 를 적어주면 된다.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["iamport","toss.payments"]},"store_id":{"description":"벤더사에 등록한 스토어 ID.\n\n결제 PG 사들은 서비스 주소가 다르거나, 또는 동일한 서비스이되 연결되는 백엔드 서버\n주소가 다르거든, 각기 다른 스토어 계정을 신청해 사용하라고 한다. 이는 요즘같이 MSA\n(Micro Service Architecture) 가 대세인 시대에 매우 불합리한 방식이기는 하지만, 어쨋든\n이러한 이유로 인하여, 한 회사 내지 단체가 복수의 스토어 ID 를 가지는 경우가 왕왕\n있다.\n\n때문에 `payments-server` 는, {@link IPaymentHistory 결제 내역}을 발행하거나\n{@link IPaymentReservation 간편 결제 수단}을 등록할 때 모두, 사용된 스토어의 ID\n를 반드시 기재하도록 하고 있다.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"uid":{"description":"벤더사로부터 발급받은 식별자 번호.\n\n결제 PG 사들이 제공하는 팝업창을 이용하여 결제를 진행하거나 혹은 간편 결제 수단을\n등록하거든, 결제 PG 사들은 해당 건에 대하여 별도의 식별자 번호를 발급한다.\n`IPaymentVendor.uid` 는 이처럼 결제 PG 사들이 발급해 준 식별자 번호를 기재하는\n속성이다.\n\n단 예외가 하나 있어, 아임포트는 간편 결제 카드 등록 건에 대하여 별도의 식별자 번호를\n부여하지 않고, 귀하의 서비스에서 발급해 준 ID 를 그대로 사용한다. 때문에 아임포트를\n통한 간편 결제 카드 등록의 건만 예외적으로, `IPaymentVendor.uid` 에\n{@link IPaymentSource.id } 를 동일하게 할당해주어야 한다.","x-typia-required":true,"x-typia-optional":false,"type":"string"}},"nullable":false,"required":["code","store_id","uid"],"description":"벤더사 정보.\n\n`IPaymentVendor` 결제 PG 벤더사에 관련된 정보를 형상화한 자료구조 인터페이스이다.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"IPaymentCancelHistory.IStore":{"type":"object","properties":{"source":{"$ref":"#/components/schemas/IPaymentSource"},"password":{"description":"결제 이력에 대한 비밀번호 입력.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"price":{"description":"환불 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number","minimum":0,"x-typia-typeTags":[{"target":"number","name":"Minimum<0>","kind":"minimum","value":0,"validate":"0 <= $input","exclusive":["minimum","exclusiveMinimum"]}]},"reason":{"description":"결제 취소 사유.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"account":{"$ref":"#/components/schemas/IPaymentCancelHistory.IBankAccount.Nullable"}},"nullable":false,"required":["source","password","price","reason","account"],"description":"결제 취소 입력 정보.","x-typia-jsDocTags":[]},"IPaymentCancelHistory.IBankAccount.Nullable":{"type":"object","properties":{"bank":{"description":"은행 이름.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"account":{"description":"계좌번호.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"holder":{"description":"예금주.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"mobile":{"description":"연락처, 핸드폰 번호.","x-typia-required":true,"x-typia-optional":false,"type":"string"}},"nullable":true,"required":["bank","account","holder","mobile"],"description":"은행 계좌 정보.\n\n가상 계좌로 입금한 경우, 결제 취소시, 이를 환불받을 계좌가 필요함.\n\n단, 이 정보는 본 결제 시스템에 저장하지 아니함.","x-typia-jsDocTags":[]},"IPaymentReservation":{"oneOf":[{"$ref":"#/components/schemas/IPaymentReservation.IamportType"},{"$ref":"#/components/schemas/IPaymentReservation.TossType"}],"description":"간편 결제 수단 정보.\n\n`IPaymentReservation` 은 간편 결제 수단을 형상화한 자료구조이자 유니언 타입의\n인터페이스로써, if condition 을 통하여 {@link IPaymentReservation.vendor_code } 값을\n특정하면, 파생 타입이 자동으로 다운 캐스팅 된다.\n\n```typescript\nif (history.vendor_code === \"toss.payments\")\n history.data.billingKey; // history.data be ITossBilling\n```","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"IPaymentReservation.IamportType":{"type":"object","properties":{"id":{"description":"Primary Key.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"uuid","x-typia-typeTags":[{"target":"string","name":"Format<\"uuid\">","kind":"format","value":"uuid","validate":"/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test($input)","exclusive":["format","pattern"]}]},"vendor_code":{"description":"벤더사 코드.\n\n{@link IPaymentVendor.code }와 완전히 동일한 값이되, 단지 union type\nspecialization 을 위해 중복 표기하였을 뿐이다. If else condition 을 통하여\n{@link IPaymentReservation.data }의 타입을 특정할 수 있다.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["iamport"]},"vendor":{"$ref":"#/components/schemas/IPaymentVendoriamport"},"source":{"$ref":"#/components/schemas/IPaymentSource"},"title":{"description":"제목.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"data":{"$ref":"#/components/schemas/IIamportSubscription"},"created_at":{"description":"레코드 생성 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}]}},"nullable":false,"required":["id","vendor_code","vendor","source","title","data","created_at"],"description":"아임 포트의 간편 결제 카드 정보.","x-typia-jsDocTags":[]},"IIamportSubscription":{"type":"object","properties":{"pg_provider":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"pg_id":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"card_name":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"card_code":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"card_number":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"card_type":{"x-typia-required":true,"x-typia-optional":false,"type":"string"},"customer_name":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"customer_tel":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"customer_email":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"customer_addr":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"customer_postcode":{"x-typia-required":true,"x-typia-optional":false,"type":"string","nullable":true},"inserted":{"x-typia-required":true,"x-typia-optional":false,"type":"number"},"updated":{"x-typia-required":true,"x-typia-optional":false,"type":"number"},"customer_uid":{"description":"고객 식별자 키.\n\n아임포트가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.\n\n다만 고객이라기보다 실제로는 카드의 식별자 키로 써야함.","x-typia-required":true,"x-typia-optional":false,"type":"string"}},"nullable":false,"required":["pg_provider","pg_id","card_name","card_code","card_number","card_type","customer_name","customer_tel","customer_email","customer_addr","customer_postcode","inserted","updated","customer_uid"],"description":"간편 결제 카드 정보.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"IPaymentReservation.TossType":{"type":"object","properties":{"id":{"description":"Primary Key.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"uuid","x-typia-typeTags":[{"target":"string","name":"Format<\"uuid\">","kind":"format","value":"uuid","validate":"/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test($input)","exclusive":["format","pattern"]}]},"vendor_code":{"description":"벤더사 코드.\n\n{@link IPaymentVendor.code }와 완전히 동일한 값이되, 단지 union type\nspecialization 을 위해 중복 표기하였을 뿐이다. If else condition 을 통하여\n{@link IPaymentReservation.data }의 타입을 특정할 수 있다.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["toss.payments"]},"vendor":{"$ref":"#/components/schemas/IPaymentVendortoss.payments"},"source":{"$ref":"#/components/schemas/IPaymentSource"},"title":{"description":"제목.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"data":{"$ref":"#/components/schemas/ITossBilling"},"created_at":{"description":"레코드 생성 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}]}},"nullable":false,"required":["id","vendor_code","vendor","source","title","data","created_at"],"description":"토스의 간편 결제 수단 정보.","x-typia-jsDocTags":[]},"ITossBilling":{"type":"object","properties":{"mId":{"description":"가맹점 ID.\n\n현재 tosspayments 가 쓰임.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"billingKey":{"description":"{@link ITossBilling } 의 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"method":{"description":"결제 수단.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["카드"]},"cardCompany":{"description":"카드사 이름.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"cardNumber":{"description":"카드 번호.","x-typia-required":true,"x-typia-optional":false,"type":"string","pattern":"[0-9]{16}","x-typia-typeTags":[{"target":"string","name":"Pattern<\"[0-9]{16}\">","kind":"pattern","value":"[0-9]{16}","validate":"/[0-9]{16}/.test($input)","exclusive":["format","pattern"]}]},"authenticatedAt":{"description":"인증 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}]},"customerKey":{"description":"고객 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"}},"nullable":false,"required":["mId","billingKey","method","cardCompany","cardNumber","authenticatedAt","customerKey"],"description":"간편 결제 등록 수단 정보.\n\n`ITossBilling` 은 간편 결제 등록 수단을 형상화한 자료구조 인터페이스로써, 고객이 자신의\n신용 카드를 서버에 등록해두고, 매번 결제가 필요할 때마다 카드 정보를 반복 입려하는 일\n없이 간편하게 결제를 진행하고자 할 때 사용한다.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"IPaymentReservation.IStore":{"type":"object","properties":{"vendor":{"$ref":"#/components/schemas/IPaymentVendorIPaymentVendor.Code"},"source":{"$ref":"#/components/schemas/IPaymentSource"},"title":{"description":"제목","x-typia-required":true,"x-typia-optional":false,"type":"string"},"password":{"description":"간편결제 비밀번호.\n\n주의할 점은 카드 비밀번호가 아니라는 것.","x-typia-required":true,"x-typia-optional":false,"type":"string"}},"nullable":false,"required":["vendor","source","title","password"],"description":"간편 결제 수단 등록 정보.\n\n결제사의 팝업 창로부터 전달받은 식별자 정보를 취합하여 전달한다.\n\n참고로 아임포트의 경우 간편 결제로 등록한 카드에 자체 식별자 번호를 부여하지 않는다.\n따라서 귀하의 서비스가 발행한 식별자 ID 가 곧, 해당 간편 결제 수단의 유일무이한\n식별자ㅏ 되니, 이를 {@link IPaymentVendor.uid } 와 {@link IPaymentSource.id } 에\n모두 동일하게 할당해주면 된다.","x-typia-jsDocTags":[]},"IPaymentVendorIPaymentVendor.Code":{"type":"object","properties":{"code":{"description":"벤더사 식별자 코드.\n\n아임포트의 경우에는 `iamport` 를, 토스의 경우에는 `toss.payments` 를 적어주면 된다.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["iamport","toss.payments"]},"store_id":{"description":"벤더사에 등록한 스토어 ID.\n\n결제 PG 사들은 서비스 주소가 다르거나, 또는 동일한 서비스이되 연결되는 백엔드 서버\n주소가 다르거든, 각기 다른 스토어 계정을 신청해 사용하라고 한다. 이는 요즘같이 MSA\n(Micro Service Architecture) 가 대세인 시대에 매우 불합리한 방식이기는 하지만, 어쨋든\n이러한 이유로 인하여, 한 회사 내지 단체가 복수의 스토어 ID 를 가지는 경우가 왕왕\n있다.\n\n때문에 `payments-server` 는, {@link IPaymentHistory 결제 내역}을 발행하거나\n{@link IPaymentReservation 간편 결제 수단}을 등록할 때 모두, 사용된 스토어의 ID\n를 반드시 기재하도록 하고 있다.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"uid":{"description":"벤더사로부터 발급받은 식별자 번호.\n\n결제 PG 사들이 제공하는 팝업창을 이용하여 결제를 진행하거나 혹은 간편 결제 수단을\n등록하거든, 결제 PG 사들은 해당 건에 대하여 별도의 식별자 번호를 발급한다.\n`IPaymentVendor.uid` 는 이처럼 결제 PG 사들이 발급해 준 식별자 번호를 기재하는\n속성이다.\n\n단 예외가 하나 있어, 아임포트는 간편 결제 카드 등록 건에 대하여 별도의 식별자 번호를\n부여하지 않고, 귀하의 서비스에서 발급해 준 ID 를 그대로 사용한다. 때문에 아임포트를\n통한 간편 결제 카드 등록의 건만 예외적으로, `IPaymentVendor.uid` 에\n{@link IPaymentSource.id } 를 동일하게 할당해주어야 한다.","x-typia-required":true,"x-typia-optional":false,"type":"string"}},"nullable":false,"required":["code","store_id","uid"],"description":"벤더사 정보.\n\n`IPaymentVendor` 결제 PG 벤더사에 관련된 정보를 형상화한 자료구조 인터페이스이다.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"IIamportPayment.IWebhook":{"type":"object","properties":{"imp_uid":{"description":"결제 정보 {@link IIamportPayment } 의 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"merchant_uid":{"description":"주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"status":{"description":"현재 상태.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["paid","ready","failed","cancelled"]}},"nullable":false,"required":["imp_uid","merchant_uid","status"],"description":"웹훅 데이터.","x-typia-jsDocTags":[]}}}} \ No newline at end of file diff --git a/packages/payment-backend/package.json b/packages/payment-backend/package.json index b762348..9635d8f 100644 --- a/packages/payment-backend/package.json +++ b/packages/payment-backend/package.json @@ -1,6 +1,6 @@ { "name": "@samchon/payment-backend", - "version": "5.1.4", + "version": "5.1.5", "description": "Payment Backend Server", "main": "lib/index.js", "typings": "lib/index.d.ts", @@ -18,7 +18,7 @@ "dev": "npm run build:test -- --watch", "eslint": "eslint src && eslint test", "eslint:fix": "eslint src --fix && eslint test --fix", - "prepare": "ts-patch install && npm run build:prisma", + "prepare": "ts-patch install && typia patch && npm run build:prisma", "------------------------WEBPACK------------------------": "", "webpack": "rimraf dist && npm run build:prisma && webpack", "webpack:start": "cd dist && node server", @@ -53,7 +53,7 @@ }, "homepage": "https://github.com/samchon/payments", "devDependencies": { - "@nestia/sdk": "^2.3.9", + "@nestia/sdk": "^2.4.1", "@types/atob": "^2.1.2", "@types/bcryptjs": "^2.4.4", "@types/btoa": "^1.2.3", @@ -68,23 +68,24 @@ "cli": "^1.0.1", "copy-webpack-plugin": "^11.0.0", "copyfiles": "^2.4.1", - "iamport-server-api": "^5.1.4", - "nestia": "^5.0.3", + "iamport-server-api": "^5.1.5", + "nestia": "^5.1.2", "pm2": "^4.5.6", "rimraf": "^3.0.2", "sloc": "^0.2.1", - "toss-payments-server-api": "^5.1.4", + "toss-payments-server-api": "^5.1.5", "ts-loader": "^9.5.0", "ts-node": "^10.9.1", "ts-patch": "^3.0.2", - "typescript": "^5.2.2", + "typescript": "^5.3.2", "typescript-transform-paths": "^3.4.6", "webpack": "^5.89.0", "webpack-cli": "^5.1.4", "write-file-webpack-plugin": "^4.5.1" }, "dependencies": { - "@nestia/core": "^2.3.9", + "@nestia/core": "^2.4.1", + "@nestia/e2e": "^0.4.0", "@nestjs/common": "^10.2.8", "@nestjs/core": "^10.2.8", "@nestjs/platform-fastify": "^10.2.8", @@ -92,8 +93,8 @@ "bcryptjs": "^2.4.3", "dotenv": "^16.3.1", "dotenv-expand": "^10.0.0", - "fake-iamport-server": "^5.1.4", - "fake-toss-payments-server": "^5.1.4", + "fake-iamport-server": "^5.1.5", + "fake-toss-payments-server": "^5.1.5", "fastify": "^4.24.3", "git-last-commit": "^1.0.0", "inquirer": "^8.2.5", @@ -103,7 +104,7 @@ "serialize-error": "^4.1.0", "source-map-support": "^0.5.19", "tstl": "^2.5.13", - "typia": "^5.2.6" + "typia": "^5.3.1" }, "files": [ "lib", diff --git a/packages/toss-payments-server-api/package.json b/packages/toss-payments-server-api/package.json index a810115..b796a3a 100644 --- a/packages/toss-payments-server-api/package.json +++ b/packages/toss-payments-server-api/package.json @@ -1,6 +1,6 @@ { "name": "toss-payments-server-api", - "version": "5.1.4", + "version": "5.1.5", "description": "API for Toss Payments Server", "main": "lib/index.js", "typings": "lib/index.d.ts", @@ -9,7 +9,7 @@ "build:sdk": "rimraf ../fake-toss-payments-server/src/api/functional && cd ../fake-toss-payments-server && npx nestia sdk && cd ../toss-payments-server-api", "compile": "rimraf lib && tsc", "deploy": "npm run build && npm publish", - "prepare": "ts-patch install" + "prepare": "ts-patch install && typia patch" }, "repository": { "type": "git", @@ -31,10 +31,10 @@ "rimraf": "^5.0.1", "ts-node": "^10.9.1", "ts-patch": "^3.0.2", - "typescript": "^5.2.2" + "typescript": "^5.3.2" }, "dependencies": { - "@nestia/fetcher": "^2.3.9", - "typia": "^5.2.6" + "@nestia/fetcher": "^2.4.1", + "typia": "^5.3.1" } } \ No newline at end of file diff --git a/packages/toss-payments-server-api/swagger.json b/packages/toss-payments-server-api/swagger.json index 5e897a3..5876d80 100644 --- a/packages/toss-payments-server-api/swagger.json +++ b/packages/toss-payments-server-api/swagger.json @@ -1,3848 +1 @@ -{ - "openapi": "3.0.1", - "servers": [ - { - "url": "http://localhost:30771", - "description": "fake" - }, - { - "url": "https://api.tosspayments.com", - "description": "real" - } - ], - "info": { - "title": "Toss Payments API", - "description": "Built by [fake-toss-payments-server](https://github.com/samchon/payments/tree/master/packages/toss-payments-server-api) with [nestia](https://github.com/samchon/nestia)", - "version": "5.1.4", - "license": { - "name": "MIT" - } - }, - "paths": { - "/v1/billing/authorizations/card": { - "post": { - "tags": [], - "parameters": [], - "requestBody": { - "description": "간편 결제 카드 등록 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ITossBilling.IStore" - } - } - }, - "required": true, - "x-nestia-encrypted": false - }, - "responses": { - "201": { - "description": "간편 결제 카드 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ITossBilling" - } - } - }, - "x-nestia-encrypted": false - } - }, - "summary": "간편 결제 카드 등록하기", - "description": "간편 결제 카드 등록하기.\n\n`billing.authorizations.card.store` 는 고객이 자신의 신록 카드를 서버에 등록해두고,\n매번 결제가 필요할 때마다 카드 정보를 반복 입력하는 일 없이 간편하게 결제를\n진행하고자 할 때, 호출되는 API 함수이다.\n\n참고로 `billing.authorizations.card.store` 는 클라이언트 어플리케이션이 토스\n페이먼츠가 제공하는 간편 결제 카드 등록 창을 사용하는 경우, 귀하의 백엔드 서버가 이를\n실 서비스에서 호출하는 일은 없을 것이다. 다만, 고객이 간편 결제 카드를 등록하는\n상황을 시뮬레이션하기 위하여, 테스트 자동화 프로그램 수준에서 사용될 수는 있다.", - "security": [ - { - "basic": [] - } - ], - "x-nestia-namespace": "v1.billing.authorizations.card.store", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "input", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "간편 결제 카드 등록 정보", - "kind": "text" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "간편 결제 카드 정보", - "kind": "text" - } - ] - }, - { - "name": "security", - "text": [ - { - "text": "basic", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "POST" - } - }, - "/v1/billing/authorizations/{billingKey}": { - "post": { - "tags": [], - "parameters": [ - { - "name": "billingKey", - "in": "path", - "schema": { - "type": "string" - }, - "description": "대상 정보의 ", - "required": true - } - ], - "requestBody": { - "description": "고객 식별자 키", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ITossBilling.ICustomerKey" - } - } - }, - "required": true, - "x-nestia-encrypted": false - }, - "responses": { - "201": { - "description": "간편 결제 수단 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ITossBilling" - } - } - }, - "x-nestia-encrypted": false - } - }, - "summary": "간편 결제로 등록한 수단 조회하기", - "description": "간편 결제로 등록한 수단 조회하기.\n\n`billing.authorizations.at` 은 고객이 간편 결제를 위하여 토스 페이먼츠 서버에\n등록한 결제 수단을 조회하는 함수이다.\n\n주로 클라이언트 어플리케이션이 토스 페이먼츠가 자체적으로 제공하는 결제 창을 사용하는\n경우, 그래서 프론트 어플리케이션이 귀하의 백엔드 서버에 `billingKey` 와` customerKey`\n만을 전달해주어, 상세 간편 결제 수단 정보가 필요할 때 사용한다.", - "security": [ - { - "basic": [] - } - ], - "x-nestia-namespace": "v1.billing.authorizations.at", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "billingKey", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "대상 정보의 ", - "kind": "text" - }, - { - "text": "{@link ", - "kind": "link" - }, - { - "text": "ITossBilling.billingKey", - "kind": "linkName", - "target": { - "fileName": "D:/github/samchon/payments/packages/fake-toss-payments-server/src/api/structures/ITossBilling.ts", - "textSpan": { - "start": 415, - "length": 19 - } - } - }, - { - "text": "}", - "kind": "link" - } - ] - }, - { - "name": "param", - "text": [ - { - "text": "input", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "고객 식별자 키", - "kind": "text" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "간편 결제 수단 정보", - "kind": "text" - } - ] - }, - { - "name": "security", - "text": [ - { - "text": "basic", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "POST" - } - }, - "/v1/billing/{billingKey}": { - "post": { - "tags": [], - "parameters": [ - { - "name": "billingKey", - "in": "path", - "schema": { - "type": "string" - }, - "description": "간편 결제에 등록한 수단의 ", - "required": true - } - ], - "requestBody": { - "description": "주문 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ITossBilling.IPaymentStore" - } - } - }, - "required": true, - "x-nestia-encrypted": false - }, - "responses": { - "201": { - "description": "결제 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ITossPayment" - } - } - }, - "x-nestia-encrypted": false - } - }, - "summary": "간편 결제에 등록한 수단으로 결제하기", - "description": "간편 결제에 등록한 수단으로 결제하기.\n\n`billing.pay` 는 간편 결제에 등록한 수단으로 결제를 진행하고자 할 때 호출하는 API\n함수이다.\n\n그리고 `billing.pay` 는 결제 수단 중 유일하게, 클라이언트 어플리케이션이 토스\n페이먼츠가 제공하는 결제 창을 사용할 수 없어, 귀하의 백엔드 서버가 토스 페이먼츠의\nAPI 함수를 직접 호출해야 하는 경우에 해당한다. 따라서 간편 결제에 관련하여 토스\n페이먼츠와 연동하는 백엔드 서버 및 프론트 어플리케이션을 개발할 때, 반드시 이 상황에\n대한 별도의 설계 및 개발이 필요하니, 이 점을 염두에 두기 바란다.\n\n더하여 `billing.pay` 는 철저히 귀사 백엔드 서버의 판단 아래 호출되는 API 함수인지라,\n이를 통하여 이루어지는 결제는 일절 {@link payments.approve } 가 필요 없다. 다만\n`billing.pay` 는 이처럼 부차적인 승인 과정 필요없이 그 즉시로 결제가 완성되니, 이를\n호출하는 상황에 대하여 세심히 주의를 기울일 필요가 있다", - "security": [ - { - "basic": [] - } - ], - "x-nestia-namespace": "v1.billing.pay", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "billingKey", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "간편 결제에 등록한 수단의 ", - "kind": "text" - }, - { - "text": "{@link ", - "kind": "link" - }, - { - "text": "ITossBilling.billingKey", - "kind": "linkName", - "target": { - "fileName": "D:/github/samchon/payments/packages/fake-toss-payments-server/src/api/structures/ITossBilling.ts", - "textSpan": { - "start": 415, - "length": 19 - } - } - }, - { - "text": "}", - "kind": "link" - } - ] - }, - { - "name": "param", - "text": [ - { - "text": "input", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "주문 정보", - "kind": "text" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "결제 정보", - "kind": "text" - } - ] - }, - { - "name": "security", - "text": [ - { - "text": "basic", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "POST" - } - }, - "/v1/cash-receipts": { - "post": { - "tags": [], - "parameters": [], - "requestBody": { - "description": "입력 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ITossCashReceipt.IStore" - } - } - }, - "required": true, - "x-nestia-encrypted": false - }, - "responses": { - "201": { - "description": "현금 영수증 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ITossCashReceipt" - } - } - }, - "x-nestia-encrypted": false - } - }, - "summary": "현금 영수증 발행하기", - "description": "현금 영수증 발행하기.", - "security": [ - { - "basic": [] - } - ], - "x-nestia-namespace": "v1.cash-receipts.store", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "input", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "입력 정보", - "kind": "text" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "현금 영수증 정보", - "kind": "text" - } - ] - }, - { - "name": "security", - "text": [ - { - "text": "basic", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "POST" - } - }, - "/v1/cash-receipts/{receiptKey}/cancel": { - "post": { - "tags": [], - "parameters": [ - { - "name": "receiptKey", - "in": "path", - "schema": { - "type": "string" - }, - "description": "현금 영수증의 ", - "required": true - } - ], - "requestBody": { - "description": "취소 입력 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ITossCashReceipt.ICancel" - } - } - }, - "required": true, - "x-nestia-encrypted": false - }, - "responses": { - "201": { - "description": "취소된 현금 영수증 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ITossCashReceipt" - } - } - }, - "x-nestia-encrypted": false - } - }, - "summary": "현금 영수증 취소하기", - "description": "현금 영수증 취소하기.", - "security": [ - { - "basic": [] - } - ], - "x-nestia-namespace": "v1.cash-receipts.cancel.cancel", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "receiptKey", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "현금 영수증의 ", - "kind": "text" - }, - { - "text": "{@link ", - "kind": "link" - }, - { - "text": "ITossCashReceipt.receiptKey", - "kind": "linkName", - "target": { - "fileName": "D:/github/samchon/payments/packages/fake-toss-payments-server/src/api/structures/ITossCashReceipt.ts", - "textSpan": { - "start": 145, - "length": 19 - } - } - }, - { - "text": "}", - "kind": "link" - } - ] - }, - { - "name": "param", - "text": [ - { - "text": "input", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "취소 입력 정보", - "kind": "text" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "취소된 현금 영수증 정보", - "kind": "text" - } - ] - }, - { - "name": "security", - "text": [ - { - "text": "basic", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "POST" - } - }, - "/internal/webhook": { - "post": { - "tags": [], - "parameters": [], - "requestBody": { - "description": "웹훅 이벤트 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ITossPaymentWebhook" - } - } - }, - "required": true, - "x-nestia-encrypted": false - }, - "responses": { - "201": { - "description": "", - "x-nestia-encrypted": false - } - }, - "summary": "웹훅 이벤트 더미 리스너", - "description": "웹훅 이벤트 더미 리스너.\n\n`internal.webhook` 은 실제 토스 페이먼츠의 결제 서버에는 존재하지 않는 API 로써,\n`fake-toss-payments-server` 의 {@link Configuration.WEBHOOK_URL } 에 아무런 URL 을\n설정하지 않으면, `fake-toss-payments-server` 로부터 발생하는 모든 종류의 웹훅\n이벤트는 이 곳으로 전달되어 무의미하게 사라진다.\n\n따라서 `fake-toss-payments-server` 를 사용하여 토스 페이먼츠 서버와의 연동을 미리\n검증코자 할 때는, 반드시 {@link Configuration.WEBHOOK_URL } 를 설정하여 웹훅\n이벤트가 귀하의 백엔드 서버로 제대로 전달되도록 하자.", - "x-nestia-namespace": "internal.webhook.webhook", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "input", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "웹훅 이벤트 정보", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "POST" - } - }, - "/internal/{paymentKey}/deposit": { - "put": { - "tags": [], - "parameters": [ - { - "name": "paymentKey", - "in": "path", - "schema": { - "type": "string" - }, - "description": "대상 가상 계좌 결제 정보의 ", - "required": true - } - ], - "responses": { - "201": { - "description": "입금 완료된 가상 꼐좌 결제 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ITossPayment" - } - } - }, - "x-nestia-encrypted": false - } - }, - "summary": "가상 계좌에 입금하기", - "description": "가상 계좌에 입금하기.\n\n`internal.virtual_accounts.deposit` 은 실제 토스 페이먼츠의 결제 서버에는 존재하지\n않는 API 로써, 가상 계좌 결제를 신청한 고객이, 이후 가상 계좌에 목표 금액을 입금하는\n상황을 시뮬레이션할 수 있는 함수이다.\n\n즉 `internal.virtual_accounts.deposit` 는 고객이 스스로에게 가상으로 발급된 계좌에\n입금을 하고, 그에 따라 토스 페이먼츠 서버에서 webhook 이벤트가 발생하여 이를 귀하의\n백엔드 서버로 전송하는 일련의 상황을 테스트하기 위한 함수인 셈이다.", - "security": [ - { - "basic": [] - } - ], - "x-nestia-namespace": "internal.deposit.deposit", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "paymentKey", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "대상 가상 계좌 결제 정보의 ", - "kind": "text" - }, - { - "text": "{@link ", - "kind": "link" - }, - { - "text": "ITossPayment.paymentKey", - "kind": "linkName", - "target": { - "fileName": "D:/github/samchon/payments/packages/fake-toss-payments-server/src/api/structures/ITossPayment.ts", - "textSpan": { - "start": 2071, - "length": 19 - } - } - }, - { - "text": "}", - "kind": "link" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "입금 완료된 가상 꼐좌 결제 정보", - "kind": "text" - } - ] - }, - { - "name": "security", - "text": [ - { - "text": "basic", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "PUT" - } - }, - "/v1/payments/{paymentKey}": { - "get": { - "tags": [], - "parameters": [ - { - "name": "paymentKey", - "in": "path", - "schema": { - "type": "string" - }, - "description": "결제 정보의 ", - "required": true - } - ], - "responses": { - "200": { - "description": "결제 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ITossPayment" - } - } - }, - "x-nestia-encrypted": false - } - }, - "summary": "결제 정보 조회하기", - "description": "결제 정보 조회하기.\n\n`payments.at` 은 결제 정보를 조회하는 함수이다.\n\n주로 클라이언트 어플리케이션이 토스 페이먼츠가 자체적으로 제공하는 결제 창을 사용하는\n경우, 그래서 프론트 어플리케이션이 귀하의 백엔드 서버에 `paymentKey` 등 극히 일부의\n식별자 정보만을 전달해주어, 상세 결제 정보가 필요할 때 사용한다.\n\n참고로 토스 페이먼츠는 다른 결제 PG 사들과 다르게, 클라이언트 어플리케이션에서 토스\n페이먼츠의 결제 창을 이용하여 진행한 결제가 바로 확정되는 것은 아니다. 귀사의 백엔드\n서버가 현재의 `payments.at` 을 통하여 해당 결제 정보를 확인하고, {@link approve } 를\n호출하여 직접 승인하기 전까지, 해당 결제는 확정되지 않으니, 이 점에 유의하기 바란다.", - "x-nestia-namespace": "v1.payments.at", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "paymentKey", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "결제 정보의 ", - "kind": "text" - }, - { - "text": "{@link ", - "kind": "link" - }, - { - "text": "ITossPayment.paymentKey", - "kind": "linkName", - "target": { - "fileName": "D:/github/samchon/payments/packages/fake-toss-payments-server/src/api/structures/ITossPayment.ts", - "textSpan": { - "start": 2071, - "length": 19 - } - } - }, - { - "text": "}", - "kind": "link" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "결제 정보", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "GET" - }, - "post": { - "tags": [], - "parameters": [ - { - "name": "paymentKey", - "in": "path", - "schema": { - "type": "string" - }, - "description": "대상 결제의 ", - "required": true - } - ], - "requestBody": { - "description": "주문 정보 확인", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ITossPayment.IApproval" - } - } - }, - "required": true, - "x-nestia-encrypted": false - }, - "responses": { - "201": { - "description": "승인된 결제 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ITossPayment" - } - } - }, - "x-nestia-encrypted": false - } - }, - "summary": "결제 승인하기", - "description": "결제 승인하기.\n\n토스 페이먼츠는 귀사의 백엔드에서 일어난 결제가 아닌 프론트 어플리케이션의 결제 창에서\n이루어진 결제의 경우, 해당 서비스으 백엔드 서버로부터 결제를 승인받기 전까지, 이를\n확정하지 않는다. `payments.approve` 는 바로 이러한 상황에서, 해당 결제를 승인해주는\n함수이다.\n\n만일 귀하가 `fake-toss-payments-server` 를 이용하여 결제를 시뮬레이션하는 경우라면,\n결제 관련 API 를 호출함에 있어 {@link ITossCardPayment.IStore.__approved } 내지\n{@link ITossVirtualAccountPayment.IStore.__approved } 를 `false` 로 함으로써, 별도\n승인이 필요한 이러한 상황을 시뮬레이션 할 수 있다.", - "security": [ - { - "basic": [] - } - ], - "x-nestia-namespace": "v1.payments.approve", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "paymentKey", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "대상 결제의 ", - "kind": "text" - }, - { - "text": "{@link ", - "kind": "link" - }, - { - "text": "ITossPayment.paymentKey", - "kind": "linkName", - "target": { - "fileName": "D:/github/samchon/payments/packages/fake-toss-payments-server/src/api/structures/ITossPayment.ts", - "textSpan": { - "start": 2071, - "length": 19 - } - } - }, - { - "text": "}", - "kind": "link" - } - ] - }, - { - "name": "param", - "text": [ - { - "text": "input", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "주문 정보 확인", - "kind": "text" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "승인된 결제 정보", - "kind": "text" - } - ] - }, - { - "name": "security", - "text": [ - { - "text": "basic", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "POST" - } - }, - "/v1/payments/key-in": { - "post": { - "tags": [], - "parameters": [], - "requestBody": { - "description": "카드 결제 입력 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ITossCardPayment.IStore" - } - } - }, - "required": true, - "x-nestia-encrypted": false - }, - "responses": { - "201": { - "description": "카드 결제 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ITossCardPayment" - } - } - }, - "x-nestia-encrypted": false - } - }, - "summary": "카드로 결제하기", - "description": "카드로 결제하기.\n\n`payments.key_in` 은 카드를 이용한 결제를 할 때 호출되는 API 함수이다.\n\n참고로 `payments.key_in` 는 클라이언트 어플리케이션이 토스 페이먼츠가 자체적으로\n제공하는 결제 창을 사용하는 경우, 귀하의 백엔드 서버가 이를 실 서비스에서 호출하는\n일은 없을 것이다. 다만, 고객이 카드를 통하여 결제하는 상황을 시뮬레이션하기 위하여,\n테스트 자동화 프로그램 수준에서 사용될 수는 있다.\n\n그리고 귀하의 백엔드 서버가 `payments.key-in` 을 직접 호출하는 경우, 토스 페이먼츠\n서버는 이를 완전히 승인된 결제로 보고 바로 확정한다. 때문에 `payments.key-in` 을\n직접 호출하는 경우, 토스 페이먼츠의 결제 창을 이용하여 별도의 {@link approve } 가\n필요한 때 대비, 훨씬 더 세심한 주의가 요구된다.\n\n더하여 만약 귀하의 백엔드 서버가 `fake-toss-payments-server` 를 이용하여 고객의\n카드 결제를 시뮬레이션하는 경우, {@link ITossCardPayment.IStore.__approved } 값을\n`false` 로 하여 카드 결제의 확정을 고의로 회피할 수 있다. 이를 통하여 토스\n페이먼츠의 결제 창을 이용한 카드 결제의 경우, 별도의 {@link approve } 가 필요한\n상황을 시뮬레이션 할 수 있다.", - "security": [ - { - "basic": [] - } - ], - "x-nestia-namespace": "v1.payments.key-in.key_in", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "input", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "카드 결제 입력 정보", - "kind": "text" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "카드 결제 정보", - "kind": "text" - } - ] - }, - { - "name": "security", - "text": [ - { - "text": "basic", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "POST" - } - }, - "/v1/payments/{paymentKey}/cancel": { - "post": { - "tags": [], - "parameters": [ - { - "name": "paymentKey", - "in": "path", - "schema": { - "type": "string" - }, - "description": "결제 정보의 ", - "required": true - } - ], - "requestBody": { - "description": "취소 입력 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ITossPaymentCancel.IStore" - } - } - }, - "required": true, - "x-nestia-encrypted": false - }, - "responses": { - "201": { - "description": "취소된 결제 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ITossPayment" - } - } - }, - "x-nestia-encrypted": false - } - }, - "summary": "결제 취소하기", - "description": "결제 취소하기.\n\n`payments.cancel` 은 결제를 취소하는 API 이다.\n\n결제 취소 입력 정보 {@link ITossPaymentCancel.IStore } 에는 취소 사유를 비롯하여,\n고객에게 환불해 줄 금액과 부가세 및 필요시 환불 계좌 정보 등을 입력하게 되어있다.", - "security": [ - { - "basic": [] - } - ], - "x-nestia-namespace": "v1.payments.cancel.cancel", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "paymentKey", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "결제 정보의 ", - "kind": "text" - }, - { - "text": "{@link ", - "kind": "link" - }, - { - "text": "ITossPayment.paymentKey", - "kind": "linkName", - "target": { - "fileName": "D:/github/samchon/payments/packages/fake-toss-payments-server/src/api/structures/ITossPayment.ts", - "textSpan": { - "start": 2071, - "length": 19 - } - } - }, - { - "text": "}", - "kind": "link" - } - ] - }, - { - "name": "param", - "text": [ - { - "text": "input", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "취소 입력 정보", - "kind": "text" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "취소된 결제 정보", - "kind": "text" - } - ] - }, - { - "name": "security", - "text": [ - { - "text": "basic", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "POST" - } - }, - "/v1/virtual-accounts": { - "post": { - "tags": [], - "parameters": [], - "requestBody": { - "description": "가상 결제 신청 정보.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ITossVirtualAccountPayment.IStore" - } - } - }, - "required": true, - "x-nestia-encrypted": false - }, - "responses": { - "201": { - "description": "가상 계좌 결제 정보", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ITossVirtualAccountPayment" - } - } - }, - "x-nestia-encrypted": false - } - }, - "summary": "가상 계좌로 결제 신청하기", - "description": "가상 계좌로 결제 신청하기.\n\n`virtual_accounts.store` 는 고객이 결제 수단을 가상 계좌로 선택하는 경우에 호출되는\nAPI 함수이다. 물론 고객이 이처럼 가상 계좌를 선택한 경우, 고객이 지정된 계좌에 돈을\n입금하기 전까지는 결제가 마무리된 것이 아니기에, {@link ITossPayment.status } 값은\n`WAITING_FOR_DEPOSIT` 이 된다.\n\n참고로 `virtual_accounts.store` 는 클라이언트 어플리케이션이 토스 페이먼츠가\n자체적으로 제공하는 결제 창을 사용하는 경우, 귀하의 백엔드 서버가 이를 실 서비스에서\n호출하는 일은 없을 것이다. 다만, 고객이 가상 계좌로 결제를 진행하는 상황을\n시뮬레이션하기 위하여, 테스트 자동화 프로그램 수준에서 사용될 수는 있다.\n\n그리고 `virtual_accounts.store` 이후에 고객이 지정된 계좌에 금액을 입금하거든, 토스\n페이먼츠 서버로부터 웹훅 이벤트가 발생되어 귀하의 백엔드 서버로 전송된다. 만약 연동\n대상 토스 페이먼츠 서버가 실제가 아닌 `fake-toss-payments-server` 라면,\n{@link internal.virtual_accounts.deposit } 를 호출하여, 고객이 가상 계좌에 입금하는\n상황을 시뮬레이션 할 수 있다.", - "security": [ - { - "basic": [] - } - ], - "x-nestia-namespace": "v1.virtual-accounts.store", - "x-nestia-jsDocTags": [ - { - "name": "param", - "text": [ - { - "text": "input", - "kind": "parameterName" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "가상 결제 신청 정보.", - "kind": "text" - } - ] - }, - { - "name": "returns", - "text": [ - { - "text": "가상 계좌 결제 정보", - "kind": "text" - } - ] - }, - { - "name": "security", - "text": [ - { - "text": "basic", - "kind": "text" - } - ] - }, - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ], - "x-nestia-method": "POST" - } - } - }, - "components": { - "schemas": { - "ITossBilling.IStore": { - "type": "object", - "properties": { - "cardNumber": { - "description": "카드 번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "pattern": "[0-9]{16}", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Pattern<\"[0-9]{16}\">", - "kind": "pattern", - "value": "[0-9]{16}", - "validate": "/[0-9]{16}/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "cardExpirationYear": { - "description": "카드 만료 년도 (2 자리).", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "pattern": "\\d{2}", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Pattern<\"\\\\d{2}\">", - "kind": "pattern", - "value": "\\d{2}", - "validate": "/\\d{2}/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "cardExpirationMonth": { - "description": "카드 만료 월 (2 자리).", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "pattern": "^(0[1-9]|1[012])$", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Pattern<\"^(0[1-9]|1[012])$\">", - "kind": "pattern", - "value": "^(0[1-9]|1[012])$", - "validate": "/^(0[1-9]|1[012])$/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "cardPassword": { - "description": "카드 비밀번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "customerBirthday": { - "description": "고객의 생년월일.\n\n표기 형식 YYMMDD.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "pattern": "^([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Pattern<\"^([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$\">", - "kind": "pattern", - "value": "^([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$", - "validate": "/^([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "consumerName": { - "description": "고객의 이름.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "customerEmail": { - "description": "고객의 이메일.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string", - "format": "email", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"email\">", - "kind": "format", - "value": "email", - "validate": "/^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "vbv": { - "$ref": "#/components/schemas/__type" - }, - "customerKey": { - "description": "고객 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "nullable": false, - "required": [ - "cardNumber", - "cardExpirationYear", - "cardExpirationMonth", - "cardPassword", - "customerBirthday", - "customerKey" - ], - "description": "간편 결제 카드 등록 정보.", - "x-typia-jsDocTags": [] - }, - "__type": { - "type": "object", - "properties": { - "cavv": { - "description": "3D Secure 인증 세션에 대한 인증 값.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "xid": { - "description": "트랜잭션 ID.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "eci": { - "description": "3DS 인증 결과에 대한 코드 값.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "nullable": false, - "required": [ - "cavv", - "xid", - "eci" - ], - "x-typia-jsDocTags": [] - }, - "ITossBilling": { - "type": "object", - "properties": { - "mId": { - "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "billingKey": { - "description": "{@link ITossBilling } 의 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "method": { - "description": "결제 수단.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "카드" - ] - }, - "cardCompany": { - "description": "카드사 이름.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "cardNumber": { - "description": "카드 번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "pattern": "[0-9]{16}", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Pattern<\"[0-9]{16}\">", - "kind": "pattern", - "value": "[0-9]{16}", - "validate": "/[0-9]{16}/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "authenticatedAt": { - "description": "인증 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "customerKey": { - "description": "고객 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "nullable": false, - "required": [ - "mId", - "billingKey", - "method", - "cardCompany", - "cardNumber", - "authenticatedAt", - "customerKey" - ], - "description": "간편 결제 등록 수단 정보.\n\n`ITossBilling` 은 간편 결제 등록 수단을 형상화한 자료구조 인터페이스로써, 고객이 자신의\n신용 카드를 서버에 등록해두고, 매번 결제가 필요할 때마다 카드 정보를 반복 입려하는 일\n없이 간편하게 결제를 진행하고자 할 때 사용한다.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "ITossBilling.ICustomerKey": { - "type": "object", - "properties": { - "customerKey": { - "description": "고객 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "nullable": false, - "required": [ - "customerKey" - ], - "description": "고객 식별자 정보.", - "x-typia-jsDocTags": [] - }, - "ITossBilling.IPaymentStore": { - "type": "object", - "properties": { - "method": { - "description": "결제 수단이 간편 결제임을 의미함.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "billing" - ] - }, - "billingKey": { - "description": "{@link IPaymentStore } 의 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "orderId": { - "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "amount": { - "description": "결제 총액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "customerKey": { - "description": "고객 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "nullable": false, - "required": [ - "method", - "billingKey", - "orderId", - "amount", - "customerKey" - ], - "description": "간편 결제를 이용한 결제 신청 정보.", - "x-typia-jsDocTags": [] - }, - "ITossPayment": { - "oneOf": [ - { - "$ref": "#/components/schemas/ITossCardPayment" - }, - { - "$ref": "#/components/schemas/ITossGiftCertificatePayment" - }, - { - "$ref": "#/components/schemas/ITossMobilePhonePayment" - }, - { - "$ref": "#/components/schemas/ITossTransferPayment" - }, - { - "$ref": "#/components/schemas/ITossVirtualAccountPayment" - } - ], - "description": "결제 정보.\n\n`ITossPayment` 는 토스 페이먼츠의 결제 정보를 형상화한 자료구조이자 유니언 타입의\n인터페이스로써, if condition 을 통하여 method 값을 특정하면, 파생 타입이 자동으로\n지정된다.\n\n```typescript\nif (payment.method === \"카드\")\n payment.card; // payment be ITossCardPayment\n```", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "ITossCardPayment": { - "type": "object", - "properties": { - "card": { - "$ref": "#/components/schemas/ITossCardPayment.ICard" - }, - "discount": { - "$ref": "#/components/schemas/ITossCardPayment.IDiscount.Nullable" - }, - "easyPay": { - "description": "간편결제로 결제한 경우 간편결제 타입 정보.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "토스결제", - "페이코", - "삼성페이" - ], - "nullable": true - }, - "method": { - "description": "결제 수단.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "카드" - ] - }, - "type": { - "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "NORMAL", - "BILLING" - ] - }, - "status": { - "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "READY", - "IN_PROGRESS", - "WAITING_FOR_DEPOSIT", - "DONE", - "CANCELED", - "PARTIAL_CANCELED", - "ABORTED", - "EXPIRED" - ] - }, - "mId": { - "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "version": { - "description": "사용 중인 토스 페이먼츠 API 의 버전.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "paymentKey": { - "description": "결제 내역의 식별자 번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "orderId": { - "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "transactionKey": { - "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "orderName": { - "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "currency": { - "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "totalAmount": { - "description": "총 결제 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "balanceAmount": { - "description": "취소할 수 있는 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "suppliedAmount": { - "description": "공급가액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "taxFreeAmount": { - "description": "면세액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "vat": { - "description": "부가세.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "useEscrow": { - "description": "에스크로 사용 여부.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "cultureExpense": { - "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "requestedAt": { - "description": "결제 요청 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "approvedAt": { - "description": "결제 승인 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ], - "nullable": true - }, - "cancels": { - "description": "결제 취소 내역.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "array", - "items": { - "$ref": "#/components/schemas/ITossPaymentCancel" - }, - "nullable": true - }, - "cashReceipt": { - "$ref": "#/components/schemas/ITossCashReceipt.ISummary.Nullable" - } - }, - "nullable": false, - "required": [ - "card", - "discount", - "easyPay", - "method", - "type", - "status", - "mId", - "version", - "paymentKey", - "orderId", - "transactionKey", - "orderName", - "currency", - "totalAmount", - "balanceAmount", - "suppliedAmount", - "taxFreeAmount", - "vat", - "useEscrow", - "cultureExpense", - "requestedAt", - "approvedAt", - "cancels", - "cashReceipt" - ], - "description": "카드 결제 정보.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "ITossCardPayment.ICard": { - "type": "object", - "properties": { - "company": { - "description": "카드사 이름.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "number": { - "description": "카드 번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "pattern": "[0-9]{16}", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Pattern<\"[0-9]{16}\">", - "kind": "pattern", - "value": "[0-9]{16}", - "validate": "/[0-9]{16}/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "installmentPlanMonths": { - "description": "할부 개월 수.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "isInterestFree": { - "description": "무이자 할부 적용 여부.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "approveNo": { - "description": "승인 번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "useCardPoint": { - "description": "카드 포인트 사용 여부.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean", - "enum": [ - false - ] - }, - "cardType": { - "description": "카드 타입.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "신용", - "체크", - "기프트" - ] - }, - "ownerType": { - "description": "카드의 소유자 타입.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "개인", - "법인" - ] - }, - "acquireStatus": { - "description": "카드 결제의 매입 상태.\n\n - READY: 매입 대기\n - REQUESTED: 매입 요청됨\n - COMPLETED: 매입 완료\n - CANCEL_REQUESTED: 매입 취소 요청됨\n - CANCELD: 매입 취소됨", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "READY", - "CANCELED", - "REQUESTED", - "COMPLETED", - "CANCEL_REQUESTED" - ] - }, - "receiptUrl": { - "description": "영수증 URL.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "url", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"url\">", - "kind": "format", - "value": "url", - "validate": "/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - } - }, - "nullable": false, - "required": [ - "company", - "number", - "installmentPlanMonths", - "isInterestFree", - "approveNo", - "useCardPoint", - "cardType", - "ownerType", - "acquireStatus", - "receiptUrl" - ], - "description": "카드 정보.", - "x-typia-jsDocTags": [] - }, - "ITossCardPayment.IDiscount.Nullable": { - "type": "object", - "properties": { - "amount": { - "description": "카드사의 즉시 할인 프로모션을 적용한 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - } - }, - "nullable": true, - "required": [ - "amount" - ], - "description": "카드사의 즉시 할인 프로모션 정보.", - "x-typia-jsDocTags": [] - }, - "ITossPaymentCancel": { - "type": "object", - "properties": { - "cancelAmount": { - "description": "취소 총액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "cancelReason": { - "description": "취소 사유.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "taxFreeAmount": { - "description": "면세 처리된 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "taxAmount": { - "description": "과세 처리된 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "refundableAmount": { - "description": "결제 취소 후 환불 가능 잔액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "canceledAt": { - "description": "취소 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ] - } - }, - "nullable": false, - "required": [ - "cancelAmount", - "cancelReason", - "taxFreeAmount", - "taxAmount", - "refundableAmount", - "canceledAt" - ], - "description": "결제 취소 정보.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "ITossCashReceipt.ISummary.Nullable": { - "type": "object", - "properties": { - "type": { - "$ref": "#/components/schemas/ITossCashReceipt.Type" - }, - "amount": { - "description": "현금 영수증 처리된 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "taxFreeAmount": { - "description": "면세 처리된 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "issueNumber": { - "description": "현금영수증 발급번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "receiptUrl": { - "description": "현금영수증 조회 페이지 주소.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "nullable": true, - "required": [ - "type", - "amount", - "taxFreeAmount", - "issueNumber", - "receiptUrl" - ], - "description": "현금 영수증 요약 정보.", - "x-typia-jsDocTags": [] - }, - "ITossCashReceipt.Type": { - "description": "현금 영수증의 종류.", - "type": "string", - "enum": [ - "소득공제", - "지출증빙" - ] - }, - "ITossGiftCertificatePayment": { - "type": "object", - "properties": { - "giftCertificate": { - "$ref": "#/components/schemas/ITossGiftCertificatePayment.IGiftCertificate" - }, - "method": { - "description": "결제 수단.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "상품권" - ] - }, - "type": { - "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "NORMAL" - ] - }, - "status": { - "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "READY", - "IN_PROGRESS", - "WAITING_FOR_DEPOSIT", - "DONE", - "CANCELED", - "PARTIAL_CANCELED", - "ABORTED", - "EXPIRED" - ] - }, - "mId": { - "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "version": { - "description": "사용 중인 토스 페이먼츠 API 의 버전.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "paymentKey": { - "description": "결제 내역의 식별자 번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "orderId": { - "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "transactionKey": { - "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "orderName": { - "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "currency": { - "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "totalAmount": { - "description": "총 결제 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "balanceAmount": { - "description": "취소할 수 있는 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "suppliedAmount": { - "description": "공급가액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "taxFreeAmount": { - "description": "면세액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "vat": { - "description": "부가세.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "useEscrow": { - "description": "에스크로 사용 여부.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "cultureExpense": { - "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "requestedAt": { - "description": "결제 요청 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "approvedAt": { - "description": "결제 승인 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ], - "nullable": true - }, - "cancels": { - "description": "결제 취소 내역.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "array", - "items": { - "$ref": "#/components/schemas/ITossPaymentCancel" - }, - "nullable": true - }, - "cashReceipt": { - "$ref": "#/components/schemas/ITossCashReceipt.ISummary.Nullable" - } - }, - "nullable": false, - "required": [ - "giftCertificate", - "method", - "type", - "status", - "mId", - "version", - "paymentKey", - "orderId", - "transactionKey", - "orderName", - "currency", - "totalAmount", - "balanceAmount", - "suppliedAmount", - "taxFreeAmount", - "vat", - "useEscrow", - "cultureExpense", - "requestedAt", - "approvedAt", - "cancels", - "cashReceipt" - ], - "description": "상품권 결제 정보.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "ITossGiftCertificatePayment.IGiftCertificate": { - "type": "object", - "properties": { - "approveNo": { - "description": "승인 번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "settlementStatus": { - "description": "정산 상태.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "COMPLETE", - "INCOMPLETE" - ] - } - }, - "nullable": false, - "required": [ - "approveNo", - "settlementStatus" - ], - "description": "상품권 정보.", - "x-typia-jsDocTags": [] - }, - "ITossMobilePhonePayment": { - "type": "object", - "properties": { - "mobilePhone": { - "$ref": "#/components/schemas/ITossMobilePhonePayment.IMobilePhone" - }, - "method": { - "description": "결제 수단.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "휴대폰" - ] - }, - "type": { - "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "NORMAL" - ] - }, - "status": { - "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "READY", - "IN_PROGRESS", - "WAITING_FOR_DEPOSIT", - "DONE", - "CANCELED", - "PARTIAL_CANCELED", - "ABORTED", - "EXPIRED" - ] - }, - "mId": { - "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "version": { - "description": "사용 중인 토스 페이먼츠 API 의 버전.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "paymentKey": { - "description": "결제 내역의 식별자 번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "orderId": { - "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "transactionKey": { - "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "orderName": { - "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "currency": { - "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "totalAmount": { - "description": "총 결제 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "balanceAmount": { - "description": "취소할 수 있는 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "suppliedAmount": { - "description": "공급가액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "taxFreeAmount": { - "description": "면세액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "vat": { - "description": "부가세.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "useEscrow": { - "description": "에스크로 사용 여부.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "cultureExpense": { - "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "requestedAt": { - "description": "결제 요청 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "approvedAt": { - "description": "결제 승인 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ], - "nullable": true - }, - "cancels": { - "description": "결제 취소 내역.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "array", - "items": { - "$ref": "#/components/schemas/ITossPaymentCancel" - }, - "nullable": true - }, - "cashReceipt": { - "$ref": "#/components/schemas/ITossCashReceipt.ISummary.Nullable" - } - }, - "nullable": false, - "required": [ - "mobilePhone", - "method", - "type", - "status", - "mId", - "version", - "paymentKey", - "orderId", - "transactionKey", - "orderName", - "currency", - "totalAmount", - "balanceAmount", - "suppliedAmount", - "taxFreeAmount", - "vat", - "useEscrow", - "cultureExpense", - "requestedAt", - "approvedAt", - "cancels", - "cashReceipt" - ], - "description": "휴대폰 결제 정보.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "ITossMobilePhonePayment.IMobilePhone": { - "type": "object", - "properties": { - "carrier": { - "description": "통신사.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "customerMobilePhone": { - "description": "고객 휴대폰 번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "settlementStatus": { - "description": "정산 상태.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "COMPLETED", - "INCOMPLETED" - ] - } - }, - "nullable": false, - "required": [ - "carrier", - "customerMobilePhone", - "settlementStatus" - ], - "description": "휴대폰 정보.", - "x-typia-jsDocTags": [] - }, - "ITossTransferPayment": { - "type": "object", - "properties": { - "transfer": { - "$ref": "#/components/schemas/ITossTransferPayment.ITransfer" - }, - "method": { - "description": "결제 수단.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "계좌이체" - ] - }, - "type": { - "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "NORMAL" - ] - }, - "status": { - "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "READY", - "IN_PROGRESS", - "WAITING_FOR_DEPOSIT", - "DONE", - "CANCELED", - "PARTIAL_CANCELED", - "ABORTED", - "EXPIRED" - ] - }, - "mId": { - "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "version": { - "description": "사용 중인 토스 페이먼츠 API 의 버전.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "paymentKey": { - "description": "결제 내역의 식별자 번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "orderId": { - "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "transactionKey": { - "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "orderName": { - "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "currency": { - "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "totalAmount": { - "description": "총 결제 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "balanceAmount": { - "description": "취소할 수 있는 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "suppliedAmount": { - "description": "공급가액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "taxFreeAmount": { - "description": "면세액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "vat": { - "description": "부가세.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "useEscrow": { - "description": "에스크로 사용 여부.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "cultureExpense": { - "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "requestedAt": { - "description": "결제 요청 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "approvedAt": { - "description": "결제 승인 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ], - "nullable": true - }, - "cancels": { - "description": "결제 취소 내역.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "array", - "items": { - "$ref": "#/components/schemas/ITossPaymentCancel" - }, - "nullable": true - }, - "cashReceipt": { - "$ref": "#/components/schemas/ITossCashReceipt.ISummary.Nullable" - } - }, - "nullable": false, - "required": [ - "transfer", - "method", - "type", - "status", - "mId", - "version", - "paymentKey", - "orderId", - "transactionKey", - "orderName", - "currency", - "totalAmount", - "balanceAmount", - "suppliedAmount", - "taxFreeAmount", - "vat", - "useEscrow", - "cultureExpense", - "requestedAt", - "approvedAt", - "cancels", - "cashReceipt" - ], - "description": "계좌 이체 결제 정보.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "ITossTransferPayment.ITransfer": { - "type": "object", - "properties": { - "bank": { - "description": "은행명.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "settlementStatus": { - "description": "이체 상태.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "COMPLETED", - "INCOMPLETED" - ] - } - }, - "nullable": false, - "required": [ - "bank", - "settlementStatus" - ], - "description": "계좌 이체 정보.", - "x-typia-jsDocTags": [] - }, - "ITossVirtualAccountPayment": { - "type": "object", - "properties": { - "secret": { - "description": "가상 계좌로 결제할 때 전달되는 입금 콜백을 검증하기 위한 값.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "virtualAccount": { - "$ref": "#/components/schemas/ITossVirtualAccountPayment.IVirtualAccount" - }, - "method": { - "description": "결제 수단.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "가상계좌" - ] - }, - "type": { - "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "NORMAL" - ] - }, - "status": { - "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "READY", - "IN_PROGRESS", - "WAITING_FOR_DEPOSIT", - "DONE", - "CANCELED", - "PARTIAL_CANCELED", - "ABORTED", - "EXPIRED" - ] - }, - "mId": { - "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "version": { - "description": "사용 중인 토스 페이먼츠 API 의 버전.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "paymentKey": { - "description": "결제 내역의 식별자 번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "orderId": { - "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "transactionKey": { - "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "orderName": { - "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "currency": { - "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "totalAmount": { - "description": "총 결제 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "balanceAmount": { - "description": "취소할 수 있는 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "suppliedAmount": { - "description": "공급가액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "taxFreeAmount": { - "description": "면세액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "vat": { - "description": "부가세.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "useEscrow": { - "description": "에스크로 사용 여부.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "cultureExpense": { - "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "requestedAt": { - "description": "결제 요청 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "approvedAt": { - "description": "결제 승인 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ], - "nullable": true - }, - "cancels": { - "description": "결제 취소 내역.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "array", - "items": { - "$ref": "#/components/schemas/ITossPaymentCancel" - }, - "nullable": true - }, - "cashReceipt": { - "$ref": "#/components/schemas/ITossCashReceipt.ISummary.Nullable" - } - }, - "nullable": false, - "required": [ - "secret", - "virtualAccount", - "method", - "type", - "status", - "mId", - "version", - "paymentKey", - "orderId", - "transactionKey", - "orderName", - "currency", - "totalAmount", - "balanceAmount", - "suppliedAmount", - "taxFreeAmount", - "vat", - "useEscrow", - "cultureExpense", - "requestedAt", - "approvedAt", - "cancels", - "cashReceipt" - ], - "description": "가상 계좌 결제 정보.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "ITossVirtualAccountPayment.IVirtualAccount": { - "type": "object", - "properties": { - "accountNumber": { - "description": "계좌 번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "accountType": { - "description": "가상 계좌 타입.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "일반", - "고정" - ] - }, - "bank": { - "description": "은행명.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "customerName": { - "description": "고객 이름.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "dueDate": { - "description": "입금 기한.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date\">", - "kind": "format", - "value": "date", - "validate": "/^(\\d{4})-(\\d{2})-(\\d{2})$/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "expired": { - "description": "가상 계좌 만료 여부.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "boolean" - }, - "settlementStatus": { - "description": "정산 상태.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "COMPLETED", - "INCOMPLETED" - ] - }, - "refundStatus": { - "description": "환불 처리 상태.\n\n - NONE: 해당 없음\n - FAILED: 환불 실패\n - PENDING: 환불 처리중\n - PARTIAL_FAILED: 부분 환불 실패\n - COMPLETED: 환불 완료", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "COMPLETED", - "NONE", - "FAILED", - "PENDING", - "PARTIAL_FAILED" - ] - } - }, - "nullable": false, - "required": [ - "accountNumber", - "accountType", - "bank", - "customerName", - "dueDate", - "expired", - "settlementStatus", - "refundStatus" - ], - "description": "가상 계좌 정보.", - "x-typia-jsDocTags": [] - }, - "ITossCashReceipt.IStore": { - "type": "object", - "properties": { - "type": { - "description": "현금 영수증의 종류.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "소득공제", - "지출증빙" - ] - }, - "paymentKey": { - "description": "귀속 결제의 {@link ITossPayment.paymentKey }.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "orderId": { - "description": "주문의 식별자 ID.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "orderName": { - "description": "주문 이름.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "registrationNumber": { - "description": "현금 영수증 발급을 위한 개인 식별 번호.\n\n현금 영수증의 종류에 따라 휴대폰 번호나 주민등록번호 또는 사업자등록번호 및\n카드 번호를 입력할 수 있다.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "amount": { - "description": "현금 영수증을 발행할 금액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "taxFreeAmount": { - "description": "면세 금액.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "number" - }, - "businessNumber": { - "description": "사업자 등록번호.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - } - }, - "nullable": false, - "required": [ - "type", - "paymentKey", - "orderId", - "orderName", - "registrationNumber", - "amount" - ], - "description": "현금 영수증 입력 정보.", - "x-typia-jsDocTags": [] - }, - "ITossCashReceipt": { - "type": "object", - "properties": { - "receiptKey": { - "description": "현금 영수증의 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "type": { - "$ref": "#/components/schemas/ITossCashReceipt.Type" - }, - "orderId": { - "description": "주문의 식별자 ID.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "orderName": { - "description": "주문 이름.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "approvalNumber": { - "description": "현금 영수증 승인 번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "approvedAt": { - "description": "현금 영수증 승인 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "canceledAt": { - "description": "현금 영수증 취소 일시.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "format": "date-time", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"date-time\">", - "kind": "format", - "value": "date-time", - "validate": "!isNaN(new Date($input).getTime())", - "exclusive": [ - "format", - "pattern" - ] - } - ], - "nullable": true - }, - "receiptUrl": { - "description": "영수증 URL.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "nullable": false, - "required": [ - "receiptKey", - "type", - "orderId", - "orderName", - "approvalNumber", - "approvedAt", - "canceledAt", - "receiptUrl" - ], - "description": "현금 영수증 정보.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "ITossCashReceipt.ICancel": { - "type": "object", - "properties": { - "amount": { - "description": "취소 금액.\n\n미 입력시 현금 영수증에 기재된 {@link ITossCashReceipt.amount 총액}이 취소됨.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "number" - } - }, - "nullable": false, - "description": "현금 영수증 취소 입력 정보.", - "x-typia-jsDocTags": [] - }, - "ITossPaymentWebhook": { - "type": "object", - "properties": { - "eventType": { - "description": "이벤트 타입.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "PAYMENT_STATUS_CHANGED" - ] - }, - "data": { - "$ref": "#/components/schemas/ITossPaymentWebhook.IData" - } - }, - "nullable": false, - "required": [ - "eventType", - "data" - ], - "description": "웹훅 이벤트 정보.", - "x-typia-jsDocTags": [ - { - "name": "author", - "text": [ - { - "text": "Samchon", - "kind": "text" - } - ] - } - ] - }, - "ITossPaymentWebhook.IData": { - "type": "object", - "properties": { - "paymentKey": { - "description": "{@link ITossPayment } 의 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "orderId": { - "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "status": { - "description": "결제 상태.\n\n - DONE: 결제 완료\n - CANCELED: 결제가 취소됨\n - PARTIAL_CANCELED: 결제가 부분 취소됨\n - WAITING_FOR_DEPOSIT: 입금 대기 중", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "WAITING_FOR_DEPOSIT", - "DONE", - "CANCELED", - "PARTIAL_CANCELED" - ] - } - }, - "nullable": false, - "required": [ - "paymentKey", - "orderId", - "status" - ], - "description": "웹훅 이벤트 데이터.", - "x-typia-jsDocTags": [] - }, - "ITossCardPayment.IStore": { - "type": "object", - "properties": { - "method": { - "description": "결제 수단이 신용 카드임을 의미.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "card" - ] - }, - "cardNumber": { - "description": "카드 번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "pattern": "[0-9]{16}", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Pattern<\"[0-9]{16}\">", - "kind": "pattern", - "value": "[0-9]{16}", - "validate": "/[0-9]{16}/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "cardExpirationYear": { - "description": "카드 만료 년도 (2 자리).", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "pattern": "\\d{2}", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Pattern<\"\\\\d{2}\">", - "kind": "pattern", - "value": "\\d{2}", - "validate": "/\\d{2}/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "cardExpirationMonth": { - "description": "카드 만료 월 (2 자리).", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "pattern": "^(0[1-9]|1[012])$", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Pattern<\"^(0[1-9]|1[012])$\">", - "kind": "pattern", - "value": "^(0[1-9]|1[012])$", - "validate": "/^(0[1-9]|1[012])$/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "cardPassword": { - "description": "카드 비밀번호.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "cardInstallmentPlan": { - "description": "할부 개월 수.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "number" - }, - "amount": { - "description": "지불 총액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "taxFreeAmount": { - "description": "면세금 총액.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "number" - }, - "orderId": { - "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "orderName": { - "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string" - }, - "customerBirthday": { - "description": "고객의 생년월일.\n\n표기 형식 YYMMDD.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string", - "pattern": "^([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Pattern<\"^([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$\">", - "kind": "pattern", - "value": "^([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$", - "validate": "/^([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "customerEmail": { - "description": "고객의 이메일.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "string", - "format": "email", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Format<\"email\">", - "kind": "format", - "value": "email", - "validate": "/^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "vbv": { - "$ref": "#/components/schemas/__type.o1" - }, - "__approved": { - "description": "결제 승인 여부.\n\n오직 가짜 페이먼츠 서버 `fake-toss-payments-server` 에서만 사용되는 값으로써,\n결제 승인을 고의로 지연시키거나 할 때 사용된다. 이 값을 `false` 로 하면, 프론트\n어플리케이션이 토스 페이먼츠가 제공해주는 결제 창을 사용하여 결제를 진행하는\n상황을 시뮬레이션할 수 있다.\n\n본디 토스 페이먼츠 서버는 프론트 어플리케이션에서 백엔드 서버를 거치지 않고,\n토스 페이먼츠가 제공해주는 결제 창을 이용하여 직접 결제를 요청하는 경우,\n백엔드에서 이를 별도 {@link functional.payments.approve 승인} 처리해주기 전까지\n정식 결제로 인청치 아니한다.\n\n반면 백엔드 서버에서 토스 페이먼츠 서버의 API 를 호출하는 경우, 토스 페이먼츠는\n이를 그 즉시로 승인해주기, `fake-toss-payments-server` 에서 별도의 승인 처리가\n필요한 상황을 시뮬레이션하기 위해서는 이러한 속성이 필요한 것.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "boolean" - } - }, - "nullable": false, - "required": [ - "method", - "cardNumber", - "cardExpirationYear", - "cardExpirationMonth", - "amount", - "orderId" - ], - "description": "신용 카드를 이용한 결제 신청 정보.", - "x-typia-jsDocTags": [] - }, - "__type.o1": { - "type": "object", - "properties": { - "cavv": { - "description": "3D Secure 인증 세션에 대한 인증 값.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "xid": { - "description": "트랜잭션 ID.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "eci": { - "description": "3DS 인증 결과에 대한 코드 값.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "nullable": false, - "required": [ - "cavv", - "xid", - "eci" - ], - "x-typia-jsDocTags": [] - }, - "ITossPayment.IApproval": { - "type": "object", - "properties": { - "orderId": { - "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "amount": { - "description": "결제 총액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - } - }, - "nullable": false, - "required": [ - "orderId", - "amount" - ], - "description": "결제 승인 정보.", - "x-typia-jsDocTags": [] - }, - "ITossPaymentCancel.IStore": { - "type": "object", - "properties": { - "paymentKey": { - "description": "{@link ITossPayment } 의 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "cancelReason": { - "description": "취소 사유.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "cancelAmount": { - "description": "취소 총액.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "number" - }, - "refundReceiveAccount": { - "$ref": "#/components/schemas/__type.o2" - }, - "taxAmount": { - "description": "과세 처리 금액.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "number" - }, - "taxFreeAmount": { - "description": "면세 처리 금액.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "number" - }, - "refundableAmount": { - "description": "결제 취소 후 환불 가능 잔액.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "number" - } - }, - "nullable": false, - "required": [ - "paymentKey", - "cancelReason" - ], - "description": "결제 취소 신청 정보.", - "x-typia-jsDocTags": [] - }, - "__type.o2": { - "type": "object", - "properties": { - "bank": { - "description": "은행 정보.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "accountNumber": { - "description": "계좌 번호.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "pattern": "^[0-9]{0,20}$", - "x-typia-typeTags": [ - { - "target": "string", - "name": "Pattern<\"^[0-9]{0,20}$\">", - "kind": "pattern", - "value": "^[0-9]{0,20}$", - "validate": "/^[0-9]{0,20}$/.test($input)", - "exclusive": [ - "format", - "pattern" - ] - } - ] - }, - "holderName": { - "description": "예금주.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - } - }, - "nullable": false, - "required": [ - "bank", - "accountNumber", - "holderName" - ], - "x-typia-jsDocTags": [] - }, - "ITossVirtualAccountPayment.IStore": { - "type": "object", - "properties": { - "method": { - "description": "결제 수단이 가상 계좌임을 의미.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string", - "enum": [ - "virtual-account" - ] - }, - "orderId": { - "description": "주문 식별자 번호.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "orderName": { - "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "bank": { - "description": "은행명.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "customerName": { - "description": "고객 이름.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "string" - }, - "amount": { - "description": "결제 총액.", - "x-typia-required": true, - "x-typia-optional": false, - "type": "number" - }, - "__approved": { - "description": "결제 승인 여부.\n\n오직 가짜 페이먼츠 서버 `fake-toss-payments-server` 에서만 사용되는 값으로써,\n결제 승인을 고의로 지연시키거나 할 때 사용된다. 이 값을 `false` 로 하면, 프론트\n어플리케이션이 토스 페이먼츠가 제공해주는 결제 창을 사용하여 결제를 진행하는\n상황을 시뮬레이션할 수 있다.\n\n본디 토스 페이먼츠 서버는 프론트 어플리케이션에서 백엔드 서버를 거치지 않고,\n토스 페이먼츠가 제공해주는 결제 창을 이용하여 직접 결제를 요청하는 경우,\n백엔드에서 이를 별도 {@link functional.payments.approve 승인} 처리해주기 전까지\n정식 결제로 인청치 아니한다.\n\n반면 백엔드 서버에서 토스 페이먼츠 서버의 API 를 호출하는 경우, 토스 페이먼츠는\n이를 그 즉시로 승인해주기, `fake-toss-payments-server` 에서 별도의 승인 처리가\n필요한 상황을 시뮬레이션하기 위해서는 이러한 속성이 필요한 것.", - "x-typia-required": false, - "x-typia-optional": true, - "type": "boolean" - } - }, - "nullable": false, - "required": [ - "method", - "orderId", - "orderName", - "bank", - "customerName", - "amount" - ], - "description": "가상 계좌를 이용한 결제 신청 정보.", - "x-typia-jsDocTags": [] - } - }, - "securitySchemes": { - "basic": { - "type": "apiKey", - "name": "Authorization", - "in": "header" - } - } - } -} \ No newline at end of file +{"openapi":"3.0.1","servers":[{"url":"http://localhost:30771","description":"fake"},{"url":"https://api.tosspayments.com","description":"real"}],"info":{"title":"Toss Payments API","description":"Built by [fake-toss-payments-server](https://github.com/samchon/payments/tree/master/packages/toss-payments-server-api) with [nestia](https://github.com/samchon/nestia)","version":"5.1.5","license":{"name":"MIT"}},"paths":{"/v1/billing/authorizations/card":{"post":{"tags":[],"parameters":[],"requestBody":{"description":"간편 결제 카드 등록 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ITossBilling.IStore"}}},"required":true,"x-nestia-encrypted":false},"responses":{"201":{"description":"간편 결제 카드 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ITossBilling"}}},"x-nestia-encrypted":false}},"summary":"간편 결제 카드 등록하기","description":"간편 결제 카드 등록하기.\n\n`billing.authorizations.card.store` 는 고객이 자신의 신록 카드를 서버에 등록해두고,\n매번 결제가 필요할 때마다 카드 정보를 반복 입력하는 일 없이 간편하게 결제를\n진행하고자 할 때, 호출되는 API 함수이다.\n\n참고로 `billing.authorizations.card.store` 는 클라이언트 어플리케이션이 토스\n페이먼츠가 제공하는 간편 결제 카드 등록 창을 사용하는 경우, 귀하의 백엔드 서버가 이를\n실 서비스에서 호출하는 일은 없을 것이다. 다만, 고객이 간편 결제 카드를 등록하는\n상황을 시뮬레이션하기 위하여, 테스트 자동화 프로그램 수준에서 사용될 수는 있다.","security":[{"basic":[]}],"x-nestia-namespace":"v1.billing.authorizations.card.store","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"input","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"간편 결제 카드 등록 정보","kind":"text"}]},{"name":"returns","text":[{"text":"간편 결제 카드 정보","kind":"text"}]},{"name":"security","text":[{"text":"basic","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"POST"}},"/v1/billing/authorizations/{billingKey}":{"post":{"tags":[],"parameters":[{"name":"billingKey","in":"path","schema":{"type":"string"},"description":"대상 정보의 ","required":true}],"requestBody":{"description":"고객 식별자 키","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ITossBilling.ICustomerKey"}}},"required":true,"x-nestia-encrypted":false},"responses":{"201":{"description":"간편 결제 수단 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ITossBilling"}}},"x-nestia-encrypted":false}},"summary":"간편 결제로 등록한 수단 조회하기","description":"간편 결제로 등록한 수단 조회하기.\n\n`billing.authorizations.at` 은 고객이 간편 결제를 위하여 토스 페이먼츠 서버에\n등록한 결제 수단을 조회하는 함수이다.\n\n주로 클라이언트 어플리케이션이 토스 페이먼츠가 자체적으로 제공하는 결제 창을 사용하는\n경우, 그래서 프론트 어플리케이션이 귀하의 백엔드 서버에 `billingKey` 와` customerKey`\n만을 전달해주어, 상세 간편 결제 수단 정보가 필요할 때 사용한다.","security":[{"basic":[]}],"x-nestia-namespace":"v1.billing.authorizations.at","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"billingKey","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"대상 정보의 ","kind":"text"},{"text":"{@link ","kind":"link"},{"text":"ITossBilling.billingKey","kind":"linkName","target":{"fileName":"D:/github/samchon/payments/packages/fake-toss-payments-server/src/api/structures/ITossBilling.ts","textSpan":{"start":437,"length":19}}},{"text":"}","kind":"link"}]},{"name":"param","text":[{"text":"input","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"고객 식별자 키","kind":"text"}]},{"name":"returns","text":[{"text":"간편 결제 수단 정보","kind":"text"}]},{"name":"security","text":[{"text":"basic","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"POST"}},"/v1/billing/{billingKey}":{"post":{"tags":[],"parameters":[{"name":"billingKey","in":"path","schema":{"type":"string"},"description":"간편 결제에 등록한 수단의 ","required":true}],"requestBody":{"description":"주문 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ITossBilling.IPaymentStore"}}},"required":true,"x-nestia-encrypted":false},"responses":{"201":{"description":"결제 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ITossPayment"}}},"x-nestia-encrypted":false}},"summary":"간편 결제에 등록한 수단으로 결제하기","description":"간편 결제에 등록한 수단으로 결제하기.\n\n`billing.pay` 는 간편 결제에 등록한 수단으로 결제를 진행하고자 할 때 호출하는 API\n함수이다.\n\n그리고 `billing.pay` 는 결제 수단 중 유일하게, 클라이언트 어플리케이션이 토스\n페이먼츠가 제공하는 결제 창을 사용할 수 없어, 귀하의 백엔드 서버가 토스 페이먼츠의\nAPI 함수를 직접 호출해야 하는 경우에 해당한다. 따라서 간편 결제에 관련하여 토스\n페이먼츠와 연동하는 백엔드 서버 및 프론트 어플리케이션을 개발할 때, 반드시 이 상황에\n대한 별도의 설계 및 개발이 필요하니, 이 점을 염두에 두기 바란다.\n\n더하여 `billing.pay` 는 철저히 귀사 백엔드 서버의 판단 아래 호출되는 API 함수인지라,\n이를 통하여 이루어지는 결제는 일절 {@link payments.approve } 가 필요 없다. 다만\n`billing.pay` 는 이처럼 부차적인 승인 과정 필요없이 그 즉시로 결제가 완성되니, 이를\n호출하는 상황에 대하여 세심히 주의를 기울일 필요가 있다","security":[{"basic":[]}],"x-nestia-namespace":"v1.billing.pay","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"billingKey","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"간편 결제에 등록한 수단의 ","kind":"text"},{"text":"{@link ","kind":"link"},{"text":"ITossBilling.billingKey","kind":"linkName","target":{"fileName":"D:/github/samchon/payments/packages/fake-toss-payments-server/src/api/structures/ITossBilling.ts","textSpan":{"start":437,"length":19}}},{"text":"}","kind":"link"}]},{"name":"param","text":[{"text":"input","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"주문 정보","kind":"text"}]},{"name":"returns","text":[{"text":"결제 정보","kind":"text"}]},{"name":"security","text":[{"text":"basic","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"POST"}},"/v1/cash-receipts":{"post":{"tags":[],"parameters":[],"requestBody":{"description":"입력 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ITossCashReceipt.IStore"}}},"required":true,"x-nestia-encrypted":false},"responses":{"201":{"description":"현금 영수증 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ITossCashReceipt"}}},"x-nestia-encrypted":false}},"summary":"현금 영수증 발행하기","description":"현금 영수증 발행하기.","security":[{"basic":[]}],"x-nestia-namespace":"v1.cash-receipts.store","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"input","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"입력 정보","kind":"text"}]},{"name":"returns","text":[{"text":"현금 영수증 정보","kind":"text"}]},{"name":"security","text":[{"text":"basic","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"POST"}},"/v1/cash-receipts/{receiptKey}/cancel":{"post":{"tags":[],"parameters":[{"name":"receiptKey","in":"path","schema":{"type":"string"},"description":"현금 영수증의 ","required":true}],"requestBody":{"description":"취소 입력 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ITossCashReceipt.ICancel"}}},"required":true,"x-nestia-encrypted":false},"responses":{"201":{"description":"취소된 현금 영수증 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ITossCashReceipt"}}},"x-nestia-encrypted":false}},"summary":"현금 영수증 취소하기","description":"현금 영수증 취소하기.","security":[{"basic":[]}],"x-nestia-namespace":"v1.cash-receipts.cancel.cancel","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"receiptKey","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"현금 영수증의 ","kind":"text"},{"text":"{@link ","kind":"link"},{"text":"ITossCashReceipt.receiptKey","kind":"linkName","target":{"fileName":"D:/github/samchon/payments/packages/fake-toss-payments-server/src/api/structures/ITossCashReceipt.ts","textSpan":{"start":156,"length":19}}},{"text":"}","kind":"link"}]},{"name":"param","text":[{"text":"input","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"취소 입력 정보","kind":"text"}]},{"name":"returns","text":[{"text":"취소된 현금 영수증 정보","kind":"text"}]},{"name":"security","text":[{"text":"basic","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"POST"}},"/internal/webhook":{"post":{"tags":[],"parameters":[],"requestBody":{"description":"웹훅 이벤트 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ITossPaymentWebhook"}}},"required":true,"x-nestia-encrypted":false},"responses":{"201":{"description":"","x-nestia-encrypted":false}},"summary":"웹훅 이벤트 더미 리스너","description":"웹훅 이벤트 더미 리스너.\n\n`internal.webhook` 은 실제 토스 페이먼츠의 결제 서버에는 존재하지 않는 API 로써,\n`fake-toss-payments-server` 의 {@link Configuration.WEBHOOK_URL } 에 아무런 URL 을\n설정하지 않으면, `fake-toss-payments-server` 로부터 발생하는 모든 종류의 웹훅\n이벤트는 이 곳으로 전달되어 무의미하게 사라진다.\n\n따라서 `fake-toss-payments-server` 를 사용하여 토스 페이먼츠 서버와의 연동을 미리\n검증코자 할 때는, 반드시 {@link Configuration.WEBHOOK_URL } 를 설정하여 웹훅\n이벤트가 귀하의 백엔드 서버로 제대로 전달되도록 하자.","x-nestia-namespace":"internal.webhook.webhook","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"input","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"웹훅 이벤트 정보","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"POST"}},"/internal/{paymentKey}/deposit":{"put":{"tags":[],"parameters":[{"name":"paymentKey","in":"path","schema":{"type":"string"},"description":"대상 가상 계좌 결제 정보의 ","required":true}],"responses":{"201":{"description":"입금 완료된 가상 꼐좌 결제 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ITossPayment"}}},"x-nestia-encrypted":false}},"summary":"가상 계좌에 입금하기","description":"가상 계좌에 입금하기.\n\n`internal.virtual_accounts.deposit` 은 실제 토스 페이먼츠의 결제 서버에는 존재하지\n않는 API 로써, 가상 계좌 결제를 신청한 고객이, 이후 가상 계좌에 목표 금액을 입금하는\n상황을 시뮬레이션할 수 있는 함수이다.\n\n즉 `internal.virtual_accounts.deposit` 는 고객이 스스로에게 가상으로 발급된 계좌에\n입금을 하고, 그에 따라 토스 페이먼츠 서버에서 webhook 이벤트가 발생하여 이를 귀하의\n백엔드 서버로 전송하는 일련의 상황을 테스트하기 위한 함수인 셈이다.","security":[{"basic":[]}],"x-nestia-namespace":"internal.deposit.deposit","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"paymentKey","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"대상 가상 계좌 결제 정보의 ","kind":"text"},{"text":"{@link ","kind":"link"},{"text":"ITossPayment.paymentKey","kind":"linkName","target":{"fileName":"D:/github/samchon/payments/packages/fake-toss-payments-server/src/api/structures/ITossPayment.ts","textSpan":{"start":2165,"length":19}}},{"text":"}","kind":"link"}]},{"name":"returns","text":[{"text":"입금 완료된 가상 꼐좌 결제 정보","kind":"text"}]},{"name":"security","text":[{"text":"basic","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"PUT"}},"/v1/payments/{paymentKey}":{"get":{"tags":[],"parameters":[{"name":"paymentKey","in":"path","schema":{"type":"string"},"description":"결제 정보의 ","required":true}],"responses":{"200":{"description":"결제 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ITossPayment"}}},"x-nestia-encrypted":false}},"summary":"결제 정보 조회하기","description":"결제 정보 조회하기.\n\n`payments.at` 은 결제 정보를 조회하는 함수이다.\n\n주로 클라이언트 어플리케이션이 토스 페이먼츠가 자체적으로 제공하는 결제 창을 사용하는\n경우, 그래서 프론트 어플리케이션이 귀하의 백엔드 서버에 `paymentKey` 등 극히 일부의\n식별자 정보만을 전달해주어, 상세 결제 정보가 필요할 때 사용한다.\n\n참고로 토스 페이먼츠는 다른 결제 PG 사들과 다르게, 클라이언트 어플리케이션에서 토스\n페이먼츠의 결제 창을 이용하여 진행한 결제가 바로 확정되는 것은 아니다. 귀사의 백엔드\n서버가 현재의 `payments.at` 을 통하여 해당 결제 정보를 확인하고, {@link approve } 를\n호출하여 직접 승인하기 전까지, 해당 결제는 확정되지 않으니, 이 점에 유의하기 바란다.","x-nestia-namespace":"v1.payments.at","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"paymentKey","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"결제 정보의 ","kind":"text"},{"text":"{@link ","kind":"link"},{"text":"ITossPayment.paymentKey","kind":"linkName","target":{"fileName":"D:/github/samchon/payments/packages/fake-toss-payments-server/src/api/structures/ITossPayment.ts","textSpan":{"start":2165,"length":19}}},{"text":"}","kind":"link"}]},{"name":"returns","text":[{"text":"결제 정보","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"GET"},"post":{"tags":[],"parameters":[{"name":"paymentKey","in":"path","schema":{"type":"string"},"description":"대상 결제의 ","required":true}],"requestBody":{"description":"주문 정보 확인","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ITossPayment.IApproval"}}},"required":true,"x-nestia-encrypted":false},"responses":{"201":{"description":"승인된 결제 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ITossPayment"}}},"x-nestia-encrypted":false}},"summary":"결제 승인하기","description":"결제 승인하기.\n\n토스 페이먼츠는 귀사의 백엔드에서 일어난 결제가 아닌 프론트 어플리케이션의 결제 창에서\n이루어진 결제의 경우, 해당 서비스으 백엔드 서버로부터 결제를 승인받기 전까지, 이를\n확정하지 않는다. `payments.approve` 는 바로 이러한 상황에서, 해당 결제를 승인해주는\n함수이다.\n\n만일 귀하가 `fake-toss-payments-server` 를 이용하여 결제를 시뮬레이션하는 경우라면,\n결제 관련 API 를 호출함에 있어 {@link ITossCardPayment.IStore.__approved } 내지\n{@link ITossVirtualAccountPayment.IStore.__approved } 를 `false` 로 함으로써, 별도\n승인이 필요한 이러한 상황을 시뮬레이션 할 수 있다.","security":[{"basic":[]}],"x-nestia-namespace":"v1.payments.approve","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"paymentKey","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"대상 결제의 ","kind":"text"},{"text":"{@link ","kind":"link"},{"text":"ITossPayment.paymentKey","kind":"linkName","target":{"fileName":"D:/github/samchon/payments/packages/fake-toss-payments-server/src/api/structures/ITossPayment.ts","textSpan":{"start":2165,"length":19}}},{"text":"}","kind":"link"}]},{"name":"param","text":[{"text":"input","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"주문 정보 확인","kind":"text"}]},{"name":"returns","text":[{"text":"승인된 결제 정보","kind":"text"}]},{"name":"security","text":[{"text":"basic","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"POST"}},"/v1/payments/key-in":{"post":{"tags":[],"parameters":[],"requestBody":{"description":"카드 결제 입력 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ITossCardPayment.IStore"}}},"required":true,"x-nestia-encrypted":false},"responses":{"201":{"description":"카드 결제 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ITossCardPayment"}}},"x-nestia-encrypted":false}},"summary":"카드로 결제하기","description":"카드로 결제하기.\n\n`payments.key_in` 은 카드를 이용한 결제를 할 때 호출되는 API 함수이다.\n\n참고로 `payments.key_in` 는 클라이언트 어플리케이션이 토스 페이먼츠가 자체적으로\n제공하는 결제 창을 사용하는 경우, 귀하의 백엔드 서버가 이를 실 서비스에서 호출하는\n일은 없을 것이다. 다만, 고객이 카드를 통하여 결제하는 상황을 시뮬레이션하기 위하여,\n테스트 자동화 프로그램 수준에서 사용될 수는 있다.\n\n그리고 귀하의 백엔드 서버가 `payments.key-in` 을 직접 호출하는 경우, 토스 페이먼츠\n서버는 이를 완전히 승인된 결제로 보고 바로 확정한다. 때문에 `payments.key-in` 을\n직접 호출하는 경우, 토스 페이먼츠의 결제 창을 이용하여 별도의 {@link approve } 가\n필요한 때 대비, 훨씬 더 세심한 주의가 요구된다.\n\n더하여 만약 귀하의 백엔드 서버가 `fake-toss-payments-server` 를 이용하여 고객의\n카드 결제를 시뮬레이션하는 경우, {@link ITossCardPayment.IStore.__approved } 값을\n`false` 로 하여 카드 결제의 확정을 고의로 회피할 수 있다. 이를 통하여 토스\n페이먼츠의 결제 창을 이용한 카드 결제의 경우, 별도의 {@link approve } 가 필요한\n상황을 시뮬레이션 할 수 있다.","security":[{"basic":[]}],"x-nestia-namespace":"v1.payments.key-in.key_in","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"input","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"카드 결제 입력 정보","kind":"text"}]},{"name":"returns","text":[{"text":"카드 결제 정보","kind":"text"}]},{"name":"security","text":[{"text":"basic","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"POST"}},"/v1/payments/{paymentKey}/cancel":{"post":{"tags":[],"parameters":[{"name":"paymentKey","in":"path","schema":{"type":"string"},"description":"결제 정보의 ","required":true}],"requestBody":{"description":"취소 입력 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ITossPaymentCancel.IStore"}}},"required":true,"x-nestia-encrypted":false},"responses":{"201":{"description":"취소된 결제 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ITossPayment"}}},"x-nestia-encrypted":false}},"summary":"결제 취소하기","description":"결제 취소하기.\n\n`payments.cancel` 은 결제를 취소하는 API 이다.\n\n결제 취소 입력 정보 {@link ITossPaymentCancel.IStore } 에는 취소 사유를 비롯하여,\n고객에게 환불해 줄 금액과 부가세 및 필요시 환불 계좌 정보 등을 입력하게 되어있다.","security":[{"basic":[]}],"x-nestia-namespace":"v1.payments.cancel.cancel","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"paymentKey","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"결제 정보의 ","kind":"text"},{"text":"{@link ","kind":"link"},{"text":"ITossPayment.paymentKey","kind":"linkName","target":{"fileName":"D:/github/samchon/payments/packages/fake-toss-payments-server/src/api/structures/ITossPayment.ts","textSpan":{"start":2165,"length":19}}},{"text":"}","kind":"link"}]},{"name":"param","text":[{"text":"input","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"취소 입력 정보","kind":"text"}]},{"name":"returns","text":[{"text":"취소된 결제 정보","kind":"text"}]},{"name":"security","text":[{"text":"basic","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"POST"}},"/v1/virtual-accounts":{"post":{"tags":[],"parameters":[],"requestBody":{"description":"가상 결제 신청 정보.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ITossVirtualAccountPayment.IStore"}}},"required":true,"x-nestia-encrypted":false},"responses":{"201":{"description":"가상 계좌 결제 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ITossVirtualAccountPayment"}}},"x-nestia-encrypted":false}},"summary":"가상 계좌로 결제 신청하기","description":"가상 계좌로 결제 신청하기.\n\n`virtual_accounts.store` 는 고객이 결제 수단을 가상 계좌로 선택하는 경우에 호출되는\nAPI 함수이다. 물론 고객이 이처럼 가상 계좌를 선택한 경우, 고객이 지정된 계좌에 돈을\n입금하기 전까지는 결제가 마무리된 것이 아니기에, {@link ITossPayment.status } 값은\n`WAITING_FOR_DEPOSIT` 이 된다.\n\n참고로 `virtual_accounts.store` 는 클라이언트 어플리케이션이 토스 페이먼츠가\n자체적으로 제공하는 결제 창을 사용하는 경우, 귀하의 백엔드 서버가 이를 실 서비스에서\n호출하는 일은 없을 것이다. 다만, 고객이 가상 계좌로 결제를 진행하는 상황을\n시뮬레이션하기 위하여, 테스트 자동화 프로그램 수준에서 사용될 수는 있다.\n\n그리고 `virtual_accounts.store` 이후에 고객이 지정된 계좌에 금액을 입금하거든, 토스\n페이먼츠 서버로부터 웹훅 이벤트가 발생되어 귀하의 백엔드 서버로 전송된다. 만약 연동\n대상 토스 페이먼츠 서버가 실제가 아닌 `fake-toss-payments-server` 라면,\n{@link internal.virtual_accounts.deposit } 를 호출하여, 고객이 가상 계좌에 입금하는\n상황을 시뮬레이션 할 수 있다.","security":[{"basic":[]}],"x-nestia-namespace":"v1.virtual-accounts.store","x-nestia-jsDocTags":[{"name":"param","text":[{"text":"input","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"가상 결제 신청 정보.","kind":"text"}]},{"name":"returns","text":[{"text":"가상 계좌 결제 정보","kind":"text"}]},{"name":"security","text":[{"text":"basic","kind":"text"}]},{"name":"author","text":[{"text":"Samchon","kind":"text"}]}],"x-nestia-method":"POST"}}},"components":{"schemas":{"ITossBilling.IStore":{"type":"object","properties":{"cardNumber":{"description":"카드 번호.","x-typia-required":true,"x-typia-optional":false,"type":"string","pattern":"[0-9]{16}","x-typia-typeTags":[{"target":"string","name":"Pattern<\"[0-9]{16}\">","kind":"pattern","value":"[0-9]{16}","validate":"/[0-9]{16}/.test($input)","exclusive":["format","pattern"]}]},"cardExpirationYear":{"description":"카드 만료 년도 (2 자리).","x-typia-required":true,"x-typia-optional":false,"type":"string","pattern":"\\d{2}","x-typia-typeTags":[{"target":"string","name":"Pattern<\"\\\\d{2}\">","kind":"pattern","value":"\\d{2}","validate":"/\\d{2}/.test($input)","exclusive":["format","pattern"]}]},"cardExpirationMonth":{"description":"카드 만료 월 (2 자리).","x-typia-required":true,"x-typia-optional":false,"type":"string","pattern":"^(0[1-9]|1[012])$","x-typia-typeTags":[{"target":"string","name":"Pattern<\"^(0[1-9]|1[012])$\">","kind":"pattern","value":"^(0[1-9]|1[012])$","validate":"/^(0[1-9]|1[012])$/.test($input)","exclusive":["format","pattern"]}]},"cardPassword":{"description":"카드 비밀번호.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"customerBirthday":{"description":"고객의 생년월일.\n\n표기 형식 YYMMDD.","x-typia-required":true,"x-typia-optional":false,"type":"string","pattern":"^([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$","x-typia-typeTags":[{"target":"string","name":"Pattern<\"^([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$\">","kind":"pattern","value":"^([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$","validate":"/^([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$/.test($input)","exclusive":["format","pattern"]}]},"consumerName":{"description":"고객의 이름.","x-typia-required":false,"x-typia-optional":true,"type":"string"},"customerEmail":{"description":"고객의 이메일.","x-typia-required":false,"x-typia-optional":true,"type":"string","format":"email","x-typia-typeTags":[{"target":"string","name":"Format<\"email\">","kind":"format","value":"email","validate":"/^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i.test($input)","exclusive":["format","pattern"]}]},"vbv":{"$ref":"#/components/schemas/__type"},"customerKey":{"description":"고객 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"}},"nullable":false,"required":["cardNumber","cardExpirationYear","cardExpirationMonth","cardPassword","customerBirthday","customerKey"],"description":"간편 결제 카드 등록 정보.","x-typia-jsDocTags":[]},"__type":{"type":"object","properties":{"cavv":{"description":"3D Secure 인증 세션에 대한 인증 값.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"xid":{"description":"트랜잭션 ID.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"eci":{"description":"3DS 인증 결과에 대한 코드 값.","x-typia-required":true,"x-typia-optional":false,"type":"string"}},"nullable":false,"required":["cavv","xid","eci"],"x-typia-jsDocTags":[]},"ITossBilling":{"type":"object","properties":{"mId":{"description":"가맹점 ID.\n\n현재 tosspayments 가 쓰임.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"billingKey":{"description":"{@link ITossBilling } 의 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"method":{"description":"결제 수단.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["카드"]},"cardCompany":{"description":"카드사 이름.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"cardNumber":{"description":"카드 번호.","x-typia-required":true,"x-typia-optional":false,"type":"string","pattern":"[0-9]{16}","x-typia-typeTags":[{"target":"string","name":"Pattern<\"[0-9]{16}\">","kind":"pattern","value":"[0-9]{16}","validate":"/[0-9]{16}/.test($input)","exclusive":["format","pattern"]}]},"authenticatedAt":{"description":"인증 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}]},"customerKey":{"description":"고객 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"}},"nullable":false,"required":["mId","billingKey","method","cardCompany","cardNumber","authenticatedAt","customerKey"],"description":"간편 결제 등록 수단 정보.\n\n`ITossBilling` 은 간편 결제 등록 수단을 형상화한 자료구조 인터페이스로써, 고객이 자신의\n신용 카드를 서버에 등록해두고, 매번 결제가 필요할 때마다 카드 정보를 반복 입려하는 일\n없이 간편하게 결제를 진행하고자 할 때 사용한다.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"ITossBilling.ICustomerKey":{"type":"object","properties":{"customerKey":{"description":"고객 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"}},"nullable":false,"required":["customerKey"],"description":"고객 식별자 정보.","x-typia-jsDocTags":[]},"ITossBilling.IPaymentStore":{"type":"object","properties":{"method":{"description":"결제 수단이 간편 결제임을 의미함.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["billing"]},"billingKey":{"description":"{@link IPaymentStore } 의 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"orderId":{"description":"주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"amount":{"description":"결제 총액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"customerKey":{"description":"고객 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"}},"nullable":false,"required":["method","billingKey","orderId","amount","customerKey"],"description":"간편 결제를 이용한 결제 신청 정보.","x-typia-jsDocTags":[]},"ITossPayment":{"oneOf":[{"$ref":"#/components/schemas/ITossCardPayment"},{"$ref":"#/components/schemas/ITossGiftCertificatePayment"},{"$ref":"#/components/schemas/ITossMobilePhonePayment"},{"$ref":"#/components/schemas/ITossTransferPayment"},{"$ref":"#/components/schemas/ITossVirtualAccountPayment"}],"description":"결제 정보.\n\n`ITossPayment` 는 토스 페이먼츠의 결제 정보를 형상화한 자료구조이자 유니언 타입의\n인터페이스로써, if condition 을 통하여 method 값을 특정하면, 파생 타입이 자동으로\n지정된다.\n\n```typescript\nif (payment.method === \"카드\")\n payment.card; // payment be ITossCardPayment\n```","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"ITossCardPayment":{"type":"object","properties":{"card":{"$ref":"#/components/schemas/ITossCardPayment.ICard"},"discount":{"$ref":"#/components/schemas/ITossCardPayment.IDiscount.Nullable"},"easyPay":{"description":"간편결제로 결제한 경우 간편결제 타입 정보.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["토스결제","페이코","삼성페이"],"nullable":true},"method":{"description":"결제 수단.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["카드"]},"type":{"description":"결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["NORMAL","BILLING"]},"status":{"description":"결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["READY","IN_PROGRESS","WAITING_FOR_DEPOSIT","DONE","CANCELED","PARTIAL_CANCELED","ABORTED","EXPIRED"]},"mId":{"description":"가맹점 ID.\n\n현재 tosspayments 가 쓰임.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"version":{"description":"사용 중인 토스 페이먼츠 API 의 버전.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"paymentKey":{"description":"결제 내역의 식별자 번호.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"orderId":{"description":"주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"transactionKey":{"description":"거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"orderName":{"description":"주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"currency":{"description":"화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"totalAmount":{"description":"총 결제 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"balanceAmount":{"description":"취소할 수 있는 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"suppliedAmount":{"description":"공급가액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"taxFreeAmount":{"description":"면세액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"vat":{"description":"부가세.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"useEscrow":{"description":"에스크로 사용 여부.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"cultureExpense":{"description":"문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"requestedAt":{"description":"결제 요청 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}]},"approvedAt":{"description":"결제 승인 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}],"nullable":true},"cancels":{"description":"결제 취소 내역.","x-typia-required":true,"x-typia-optional":false,"type":"array","items":{"$ref":"#/components/schemas/ITossPaymentCancel"},"nullable":true},"cashReceipt":{"$ref":"#/components/schemas/ITossCashReceipt.ISummary.Nullable"}},"nullable":false,"required":["card","discount","easyPay","method","type","status","mId","version","paymentKey","orderId","transactionKey","orderName","currency","totalAmount","balanceAmount","suppliedAmount","taxFreeAmount","vat","useEscrow","cultureExpense","requestedAt","approvedAt","cancels","cashReceipt"],"description":"카드 결제 정보.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"ITossCardPayment.ICard":{"type":"object","properties":{"company":{"description":"카드사 이름.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"number":{"description":"카드 번호.","x-typia-required":true,"x-typia-optional":false,"type":"string","pattern":"[0-9]{16}","x-typia-typeTags":[{"target":"string","name":"Pattern<\"[0-9]{16}\">","kind":"pattern","value":"[0-9]{16}","validate":"/[0-9]{16}/.test($input)","exclusive":["format","pattern"]}]},"installmentPlanMonths":{"description":"할부 개월 수.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"isInterestFree":{"description":"무이자 할부 적용 여부.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"approveNo":{"description":"승인 번호.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"useCardPoint":{"description":"카드 포인트 사용 여부.","x-typia-required":true,"x-typia-optional":false,"type":"boolean","enum":[false]},"cardType":{"description":"카드 타입.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["신용","체크","기프트"]},"ownerType":{"description":"카드의 소유자 타입.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["개인","법인"]},"acquireStatus":{"description":"카드 결제의 매입 상태.\n\n - READY: 매입 대기\n - REQUESTED: 매입 요청됨\n - COMPLETED: 매입 완료\n - CANCEL_REQUESTED: 매입 취소 요청됨\n - CANCELD: 매입 취소됨","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["READY","CANCELED","REQUESTED","COMPLETED","CANCEL_REQUESTED"]},"receiptUrl":{"description":"영수증 URL.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"url","x-typia-typeTags":[{"target":"string","name":"Format<\"url\">","kind":"format","value":"url","validate":"/^[a-zA-Z0-9]+:\\/\\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)","exclusive":["format","pattern"]}]}},"nullable":false,"required":["company","number","installmentPlanMonths","isInterestFree","approveNo","useCardPoint","cardType","ownerType","acquireStatus","receiptUrl"],"description":"카드 정보.","x-typia-jsDocTags":[]},"ITossCardPayment.IDiscount.Nullable":{"type":"object","properties":{"amount":{"description":"카드사의 즉시 할인 프로모션을 적용한 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number"}},"nullable":true,"required":["amount"],"description":"카드사의 즉시 할인 프로모션 정보.","x-typia-jsDocTags":[]},"ITossPaymentCancel":{"type":"object","properties":{"cancelAmount":{"description":"취소 총액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"cancelReason":{"description":"취소 사유.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"taxFreeAmount":{"description":"면세 처리된 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"taxAmount":{"description":"과세 처리된 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"refundableAmount":{"description":"결제 취소 후 환불 가능 잔액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"canceledAt":{"description":"취소 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}]}},"nullable":false,"required":["cancelAmount","cancelReason","taxFreeAmount","taxAmount","refundableAmount","canceledAt"],"description":"결제 취소 정보.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"ITossCashReceipt.ISummary.Nullable":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/ITossCashReceipt.Type"},"amount":{"description":"현금 영수증 처리된 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"taxFreeAmount":{"description":"면세 처리된 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"issueNumber":{"description":"현금영수증 발급번호.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"receiptUrl":{"description":"현금영수증 조회 페이지 주소.","x-typia-required":true,"x-typia-optional":false,"type":"string"}},"nullable":true,"required":["type","amount","taxFreeAmount","issueNumber","receiptUrl"],"description":"현금 영수증 요약 정보.","x-typia-jsDocTags":[]},"ITossCashReceipt.Type":{"description":"현금 영수증의 종류.","type":"string","enum":["소득공제","지출증빙"]},"ITossGiftCertificatePayment":{"type":"object","properties":{"giftCertificate":{"$ref":"#/components/schemas/ITossGiftCertificatePayment.IGiftCertificate"},"method":{"description":"결제 수단.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["상품권"]},"type":{"description":"결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["NORMAL"]},"status":{"description":"결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["READY","IN_PROGRESS","WAITING_FOR_DEPOSIT","DONE","CANCELED","PARTIAL_CANCELED","ABORTED","EXPIRED"]},"mId":{"description":"가맹점 ID.\n\n현재 tosspayments 가 쓰임.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"version":{"description":"사용 중인 토스 페이먼츠 API 의 버전.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"paymentKey":{"description":"결제 내역의 식별자 번호.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"orderId":{"description":"주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"transactionKey":{"description":"거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"orderName":{"description":"주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"currency":{"description":"화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"totalAmount":{"description":"총 결제 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"balanceAmount":{"description":"취소할 수 있는 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"suppliedAmount":{"description":"공급가액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"taxFreeAmount":{"description":"면세액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"vat":{"description":"부가세.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"useEscrow":{"description":"에스크로 사용 여부.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"cultureExpense":{"description":"문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"requestedAt":{"description":"결제 요청 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}]},"approvedAt":{"description":"결제 승인 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}],"nullable":true},"cancels":{"description":"결제 취소 내역.","x-typia-required":true,"x-typia-optional":false,"type":"array","items":{"$ref":"#/components/schemas/ITossPaymentCancel"},"nullable":true},"cashReceipt":{"$ref":"#/components/schemas/ITossCashReceipt.ISummary.Nullable"}},"nullable":false,"required":["giftCertificate","method","type","status","mId","version","paymentKey","orderId","transactionKey","orderName","currency","totalAmount","balanceAmount","suppliedAmount","taxFreeAmount","vat","useEscrow","cultureExpense","requestedAt","approvedAt","cancels","cashReceipt"],"description":"상품권 결제 정보.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"ITossGiftCertificatePayment.IGiftCertificate":{"type":"object","properties":{"approveNo":{"description":"승인 번호.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"settlementStatus":{"description":"정산 상태.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["COMPLETE","INCOMPLETE"]}},"nullable":false,"required":["approveNo","settlementStatus"],"description":"상품권 정보.","x-typia-jsDocTags":[]},"ITossMobilePhonePayment":{"type":"object","properties":{"mobilePhone":{"$ref":"#/components/schemas/ITossMobilePhonePayment.IMobilePhone"},"method":{"description":"결제 수단.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["휴대폰"]},"type":{"description":"결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["NORMAL"]},"status":{"description":"결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["READY","IN_PROGRESS","WAITING_FOR_DEPOSIT","DONE","CANCELED","PARTIAL_CANCELED","ABORTED","EXPIRED"]},"mId":{"description":"가맹점 ID.\n\n현재 tosspayments 가 쓰임.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"version":{"description":"사용 중인 토스 페이먼츠 API 의 버전.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"paymentKey":{"description":"결제 내역의 식별자 번호.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"orderId":{"description":"주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"transactionKey":{"description":"거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"orderName":{"description":"주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"currency":{"description":"화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"totalAmount":{"description":"총 결제 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"balanceAmount":{"description":"취소할 수 있는 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"suppliedAmount":{"description":"공급가액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"taxFreeAmount":{"description":"면세액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"vat":{"description":"부가세.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"useEscrow":{"description":"에스크로 사용 여부.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"cultureExpense":{"description":"문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"requestedAt":{"description":"결제 요청 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}]},"approvedAt":{"description":"결제 승인 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}],"nullable":true},"cancels":{"description":"결제 취소 내역.","x-typia-required":true,"x-typia-optional":false,"type":"array","items":{"$ref":"#/components/schemas/ITossPaymentCancel"},"nullable":true},"cashReceipt":{"$ref":"#/components/schemas/ITossCashReceipt.ISummary.Nullable"}},"nullable":false,"required":["mobilePhone","method","type","status","mId","version","paymentKey","orderId","transactionKey","orderName","currency","totalAmount","balanceAmount","suppliedAmount","taxFreeAmount","vat","useEscrow","cultureExpense","requestedAt","approvedAt","cancels","cashReceipt"],"description":"휴대폰 결제 정보.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"ITossMobilePhonePayment.IMobilePhone":{"type":"object","properties":{"carrier":{"description":"통신사.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"customerMobilePhone":{"description":"고객 휴대폰 번호.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"settlementStatus":{"description":"정산 상태.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["COMPLETED","INCOMPLETED"]}},"nullable":false,"required":["carrier","customerMobilePhone","settlementStatus"],"description":"휴대폰 정보.","x-typia-jsDocTags":[]},"ITossTransferPayment":{"type":"object","properties":{"transfer":{"$ref":"#/components/schemas/ITossTransferPayment.ITransfer"},"method":{"description":"결제 수단.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["계좌이체"]},"type":{"description":"결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["NORMAL"]},"status":{"description":"결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["READY","IN_PROGRESS","WAITING_FOR_DEPOSIT","DONE","CANCELED","PARTIAL_CANCELED","ABORTED","EXPIRED"]},"mId":{"description":"가맹점 ID.\n\n현재 tosspayments 가 쓰임.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"version":{"description":"사용 중인 토스 페이먼츠 API 의 버전.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"paymentKey":{"description":"결제 내역의 식별자 번호.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"orderId":{"description":"주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"transactionKey":{"description":"거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"orderName":{"description":"주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"currency":{"description":"화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"totalAmount":{"description":"총 결제 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"balanceAmount":{"description":"취소할 수 있는 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"suppliedAmount":{"description":"공급가액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"taxFreeAmount":{"description":"면세액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"vat":{"description":"부가세.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"useEscrow":{"description":"에스크로 사용 여부.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"cultureExpense":{"description":"문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"requestedAt":{"description":"결제 요청 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}]},"approvedAt":{"description":"결제 승인 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}],"nullable":true},"cancels":{"description":"결제 취소 내역.","x-typia-required":true,"x-typia-optional":false,"type":"array","items":{"$ref":"#/components/schemas/ITossPaymentCancel"},"nullable":true},"cashReceipt":{"$ref":"#/components/schemas/ITossCashReceipt.ISummary.Nullable"}},"nullable":false,"required":["transfer","method","type","status","mId","version","paymentKey","orderId","transactionKey","orderName","currency","totalAmount","balanceAmount","suppliedAmount","taxFreeAmount","vat","useEscrow","cultureExpense","requestedAt","approvedAt","cancels","cashReceipt"],"description":"계좌 이체 결제 정보.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"ITossTransferPayment.ITransfer":{"type":"object","properties":{"bank":{"description":"은행명.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"settlementStatus":{"description":"이체 상태.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["COMPLETED","INCOMPLETED"]}},"nullable":false,"required":["bank","settlementStatus"],"description":"계좌 이체 정보.","x-typia-jsDocTags":[]},"ITossVirtualAccountPayment":{"type":"object","properties":{"secret":{"description":"가상 계좌로 결제할 때 전달되는 입금 콜백을 검증하기 위한 값.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"virtualAccount":{"$ref":"#/components/schemas/ITossVirtualAccountPayment.IVirtualAccount"},"method":{"description":"결제 수단.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["가상계좌"]},"type":{"description":"결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["NORMAL"]},"status":{"description":"결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["READY","IN_PROGRESS","WAITING_FOR_DEPOSIT","DONE","CANCELED","PARTIAL_CANCELED","ABORTED","EXPIRED"]},"mId":{"description":"가맹점 ID.\n\n현재 tosspayments 가 쓰임.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"version":{"description":"사용 중인 토스 페이먼츠 API 의 버전.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"paymentKey":{"description":"결제 내역의 식별자 번호.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"orderId":{"description":"주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"transactionKey":{"description":"거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"orderName":{"description":"주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"currency":{"description":"화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"totalAmount":{"description":"총 결제 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"balanceAmount":{"description":"취소할 수 있는 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"suppliedAmount":{"description":"공급가액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"taxFreeAmount":{"description":"면세액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"vat":{"description":"부가세.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"useEscrow":{"description":"에스크로 사용 여부.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"cultureExpense":{"description":"문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"requestedAt":{"description":"결제 요청 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}]},"approvedAt":{"description":"결제 승인 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}],"nullable":true},"cancels":{"description":"결제 취소 내역.","x-typia-required":true,"x-typia-optional":false,"type":"array","items":{"$ref":"#/components/schemas/ITossPaymentCancel"},"nullable":true},"cashReceipt":{"$ref":"#/components/schemas/ITossCashReceipt.ISummary.Nullable"}},"nullable":false,"required":["secret","virtualAccount","method","type","status","mId","version","paymentKey","orderId","transactionKey","orderName","currency","totalAmount","balanceAmount","suppliedAmount","taxFreeAmount","vat","useEscrow","cultureExpense","requestedAt","approvedAt","cancels","cashReceipt"],"description":"가상 계좌 결제 정보.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"ITossVirtualAccountPayment.IVirtualAccount":{"type":"object","properties":{"accountNumber":{"description":"계좌 번호.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"accountType":{"description":"가상 계좌 타입.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["일반","고정"]},"bank":{"description":"은행명.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"customerName":{"description":"고객 이름.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"dueDate":{"description":"입금 기한.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date","x-typia-typeTags":[{"target":"string","name":"Format<\"date\">","kind":"format","value":"date","validate":"/^(\\d{4})-(\\d{2})-(\\d{2})$/.test($input)","exclusive":["format","pattern"]}]},"expired":{"description":"가상 계좌 만료 여부.","x-typia-required":true,"x-typia-optional":false,"type":"boolean"},"settlementStatus":{"description":"정산 상태.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["COMPLETED","INCOMPLETED"]},"refundStatus":{"description":"환불 처리 상태.\n\n - NONE: 해당 없음\n - FAILED: 환불 실패\n - PENDING: 환불 처리중\n - PARTIAL_FAILED: 부분 환불 실패\n - COMPLETED: 환불 완료","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["COMPLETED","NONE","FAILED","PENDING","PARTIAL_FAILED"]}},"nullable":false,"required":["accountNumber","accountType","bank","customerName","dueDate","expired","settlementStatus","refundStatus"],"description":"가상 계좌 정보.","x-typia-jsDocTags":[]},"ITossCashReceipt.IStore":{"type":"object","properties":{"type":{"description":"현금 영수증의 종류.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["소득공제","지출증빙"]},"paymentKey":{"description":"귀속 결제의 {@link ITossPayment.paymentKey }.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"orderId":{"description":"주문의 식별자 ID.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"orderName":{"description":"주문 이름.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"registrationNumber":{"description":"현금 영수증 발급을 위한 개인 식별 번호.\n\n현금 영수증의 종류에 따라 휴대폰 번호나 주민등록번호 또는 사업자등록번호 및\n카드 번호를 입력할 수 있다.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"amount":{"description":"현금 영수증을 발행할 금액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"taxFreeAmount":{"description":"면세 금액.","x-typia-required":false,"x-typia-optional":true,"type":"number"},"businessNumber":{"description":"사업자 등록번호.","x-typia-required":false,"x-typia-optional":true,"type":"string"}},"nullable":false,"required":["type","paymentKey","orderId","orderName","registrationNumber","amount"],"description":"현금 영수증 입력 정보.","x-typia-jsDocTags":[]},"ITossCashReceipt":{"type":"object","properties":{"receiptKey":{"description":"현금 영수증의 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"type":{"$ref":"#/components/schemas/ITossCashReceipt.Type"},"orderId":{"description":"주문의 식별자 ID.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"orderName":{"description":"주문 이름.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"approvalNumber":{"description":"현금 영수증 승인 번호.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"approvedAt":{"description":"현금 영수증 승인 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}]},"canceledAt":{"description":"현금 영수증 취소 일시.","x-typia-required":true,"x-typia-optional":false,"type":"string","format":"date-time","x-typia-typeTags":[{"target":"string","name":"Format<\"date-time\">","kind":"format","value":"date-time","validate":"!isNaN(new Date($input).getTime())","exclusive":["format","pattern"]}],"nullable":true},"receiptUrl":{"description":"영수증 URL.","x-typia-required":true,"x-typia-optional":false,"type":"string"}},"nullable":false,"required":["receiptKey","type","orderId","orderName","approvalNumber","approvedAt","canceledAt","receiptUrl"],"description":"현금 영수증 정보.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"ITossCashReceipt.ICancel":{"type":"object","properties":{"amount":{"description":"취소 금액.\n\n미 입력시 현금 영수증에 기재된 {@link ITossCashReceipt.amount 총액}이 취소됨.","x-typia-required":false,"x-typia-optional":true,"type":"number"}},"nullable":false,"description":"현금 영수증 취소 입력 정보.","x-typia-jsDocTags":[]},"ITossPaymentWebhook":{"type":"object","properties":{"eventType":{"description":"이벤트 타입.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["PAYMENT_STATUS_CHANGED"]},"data":{"$ref":"#/components/schemas/ITossPaymentWebhook.IData"}},"nullable":false,"required":["eventType","data"],"description":"웹훅 이벤트 정보.","x-typia-jsDocTags":[{"name":"author","text":[{"text":"Samchon","kind":"text"}]}]},"ITossPaymentWebhook.IData":{"type":"object","properties":{"paymentKey":{"description":"{@link ITossPayment } 의 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"orderId":{"description":"주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"status":{"description":"결제 상태.\n\n - DONE: 결제 완료\n - CANCELED: 결제가 취소됨\n - PARTIAL_CANCELED: 결제가 부분 취소됨\n - WAITING_FOR_DEPOSIT: 입금 대기 중","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["WAITING_FOR_DEPOSIT","DONE","CANCELED","PARTIAL_CANCELED"]}},"nullable":false,"required":["paymentKey","orderId","status"],"description":"웹훅 이벤트 데이터.","x-typia-jsDocTags":[]},"ITossCardPayment.IStore":{"type":"object","properties":{"method":{"description":"결제 수단이 신용 카드임을 의미.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["card"]},"cardNumber":{"description":"카드 번호.","x-typia-required":true,"x-typia-optional":false,"type":"string","pattern":"[0-9]{16}","x-typia-typeTags":[{"target":"string","name":"Pattern<\"[0-9]{16}\">","kind":"pattern","value":"[0-9]{16}","validate":"/[0-9]{16}/.test($input)","exclusive":["format","pattern"]}]},"cardExpirationYear":{"description":"카드 만료 년도 (2 자리).","x-typia-required":true,"x-typia-optional":false,"type":"string","pattern":"\\d{2}","x-typia-typeTags":[{"target":"string","name":"Pattern<\"\\\\d{2}\">","kind":"pattern","value":"\\d{2}","validate":"/\\d{2}/.test($input)","exclusive":["format","pattern"]}]},"cardExpirationMonth":{"description":"카드 만료 월 (2 자리).","x-typia-required":true,"x-typia-optional":false,"type":"string","pattern":"^(0[1-9]|1[012])$","x-typia-typeTags":[{"target":"string","name":"Pattern<\"^(0[1-9]|1[012])$\">","kind":"pattern","value":"^(0[1-9]|1[012])$","validate":"/^(0[1-9]|1[012])$/.test($input)","exclusive":["format","pattern"]}]},"cardPassword":{"description":"카드 비밀번호.","x-typia-required":false,"x-typia-optional":true,"type":"string"},"cardInstallmentPlan":{"description":"할부 개월 수.","x-typia-required":false,"x-typia-optional":true,"type":"number"},"amount":{"description":"지불 총액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"taxFreeAmount":{"description":"면세금 총액.","x-typia-required":false,"x-typia-optional":true,"type":"number"},"orderId":{"description":"주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"orderName":{"description":"주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.","x-typia-required":false,"x-typia-optional":true,"type":"string"},"customerBirthday":{"description":"고객의 생년월일.\n\n표기 형식 YYMMDD.","x-typia-required":false,"x-typia-optional":true,"type":"string","pattern":"^([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$","x-typia-typeTags":[{"target":"string","name":"Pattern<\"^([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$\">","kind":"pattern","value":"^([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$","validate":"/^([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$/.test($input)","exclusive":["format","pattern"]}]},"customerEmail":{"description":"고객의 이메일.","x-typia-required":false,"x-typia-optional":true,"type":"string","format":"email","x-typia-typeTags":[{"target":"string","name":"Format<\"email\">","kind":"format","value":"email","validate":"/^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i.test($input)","exclusive":["format","pattern"]}]},"vbv":{"$ref":"#/components/schemas/__type.o1"},"__approved":{"description":"결제 승인 여부.\n\n오직 가짜 페이먼츠 서버 `fake-toss-payments-server` 에서만 사용되는 값으로써,\n결제 승인을 고의로 지연시키거나 할 때 사용된다. 이 값을 `false` 로 하면, 프론트\n어플리케이션이 토스 페이먼츠가 제공해주는 결제 창을 사용하여 결제를 진행하는\n상황을 시뮬레이션할 수 있다.\n\n본디 토스 페이먼츠 서버는 프론트 어플리케이션에서 백엔드 서버를 거치지 않고,\n토스 페이먼츠가 제공해주는 결제 창을 이용하여 직접 결제를 요청하는 경우,\n백엔드에서 이를 별도 {@link functional.payments.approve 승인} 처리해주기 전까지\n정식 결제로 인청치 아니한다.\n\n반면 백엔드 서버에서 토스 페이먼츠 서버의 API 를 호출하는 경우, 토스 페이먼츠는\n이를 그 즉시로 승인해주기, `fake-toss-payments-server` 에서 별도의 승인 처리가\n필요한 상황을 시뮬레이션하기 위해서는 이러한 속성이 필요한 것.","x-typia-required":false,"x-typia-optional":true,"type":"boolean"}},"nullable":false,"required":["method","cardNumber","cardExpirationYear","cardExpirationMonth","amount","orderId"],"description":"신용 카드를 이용한 결제 신청 정보.","x-typia-jsDocTags":[]},"__type.o1":{"type":"object","properties":{"cavv":{"description":"3D Secure 인증 세션에 대한 인증 값.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"xid":{"description":"트랜잭션 ID.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"eci":{"description":"3DS 인증 결과에 대한 코드 값.","x-typia-required":true,"x-typia-optional":false,"type":"string"}},"nullable":false,"required":["cavv","xid","eci"],"x-typia-jsDocTags":[]},"ITossPayment.IApproval":{"type":"object","properties":{"orderId":{"description":"주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"amount":{"description":"결제 총액.","x-typia-required":true,"x-typia-optional":false,"type":"number"}},"nullable":false,"required":["orderId","amount"],"description":"결제 승인 정보.","x-typia-jsDocTags":[]},"ITossPaymentCancel.IStore":{"type":"object","properties":{"paymentKey":{"description":"{@link ITossPayment } 의 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"cancelReason":{"description":"취소 사유.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"cancelAmount":{"description":"취소 총액.","x-typia-required":false,"x-typia-optional":true,"type":"number"},"refundReceiveAccount":{"$ref":"#/components/schemas/__type.o2"},"taxAmount":{"description":"과세 처리 금액.","x-typia-required":false,"x-typia-optional":true,"type":"number"},"taxFreeAmount":{"description":"면세 처리 금액.","x-typia-required":false,"x-typia-optional":true,"type":"number"},"refundableAmount":{"description":"결제 취소 후 환불 가능 잔액.","x-typia-required":false,"x-typia-optional":true,"type":"number"}},"nullable":false,"required":["paymentKey","cancelReason"],"description":"결제 취소 신청 정보.","x-typia-jsDocTags":[]},"__type.o2":{"type":"object","properties":{"bank":{"description":"은행 정보.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"accountNumber":{"description":"계좌 번호.","x-typia-required":true,"x-typia-optional":false,"type":"string","pattern":"^[0-9]{0,20}$","x-typia-typeTags":[{"target":"string","name":"Pattern<\"^[0-9]{0,20}$\">","kind":"pattern","value":"^[0-9]{0,20}$","validate":"/^[0-9]{0,20}$/.test($input)","exclusive":["format","pattern"]}]},"holderName":{"description":"예금주.","x-typia-required":true,"x-typia-optional":false,"type":"string"}},"nullable":false,"required":["bank","accountNumber","holderName"],"x-typia-jsDocTags":[]},"ITossVirtualAccountPayment.IStore":{"type":"object","properties":{"method":{"description":"결제 수단이 가상 계좌임을 의미.","x-typia-required":true,"x-typia-optional":false,"type":"string","enum":["virtual-account"]},"orderId":{"description":"주문 식별자 번호.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"orderName":{"description":"주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"bank":{"description":"은행명.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"customerName":{"description":"고객 이름.","x-typia-required":true,"x-typia-optional":false,"type":"string"},"amount":{"description":"결제 총액.","x-typia-required":true,"x-typia-optional":false,"type":"number"},"__approved":{"description":"결제 승인 여부.\n\n오직 가짜 페이먼츠 서버 `fake-toss-payments-server` 에서만 사용되는 값으로써,\n결제 승인을 고의로 지연시키거나 할 때 사용된다. 이 값을 `false` 로 하면, 프론트\n어플리케이션이 토스 페이먼츠가 제공해주는 결제 창을 사용하여 결제를 진행하는\n상황을 시뮬레이션할 수 있다.\n\n본디 토스 페이먼츠 서버는 프론트 어플리케이션에서 백엔드 서버를 거치지 않고,\n토스 페이먼츠가 제공해주는 결제 창을 이용하여 직접 결제를 요청하는 경우,\n백엔드에서 이를 별도 {@link functional.payments.approve 승인} 처리해주기 전까지\n정식 결제로 인청치 아니한다.\n\n반면 백엔드 서버에서 토스 페이먼츠 서버의 API 를 호출하는 경우, 토스 페이먼츠는\n이를 그 즉시로 승인해주기, `fake-toss-payments-server` 에서 별도의 승인 처리가\n필요한 상황을 시뮬레이션하기 위해서는 이러한 속성이 필요한 것.","x-typia-required":false,"x-typia-optional":true,"type":"boolean"}},"nullable":false,"required":["method","orderId","orderName","bank","customerName","amount"],"description":"가상 계좌를 이용한 결제 신청 정보.","x-typia-jsDocTags":[]}},"securitySchemes":{"basic":{"type":"apiKey","name":"Authorization","in":"header"}}}} \ No newline at end of file