diff --git a/package.json b/package.json index a66fbd5..1b79584 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@samchon/payments", - "version": "7.0.0", + "version": "8.0.0", "description": "Collection of Payment system of Samchon", "scripts": { "package:latest": "node deploy latest", diff --git a/packages/fake-iamport-server/package.json b/packages/fake-iamport-server/package.json index 3aad077..c4ff9eb 100644 --- a/packages/fake-iamport-server/package.json +++ b/packages/fake-iamport-server/package.json @@ -1,6 +1,6 @@ { "name": "fake-iamport-server", - "version": "7.0.0", + "version": "8.0.0", "description": "Fake iamport server for testing", "main": "lib/index.js", "typings": "lib/index.d.ts", @@ -38,7 +38,7 @@ }, "homepage": "https://github.com/samchon/fake-iamport-server", "devDependencies": { - "@nestia/sdk": "^2.6.2", + "@nestia/sdk": "^3.0.1", "@types/atob": "^2.1.2", "@types/btoa": "^1.2.3", "@types/cli": "^0.11.19", @@ -57,9 +57,9 @@ "typescript": "^5.3.2" }, "dependencies": { - "@nestia/core": "^2.6.2", + "@nestia/core": "^3.0.1", "@nestia/e2e": "^0.4.1", - "@nestia/fetcher": "^2.6.2", + "@nestia/fetcher": "^3.0.1", "@nestjs/common": "^10.2.8", "@nestjs/core": "^10.2.8", "@nestjs/platform-fastify": "^10.2.8", @@ -70,7 +70,7 @@ "source-map-support": "^0.5.19", "tstl": "^3.0.0", "typescript-transform-paths": "^3.4.6", - "typia": "^5.5.7", + "typia": "^6.0.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 2b6f7a3..6a12321 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": "7.0.0", + "version": "8.0.0", "description": "Fake toss-payments server for testing", "main": "lib/index.js", "typings": "lib/index.d.ts", @@ -39,7 +39,7 @@ "homepage": "https://github.com/samchon/fake-toss-payments-server", "devDependencies": { "@nestia/e2e": "^0.4.1", - "@nestia/sdk": "^2.6.2", + "@nestia/sdk": "^3.0.1", "@types/atob": "^2.1.2", "@types/btoa": "^1.2.3", "@types/cli": "^0.11.19", @@ -59,8 +59,8 @@ "typescript-transform-paths": "^3.4.6" }, "dependencies": { - "@nestia/core": "^2.6.2", - "@nestia/fetcher": "^2.6.2", + "@nestia/core": "^3.0.1", + "@nestia/fetcher": "^3.0.1", "@nestjs/common": "^10.2.8", "@nestjs/core": "^10.2.8", "@nestjs/platform-fastify": "^10.2.8", @@ -70,7 +70,7 @@ "serialize-error": "^4.1.0", "source-map-support": "^0.5.19", "tstl": "^3.0.0", - "typia": "^5.5.7", + "typia": "^6.0.1", "uuid": "^9.0.0" }, "keywords": [ diff --git a/packages/iamport-server-api/package.json b/packages/iamport-server-api/package.json index 930d7ce..716189e 100644 --- a/packages/iamport-server-api/package.json +++ b/packages/iamport-server-api/package.json @@ -1,6 +1,6 @@ { "name": "iamport-server-api", - "version": "7.0.0", + "version": "8.0.0", "description": "API for Iamport Server", "main": "lib/index.js", "typings": "lib/index.d.ts", @@ -34,7 +34,7 @@ "typescript": "^5.3.2" }, "dependencies": { - "@nestia/fetcher": "^2.6.2", - "typia": "^5.5.7" + "@nestia/fetcher": "^3.0.1", + "typia": "^6.0.1" } } \ No newline at end of file diff --git a/packages/iamport-server-api/swagger.json b/packages/iamport-server-api/swagger.json index b55eae3..9708449 100644 --- a/packages/iamport-server-api/swagger.json +++ b/packages/iamport-server-api/swagger.json @@ -1,5 +1,5 @@ { - "openapi": "3.0.1", + "openapi": "3.1.0", "servers": [ { "url": "http://localhost:10851", @@ -13,7 +13,7 @@ "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": "7.0.0", + "version": "8.0.0", "license": { "name": "MIT" } @@ -720,7 +720,6 @@ "description": "응답 데이터, 사실상 본문." } }, - "nullable": false, "required": [ "code", "message", @@ -750,24 +749,54 @@ "type": "string" }, "customer_name": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "customer_tel": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "customer_email": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "customer_addr": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "customer_postcode": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "inserted": { "type": "number" @@ -781,7 +810,6 @@ "description": "고객 식별자 키.\n\n아임포트가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.\n\n다만 고객이라기보다 실제로는 카드의 식별자 키로 써야함." } }, - "nullable": false, "required": [ "pg_provider", "pg_id", @@ -855,7 +883,6 @@ "description": "고객 식별자 키.\n\n아임포트가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.\n\n다만 고객이라기보다 실제로는 카드의 식별자 키로 써야함." } }, - "nullable": false, "required": [ "card_number", "expiry", @@ -934,12 +961,19 @@ "description": "주문 이름." }, "currency": { - "type": "string", - "enum": [ - "EUR", - "JPY", - "KRW", - "USD" + "oneOf": [ + { + "const": "KRW" + }, + { + "const": "USD" + }, + { + "const": "EUR" + }, + { + "const": "JPY" + } ], "title": "통화 정보", "description": "통화 정보." @@ -992,7 +1026,6 @@ "description": "결제 성공시 통지될 Notification, 웹훅 URL." } }, - "nullable": false, "required": [ "card_number", "expiry", @@ -1022,7 +1055,6 @@ "description": "응답 데이터, 사실상 본문." } }, - "nullable": false, "required": [ "code", "message", @@ -1060,10 +1092,13 @@ "description": "카드사 승인번호." }, "pay_method": { - "type": "string", - "enum": [ - "card", - "samsung" + "oneOf": [ + { + "const": "card" + }, + { + "const": "samsung" + } ] }, "imp_uid": { @@ -1077,8 +1112,14 @@ "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다." }, "name": { - "type": "string", - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], "title": "주문명, 누락 가능", "description": "주문명, 누락 가능." }, @@ -1115,8 +1156,14 @@ "type": "string" }, "emb_pg_provider": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "pg_id": { "type": "string" @@ -1128,41 +1175,95 @@ "type": "boolean" }, "buyer_name": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "buyer_email": { - "type": "string", - "format": "email", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "email" + } + ] }, "buyer_tel": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "buyer_addr": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "buyer_postcode": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "customer_uid": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "customer_uid_usage": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "custom_data": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "user_agent": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "status": { "$ref": "#/components/schemas/IIamportPayment.Status", @@ -1190,12 +1291,24 @@ "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀." }, "fail_reason": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "cancel_reason": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "cancel_history": { "type": "array", @@ -1204,7 +1317,6 @@ } } }, - "nullable": false, "required": [ "card_code", "card_name", @@ -1247,21 +1359,35 @@ "description": "카드 결제 정보." }, "IIamportPayment.Currency": { - "type": "string", - "enum": [ - "KRW", - "USD", - "EUR", - "JPY" + "oneOf": [ + { + "const": "KRW" + }, + { + "const": "USD" + }, + { + "const": "EUR" + }, + { + "const": "JPY" + } ] }, "IIamportPayment.Status": { - "type": "string", - "enum": [ - "paid", - "ready", - "failed", - "cancelled" + "oneOf": [ + { + "const": "paid" + }, + { + "const": "ready" + }, + { + "const": "failed" + }, + { + "const": "cancelled" + } ] }, "IIamportPaymentCancel": { @@ -1287,7 +1413,6 @@ "format": "uri" } }, - "nullable": false, "required": [ "pg_id", "pg_tid", @@ -1317,12 +1442,19 @@ "description": "주문 이름." }, "currency": { - "type": "string", - "enum": [ - "EUR", - "JPY", - "KRW", - "USD" + "oneOf": [ + { + "const": "KRW" + }, + { + "const": "USD" + }, + { + "const": "EUR" + }, + { + "const": "JPY" + } ], "title": "통화 정보", "description": "통화 정보." @@ -1380,7 +1512,6 @@ "description": "고객 식별자 키.\n\n아임포트가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.\n\n다만 고객이라기보다 실제로는 카드의 식별자 키로 써야함." } }, - "nullable": false, "required": [ "merchant_uid", "amount", @@ -1408,7 +1539,6 @@ "description": "응답 데이터, 사실상 본문." } }, - "nullable": false, "required": [ "code", "message", @@ -1425,8 +1555,14 @@ "description": "아임포트가 발급해 준 식별자 번호." }, "merchant_uid": { - "type": "string", - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], "title": "서비스로부터의 식별자 키", "description": "서비스로부터의 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다." }, @@ -1462,11 +1598,16 @@ "description": "본인인증 대상자 핸드폰 번호." }, "carrier": { - "type": "string", - "enum": [ - "KT", - "LGT", - "SKT" + "oneOf": [ + { + "const": "SKT" + }, + { + "const": "KT" + }, + { + "const": "LGT" + } ], "title": "본인인증 대상자 통신사 코드", "description": "본인인증 대상자 통신사 코드." @@ -1508,7 +1649,6 @@ "description": "(테스트 전용) OTP 코드.\n\n오직 `fake-iamport-server` 에서만 쓰이는 속성으로써, 본인인증을 시뮬레이션할 때,\n어떠한 OTP 코드가 발급되었는 지를 확인하기 위하여 사용된다. 이를 이용하여\n{@link functional.certifications.otp.confirm } 함수를 호출하면, 본인인증을 완료할\n수 있다." } }, - "nullable": false, "required": [ "imp_uid", "merchant_uid", @@ -1554,11 +1694,16 @@ "description": "주민등록 뒷부분 첫 자리." }, "carrier": { - "type": "string", - "enum": [ - "KT", - "LGT", - "SKT" + "oneOf": [ + { + "const": "SKT" + }, + { + "const": "KT" + }, + { + "const": "LGT" + } ], "title": "본인인증 대상자 통신사 코드", "description": "본인인증 대상자 통신사 코드." @@ -1584,7 +1729,6 @@ "description": "PG 사 구분자.\n\n다날 상점아이디를 2개 이상 동시에 사용하시려는 경우에 설정하면 된다.\n\n**danal.{상점아이디}** 형태로 지정." } }, - "nullable": false, "required": [ "name", "phone", @@ -1613,7 +1757,6 @@ "description": "응답 데이터, 사실상 본문." } }, - "nullable": false, "required": [ "code", "message", @@ -1630,7 +1773,6 @@ "description": "본인인증정보의 식별자 키." } }, - "nullable": false, "required": [ "imp_uid" ], @@ -1645,7 +1787,6 @@ "description": "SMS 로 전송된 본인인증 번호." } }, - "nullable": false, "required": [ "otp" ], @@ -1665,18 +1806,24 @@ "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다." }, "status": { - "type": "string", - "enum": [ - "cancelled", - "failed", - "paid", - "ready" + "oneOf": [ + { + "const": "paid" + }, + { + "const": "ready" + }, + { + "const": "failed" + }, + { + "const": "cancelled" + } ], "title": "현재 상태", "description": "현재 상태." } }, - "nullable": false, "required": [ "imp_uid", "merchant_uid", @@ -1693,7 +1840,6 @@ "description": "페이팔의 경우, 이 값을 `true` 로 할 것." } }, - "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` 옵션을 추가해야 함" }, "IIamportResponseIIamportPayment": { @@ -1715,7 +1861,6 @@ "description": "응답 데이터, 사실상 본문." } }, - "nullable": false, "required": [ "code", "message", @@ -1754,10 +1899,7 @@ "description": "은행 이름." }, "pay_method": { - "type": "string", - "enum": [ - "trans" - ] + "const": "trans" }, "imp_uid": { "type": "string", @@ -1770,8 +1912,14 @@ "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다." }, "name": { - "type": "string", - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], "title": "주문명, 누락 가능", "description": "주문명, 누락 가능." }, @@ -1808,8 +1956,14 @@ "type": "string" }, "emb_pg_provider": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "pg_id": { "type": "string" @@ -1821,41 +1975,95 @@ "type": "boolean" }, "buyer_name": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "buyer_email": { - "type": "string", - "format": "email", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "email" + } + ] }, "buyer_tel": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "buyer_addr": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "buyer_postcode": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "customer_uid": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "customer_uid_usage": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "custom_data": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "user_agent": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "status": { "$ref": "#/components/schemas/IIamportPayment.Status", @@ -1883,12 +2091,24 @@ "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀." }, "fail_reason": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "cancel_reason": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "cancel_history": { "type": "array", @@ -1897,7 +2117,6 @@ } } }, - "nullable": false, "required": [ "bank_code", "bank_name", @@ -1968,10 +2187,7 @@ "description": "가상 계좌 개설 일시." }, "pay_method": { - "type": "string", - "enum": [ - "vbank" - ] + "const": "vbank" }, "imp_uid": { "type": "string", @@ -1984,8 +2200,14 @@ "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다." }, "name": { - "type": "string", - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], "title": "주문명, 누락 가능", "description": "주문명, 누락 가능." }, @@ -2022,8 +2244,14 @@ "type": "string" }, "emb_pg_provider": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "pg_id": { "type": "string" @@ -2035,41 +2263,95 @@ "type": "boolean" }, "buyer_name": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "buyer_email": { - "type": "string", - "format": "email", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "email" + } + ] }, "buyer_tel": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "buyer_addr": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "buyer_postcode": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "customer_uid": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "customer_uid_usage": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "custom_data": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "user_agent": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "status": { "$ref": "#/components/schemas/IIamportPayment.Status", @@ -2097,12 +2379,24 @@ "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀." }, "fail_reason": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "cancel_reason": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "cancel_history": { "type": "array", @@ -2111,7 +2405,6 @@ } } }, - "nullable": false, "required": [ "vbank_code", "vbank_name", @@ -2158,20 +2451,43 @@ "type": "object", "properties": { "pay_method": { - "type": "string", - "enum": [ - "booknlife", - "cultureland", - "happymoney", - "kakaopay", - "kpay", - "lpay", - "payco", - "phone", - "point", - "smartculture", - "ssgpay", - "tosspay" + "oneOf": [ + { + "const": "phone" + }, + { + "const": "kpay" + }, + { + "const": "kakaopay" + }, + { + "const": "payco" + }, + { + "const": "lpay" + }, + { + "const": "ssgpay" + }, + { + "const": "tosspay" + }, + { + "const": "cultureland" + }, + { + "const": "smartculture" + }, + { + "const": "happymoney" + }, + { + "const": "booknlife" + }, + { + "const": "point" + } ] }, "imp_uid": { @@ -2185,8 +2501,14 @@ "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다." }, "name": { - "type": "string", - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], "title": "주문명, 누락 가능", "description": "주문명, 누락 가능." }, @@ -2223,8 +2545,14 @@ "type": "string" }, "emb_pg_provider": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "pg_id": { "type": "string" @@ -2236,41 +2564,95 @@ "type": "boolean" }, "buyer_name": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "buyer_email": { - "type": "string", - "format": "email", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "email" + } + ] }, "buyer_tel": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "buyer_addr": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "buyer_postcode": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "customer_uid": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "customer_uid_usage": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "custom_data": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "user_agent": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "status": { "$ref": "#/components/schemas/IIamportPayment.Status", @@ -2298,12 +2680,24 @@ "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀." }, "fail_reason": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "cancel_reason": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "cancel_history": { "type": "array", @@ -2312,7 +2706,6 @@ } } }, - "nullable": false, "required": [ "pay_method", "imp_uid", @@ -2368,9 +2761,15 @@ "description": "취소 금액, 부분 취소도 가능하다.\n\n누락시 전액 취소." }, "checksum": { - "type": "number", - "minimum": 0, - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "minimum": 0 + } + ], "title": "취소 트랜잭션 수행 전, 현재 시점의 취소 가능한 잔액", "description": "취소 트랜잭션 수행 전, 현재 시점의 취소 가능한 잔액.\n\nAPI요청자가 기록하고 있는 취소가능 잔액과 아임포트가 기록하고 있는 취소가능 잔액이\n일치하는지 사전에 검증하고, 검증에 실패하면 트랜잭션을 수행하지 않는다.\n\n`null` 인 경우에는 검증 프로세스를 생략." }, @@ -2381,7 +2780,6 @@ }, "tax_free": { "type": "number", - "default": 0, "title": "취소요청금액 중 면세금액", "description": "취소요청금액 중 면세금액." }, @@ -2405,7 +2803,6 @@ "description": "환불계좌 예금주 연락처" } }, - "nullable": false, "required": [ "imp_uid", "merchant_uid", @@ -2433,7 +2830,6 @@ "description": "응답 데이터, 사실상 본문." } }, - "nullable": false, "required": [ "code", "message", @@ -2491,7 +2887,6 @@ "description": "현금영수증 취소 시간.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀." } }, - "nullable": false, "required": [ "imp_uid", "receipt_uid", @@ -2506,10 +2901,13 @@ "description": "현금 영수증 정보." }, "IIamportReceipt.Type": { - "type": "string", - "enum": [ - "person", - "company" + "oneOf": [ + { + "const": "person" + }, + { + "const": "company" + } ], "description": "현금영수증 발행 타입 (대상)." }, @@ -2527,21 +2925,31 @@ "description": "현금영수증 발생대상 식별정보.\n\n - 국세청현금영수증카드\n - 휴대폰번호\n - 주민등록번호\n - 사업자등록번호" }, "identifier_type": { - "type": "string", - "enum": [ - "business", - "person", - "phone", - "taxcard" + "oneOf": [ + { + "const": "phone" + }, + { + "const": "person" + }, + { + "const": "business" + }, + { + "const": "taxcard" + } ], "title": "현금영수증 발행대상 유형", "description": "현금영수증 발행대상 유형.\n\n - person: 주민등록번호\n - business: 사업자등록번호\n - phone: 휴대폰번호\n - taxcard: 국세청현금영수증카드\n\n일부 PG 사의 경우 이 항목이 없어 된다는데, 어지간하면 그냥 쓰기 바람." }, "type": { - "type": "string", - "enum": [ - "company", - "person" + "oneOf": [ + { + "const": "person" + }, + { + "const": "company" + } ], "title": "현금영수증 발행 타입 (대상)", "description": "현금영수증 발행 타입 (대상).\n\n누락시 person 이 사용됨." @@ -2567,7 +2975,6 @@ "description": "면세 금액." } }, - "nullable": false, "required": [ "imp_uid", "identifier" @@ -2588,7 +2995,6 @@ "description": "Secret 키." } }, - "nullable": false, "required": [ "imp_key", "imp_secret" @@ -2614,7 +3020,6 @@ "description": "응답 데이터, 사실상 본문." } }, - "nullable": false, "required": [ "code", "message", @@ -2641,7 +3046,6 @@ "description": "유저 인증 토큰." } }, - "nullable": false, "required": [ "now", "expired_at", @@ -2714,7 +3118,6 @@ "description": "[이니시스 전용] 가맹점 콘솔에서 확인한 API 값." } }, - "nullable": false, "required": [ "merchant_uid", "amount", @@ -2743,7 +3146,6 @@ "description": "응답 데이터, 사실상 본문." } }, - "nullable": false, "required": [ "code", "message", @@ -2770,7 +3172,6 @@ "description": "수정할 가상계좌 입금 기한." } }, - "nullable": false, "required": [ "imp_uid" ], @@ -2784,5 +3185,6 @@ "in": "header" } } - } + }, + "tags": [] } \ No newline at end of file diff --git a/packages/payment-api/package.json b/packages/payment-api/package.json index 14e0a23..915214e 100644 --- a/packages/payment-api/package.json +++ b/packages/payment-api/package.json @@ -1,6 +1,6 @@ { "name": "@samchon/payment-api", - "version": "7.0.0", + "version": "8.0.0", "description": "API for Payment Backend", "main": "lib/index.js", "typings": "lib/index.d.ts", @@ -34,10 +34,10 @@ "typescript": "^5.3.2" }, "dependencies": { - "@nestia/fetcher": "^2.6.2", + "@nestia/fetcher": "^3.0.1", "@types/node": "^20.11.5", - "iamport-server-api": "^7.0.0", - "toss-payments-server-api": "^7.0.0", - "typia": "^5.5.7" + "iamport-server-api": "^8.0.0", + "toss-payments-server-api": "^8.0.0", + "typia": "^6.0.1" } } \ No newline at end of file diff --git a/packages/payment-api/swagger.json b/packages/payment-api/swagger.json index 513b79c..205ae35 100644 --- a/packages/payment-api/swagger.json +++ b/packages/payment-api/swagger.json @@ -1,5 +1,5 @@ { - "openapi": "3.0.1", + "openapi": "3.1.0", "servers": [ { "url": "https://github.com/samchon/nestia", @@ -7,7 +7,7 @@ } ], "info": { - "version": "7.0.0", + "version": "8.0.0", "title": "@samchon/payment-backend", "description": "Payment Backend Server", "license": { @@ -354,7 +354,6 @@ "$ref": "#/components/schemas/process.global.NodeJS.ResourceUsage" } }, - "nullable": false, "required": [ "cpu", "memory", @@ -371,7 +370,6 @@ "type": "number" } }, - "nullable": false, "required": [ "user", "system" @@ -396,7 +394,6 @@ "type": "number" } }, - "nullable": false, "required": [ "rss", "heapTotal", @@ -457,7 +454,6 @@ "type": "number" } }, - "nullable": false, "required": [ "fsRead", "fsWrite", @@ -507,7 +503,6 @@ "description": "Creation time of this system." } }, - "nullable": false, "required": [ "uid", "arguments", @@ -559,7 +554,6 @@ } } }, - "nullable": false, "required": [ "shortHash", "branch", @@ -585,7 +579,6 @@ "type": "string" } }, - "nullable": false, "required": [ "name", "email" @@ -611,16 +604,12 @@ "type": "object", "properties": { "type": { - "type": "string", - "enum": [ - "git" - ] + "const": "git" }, "url": { "type": "string" } }, - "nullable": false, "required": [ "type", "url" @@ -639,7 +628,6 @@ "type": "string" } }, - "nullable": false, "required": [ "url" ] @@ -660,7 +648,6 @@ "type": "string" } }, - "nullable": false, "required": [ "registry" ] @@ -678,7 +665,6 @@ } } }, - "nullable": false, "required": [ "name", "version", @@ -697,8 +683,10 @@ "Recordstringstring": { "type": "object", "properties": {}, - "nullable": false, - "description": "Construct a type with a set of properties K of type T" + "description": "Construct a type with a set of properties K of type T", + "additionalProperties": { + "type": "string" + } }, "IPaymentSource.IAccessor": { "type": "object", @@ -722,7 +710,6 @@ "description": "레코드 조회를 위한 비밀번호 입력." } }, - "nullable": false, "required": [ "schema", "table", @@ -752,10 +739,7 @@ "description": "Primary Key." }, "vendor_code": { - "type": "string", - "enum": [ - "iamport" - ], + "const": "iamport", "title": "벤더사 식별자 코드", "description": "벤더사 식별자 코드.\n\n{@link IPaymentVendor.code }와 완전히 동일한 값이되, 단지 union type\nspecialization 을 위해 중복 표기하였을 뿐이다. `if condition` 을 통하여\n{@link IPaymentHistory.data }의 타입을 특정할 수 있다." }, @@ -785,16 +769,28 @@ "description": "결제 가격." }, "refund": { - "type": "number", - "minimum": 0, - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "minimum": 0 + } + ], "title": "결제 취소시의 환불 금액", "description": "결제 취소시의 환불 금액." }, "webhook_url": { - "type": "string", - "format": "uri", - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uri" + } + ], "description": "결제 정보가 갱신되었을 때, 이를 수신할 URL" }, "created_at": { @@ -804,16 +800,28 @@ "description": "결제 레코드 생성 일시." }, "paid_at": { - "type": "string", - "format": "date-time", - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], "title": "결제 완료 일시", "description": "결제 완료 일시." }, "cancelled_at": { - "type": "string", - "format": "date-time", - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], "title": "결제 취소 일시", "description": "결제 취소 일시." }, @@ -826,7 +834,6 @@ "description": "결제 취소 내역 리스트." } }, - "nullable": false, "required": [ "id", "vendor_code", @@ -848,10 +855,7 @@ "type": "object", "properties": { "code": { - "type": "string", - "enum": [ - "iamport" - ], + "const": "iamport", "title": "벤더사 식별자 코드", "description": "벤더사 식별자 코드.\n\n아임포트의 경우에는 `iamport` 를, 토스의 경우에는 `toss.payments` 를 적어주면 된다." }, @@ -866,7 +870,6 @@ "description": "벤더사로부터 발급받은 식별자 번호.\n\n결제 PG 사들이 제공하는 팝업창을 이용하여 결제를 진행하거나 혹은 간편 결제 수단을\n등록하거든, 결제 PG 사들은 해당 건에 대하여 별도의 식별자 번호를 발급한다.\n`IPaymentVendor.uid` 는 이처럼 결제 PG 사들이 발급해 준 식별자 번호를 기재하는\n속성이다.\n\n단 예외가 하나 있어, 아임포트는 간편 결제 카드 등록 건에 대하여 별도의 식별자 번호를\n부여하지 않고, 귀하의 서비스에서 발급해 준 ID 를 그대로 사용한다. 때문에 아임포트를\n통한 간편 결제 카드 등록의 건만 예외적으로, `IPaymentVendor.uid` 에\n{@link IPaymentSource.id } 를 동일하게 할당해주어야 한다." } }, - "nullable": false, "required": [ "code", "store_id", @@ -891,7 +894,6 @@ "description": "참조 레코드의 PK" } }, - "nullable": false, "required": [ "schema", "table", @@ -946,10 +948,13 @@ "description": "카드사 승인번호." }, "pay_method": { - "type": "string", - "enum": [ - "card", - "samsung" + "oneOf": [ + { + "const": "card" + }, + { + "const": "samsung" + } ] }, "imp_uid": { @@ -963,8 +968,14 @@ "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다." }, "name": { - "type": "string", - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], "title": "주문명, 누락 가능", "description": "주문명, 누락 가능." }, @@ -1001,8 +1012,14 @@ "type": "string" }, "emb_pg_provider": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "pg_id": { "type": "string" @@ -1014,41 +1031,95 @@ "type": "boolean" }, "buyer_name": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "buyer_email": { - "type": "string", - "format": "email", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "email" + } + ] }, "buyer_tel": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "buyer_addr": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "buyer_postcode": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "customer_uid": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "customer_uid_usage": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "custom_data": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "user_agent": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "status": { "$ref": "#/components/schemas/IIamportPayment.Status", @@ -1076,12 +1147,24 @@ "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀." }, "fail_reason": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "cancel_reason": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "cancel_history": { "type": "array", @@ -1090,7 +1173,6 @@ } } }, - "nullable": false, "required": [ "card_code", "card_name", @@ -1133,21 +1215,35 @@ "description": "카드 결제 정보." }, "IIamportPayment.Currency": { - "type": "string", - "enum": [ - "KRW", - "USD", - "EUR", - "JPY" + "oneOf": [ + { + "const": "KRW" + }, + { + "const": "USD" + }, + { + "const": "EUR" + }, + { + "const": "JPY" + } ] }, "IIamportPayment.Status": { - "type": "string", - "enum": [ - "paid", - "ready", - "failed", - "cancelled" + "oneOf": [ + { + "const": "paid" + }, + { + "const": "ready" + }, + { + "const": "failed" + }, + { + "const": "cancelled" + } ] }, "IIamportPaymentCancel": { @@ -1173,7 +1269,6 @@ "format": "uri" } }, - "nullable": false, "required": [ "pg_id", "pg_tid", @@ -1198,10 +1293,7 @@ "description": "은행 이름." }, "pay_method": { - "type": "string", - "enum": [ - "trans" - ] + "const": "trans" }, "imp_uid": { "type": "string", @@ -1214,8 +1306,14 @@ "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다." }, "name": { - "type": "string", - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], "title": "주문명, 누락 가능", "description": "주문명, 누락 가능." }, @@ -1252,8 +1350,14 @@ "type": "string" }, "emb_pg_provider": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "pg_id": { "type": "string" @@ -1265,41 +1369,95 @@ "type": "boolean" }, "buyer_name": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "buyer_email": { - "type": "string", - "format": "email", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "email" + } + ] }, "buyer_tel": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "buyer_addr": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "buyer_postcode": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "customer_uid": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "customer_uid_usage": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "custom_data": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "user_agent": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "status": { "$ref": "#/components/schemas/IIamportPayment.Status", @@ -1327,12 +1485,24 @@ "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀." }, "fail_reason": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "cancel_reason": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "cancel_history": { "type": "array", @@ -1341,7 +1511,6 @@ } } }, - "nullable": false, "required": [ "bank_code", "bank_name", @@ -1412,10 +1581,7 @@ "description": "가상 계좌 개설 일시." }, "pay_method": { - "type": "string", - "enum": [ - "vbank" - ] + "const": "vbank" }, "imp_uid": { "type": "string", @@ -1428,8 +1594,14 @@ "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다." }, "name": { - "type": "string", - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], "title": "주문명, 누락 가능", "description": "주문명, 누락 가능." }, @@ -1466,8 +1638,14 @@ "type": "string" }, "emb_pg_provider": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "pg_id": { "type": "string" @@ -1479,41 +1657,95 @@ "type": "boolean" }, "buyer_name": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "buyer_email": { - "type": "string", - "format": "email", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "email" + } + ] }, "buyer_tel": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "buyer_addr": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "buyer_postcode": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "customer_uid": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "customer_uid_usage": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "custom_data": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "user_agent": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "status": { "$ref": "#/components/schemas/IIamportPayment.Status", @@ -1541,12 +1773,24 @@ "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀." }, "fail_reason": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "cancel_reason": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "cancel_history": { "type": "array", @@ -1555,7 +1799,6 @@ } } }, - "nullable": false, "required": [ "vbank_code", "vbank_name", @@ -1602,20 +1845,43 @@ "type": "object", "properties": { "pay_method": { - "type": "string", - "enum": [ - "booknlife", - "cultureland", - "happymoney", - "kakaopay", - "kpay", - "lpay", - "payco", - "phone", - "point", - "smartculture", - "ssgpay", - "tosspay" + "oneOf": [ + { + "const": "phone" + }, + { + "const": "kpay" + }, + { + "const": "kakaopay" + }, + { + "const": "payco" + }, + { + "const": "lpay" + }, + { + "const": "ssgpay" + }, + { + "const": "tosspay" + }, + { + "const": "cultureland" + }, + { + "const": "smartculture" + }, + { + "const": "happymoney" + }, + { + "const": "booknlife" + }, + { + "const": "point" + } ] }, "imp_uid": { @@ -1629,8 +1895,14 @@ "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다." }, "name": { - "type": "string", - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], "title": "주문명, 누락 가능", "description": "주문명, 누락 가능." }, @@ -1667,8 +1939,14 @@ "type": "string" }, "emb_pg_provider": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "pg_id": { "type": "string" @@ -1680,41 +1958,95 @@ "type": "boolean" }, "buyer_name": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "buyer_email": { - "type": "string", - "format": "email", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "email" + } + ] }, "buyer_tel": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "buyer_addr": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "buyer_postcode": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "customer_uid": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "customer_uid_usage": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "custom_data": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "user_agent": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "status": { "$ref": "#/components/schemas/IIamportPayment.Status", @@ -1742,12 +2074,24 @@ "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀." }, "fail_reason": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "cancel_reason": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "cancel_history": { "type": "array", @@ -1756,7 +2100,6 @@ } } }, - "nullable": false, "required": [ "pay_method", "imp_uid", @@ -1814,7 +2157,6 @@ "description": "레코드 생성 일시.\n\n즉, 결제 취소가 발생한 시각." } }, - "nullable": false, "required": [ "reason", "price", @@ -1832,10 +2174,7 @@ "description": "Primary Key." }, "vendor_code": { - "type": "string", - "enum": [ - "toss.payments" - ], + "const": "toss.payments", "title": "벤더사 식별자 코드", "description": "벤더사 식별자 코드.\n\n{@link IPaymentVendor.code }와 완전히 동일한 값이되, 단지 union type\nspecialization 을 위해 중복 표기하였을 뿐이다. `if condition` 을 통하여\n{@link IPaymentHistory.data }의 타입을 특정할 수 있다." }, @@ -1865,16 +2204,28 @@ "description": "결제 가격." }, "refund": { - "type": "number", - "minimum": 0, - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "minimum": 0 + } + ], "title": "결제 취소시의 환불 금액", "description": "결제 취소시의 환불 금액." }, "webhook_url": { - "type": "string", - "format": "uri", - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uri" + } + ], "description": "결제 정보가 갱신되었을 때, 이를 수신할 URL" }, "created_at": { @@ -1884,16 +2235,28 @@ "description": "결제 레코드 생성 일시." }, "paid_at": { - "type": "string", - "format": "date-time", - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], "title": "결제 완료 일시", "description": "결제 완료 일시." }, "cancelled_at": { - "type": "string", - "format": "date-time", - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], "title": "결제 취소 일시", "description": "결제 취소 일시." }, @@ -1906,7 +2269,6 @@ "description": "결제 취소 내역 리스트." } }, - "nullable": false, "required": [ "id", "vendor_code", @@ -1928,10 +2290,7 @@ "type": "object", "properties": { "code": { - "type": "string", - "enum": [ - "toss.payments" - ], + "const": "toss.payments", "title": "벤더사 식별자 코드", "description": "벤더사 식별자 코드.\n\n아임포트의 경우에는 `iamport` 를, 토스의 경우에는 `toss.payments` 를 적어주면 된다." }, @@ -1946,7 +2305,6 @@ "description": "벤더사로부터 발급받은 식별자 번호.\n\n결제 PG 사들이 제공하는 팝업창을 이용하여 결제를 진행하거나 혹은 간편 결제 수단을\n등록하거든, 결제 PG 사들은 해당 건에 대하여 별도의 식별자 번호를 발급한다.\n`IPaymentVendor.uid` 는 이처럼 결제 PG 사들이 발급해 준 식별자 번호를 기재하는\n속성이다.\n\n단 예외가 하나 있어, 아임포트는 간편 결제 카드 등록 건에 대하여 별도의 식별자 번호를\n부여하지 않고, 귀하의 서비스에서 발급해 준 ID 를 그대로 사용한다. 때문에 아임포트를\n통한 간편 결제 카드 등록의 건만 예외적으로, `IPaymentVendor.uid` 에\n{@link IPaymentSource.id } 를 동일하게 할당해주어야 한다." } }, - "nullable": false, "required": [ "code", "store_id", @@ -1983,49 +2341,78 @@ "description": "카드 정보." }, "discount": { - "$ref": "#/components/schemas/ITossCardPayment.IDiscount.Nullable", + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/ITossCardPayment.IDiscount" + } + ], "title": "카드사의 즉시 할인 프로모션 정보", "description": "카드사의 즉시 할인 프로모션 정보." }, "easyPay": { - "type": "string", - "enum": [ - "삼성페이", - "토스결제", - "페이코" + "oneOf": [ + { + "type": "null" + }, + { + "const": "토스결제" + }, + { + "const": "페이코" + }, + { + "const": "삼성페이" + } ], - "nullable": true, "title": "간편결제로 결제한 경우 간편결제 타입 정보", "description": "간편결제로 결제한 경우 간편결제 타입 정보." }, "method": { - "type": "string", - "enum": [ - "카드" - ], + "const": "카드", "title": "결제 수단", "description": "결제 수단." }, "type": { - "type": "string", - "enum": [ - "BILLING", - "NORMAL" + "oneOf": [ + { + "const": "NORMAL" + }, + { + "const": "BILLING" + } ], "title": "결제 타입", "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제." }, "status": { - "type": "string", - "enum": [ - "ABORTED", - "CANCELED", - "DONE", - "EXPIRED", - "IN_PROGRESS", - "PARTIAL_CANCELED", - "READY", - "WAITING_FOR_DEPOSIT" + "oneOf": [ + { + "const": "READY" + }, + { + "const": "IN_PROGRESS" + }, + { + "const": "WAITING_FOR_DEPOSIT" + }, + { + "const": "DONE" + }, + { + "const": "CANCELED" + }, + { + "const": "PARTIAL_CANCELED" + }, + { + "const": "ABORTED" + }, + { + "const": "EXPIRED" + } ], "title": "결제 상태", "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED" @@ -2107,28 +2494,46 @@ "description": "결제 요청 일시." }, "approvedAt": { - "type": "string", - "format": "date-time", - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], "title": "결제 승인 일시", "description": "결제 승인 일시." }, "cancels": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ITossPaymentCancel" - }, - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/ITossPaymentCancel" + } + } + ], "title": "결제 취소 내역", "description": "결제 취소 내역." }, "cashReceipt": { - "$ref": "#/components/schemas/ITossCashReceipt.ISummary.Nullable", + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/ITossCashReceipt.ISummary" + } + ], "title": "현금 영수증 정보", "description": "현금 영수증 정보." } }, - "nullable": false, "required": [ "card", "discount", @@ -2187,40 +2592,54 @@ "description": "승인 번호." }, "useCardPoint": { - "type": "boolean", - "enum": [ - false - ], + "const": false, "title": "카드 포인트 사용 여부", "description": "카드 포인트 사용 여부." }, "cardType": { - "type": "string", - "enum": [ - "기프트", - "신용", - "체크" + "oneOf": [ + { + "const": "신용" + }, + { + "const": "체크" + }, + { + "const": "기프트" + } ], "title": "카드 타입", "description": "카드 타입." }, "ownerType": { - "type": "string", - "enum": [ - "개인", - "법인" + "oneOf": [ + { + "const": "개인" + }, + { + "const": "법인" + } ], "title": "카드의 소유자 타입", "description": "카드의 소유자 타입." }, "acquireStatus": { - "type": "string", - "enum": [ - "CANCELED", - "CANCEL_REQUESTED", - "COMPLETED", - "READY", - "REQUESTED" + "oneOf": [ + { + "const": "READY" + }, + { + "const": "CANCELED" + }, + { + "const": "REQUESTED" + }, + { + "const": "COMPLETED" + }, + { + "const": "CANCEL_REQUESTED" + } ], "title": "카드 결제의 매입 상태", "description": "카드 결제의 매입 상태.\n\n - READY: 매입 대기\n - REQUESTED: 매입 요청됨\n - COMPLETED: 매입 완료\n - CANCEL_REQUESTED: 매입 취소 요청됨\n - CANCELD: 매입 취소됨" @@ -2232,7 +2651,6 @@ "description": "영수증 URL." } }, - "nullable": false, "required": [ "company", "number", @@ -2247,7 +2665,7 @@ ], "description": "카드 정보." }, - "ITossCardPayment.IDiscount.Nullable": { + "ITossCardPayment.IDiscount": { "type": "object", "properties": { "amount": { @@ -2256,7 +2674,6 @@ "description": "카드사의 즉시 할인 프로모션을 적용한 금액." } }, - "nullable": true, "required": [ "amount" ], @@ -2297,7 +2714,6 @@ "description": "취소 일시." } }, - "nullable": false, "required": [ "cancelAmount", "cancelReason", @@ -2308,7 +2724,7 @@ ], "description": "결제 취소 정보." }, - "ITossCashReceipt.ISummary.Nullable": { + "ITossCashReceipt.ISummary": { "type": "object", "properties": { "type": { @@ -2337,7 +2753,6 @@ "description": "현금영수증 조회 페이지 주소." } }, - "nullable": true, "required": [ "type", "amount", @@ -2348,10 +2763,13 @@ "description": "현금 영수증 요약 정보." }, "ITossCashReceipt.Type": { - "type": "string", - "enum": [ - "소득공제", - "지출증빙" + "oneOf": [ + { + "const": "소득공제" + }, + { + "const": "지출증빙" + } ], "description": "현금 영수증의 종류." }, @@ -2364,32 +2782,41 @@ "description": "상품권 정보." }, "method": { - "type": "string", - "enum": [ - "상품권" - ], + "const": "상품권", "title": "결제 수단", "description": "결제 수단." }, "type": { - "type": "string", - "enum": [ - "NORMAL" - ], + "const": "NORMAL", "title": "결제 타입", "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제." }, "status": { - "type": "string", - "enum": [ - "ABORTED", - "CANCELED", - "DONE", - "EXPIRED", - "IN_PROGRESS", - "PARTIAL_CANCELED", - "READY", - "WAITING_FOR_DEPOSIT" + "oneOf": [ + { + "const": "READY" + }, + { + "const": "IN_PROGRESS" + }, + { + "const": "WAITING_FOR_DEPOSIT" + }, + { + "const": "DONE" + }, + { + "const": "CANCELED" + }, + { + "const": "PARTIAL_CANCELED" + }, + { + "const": "ABORTED" + }, + { + "const": "EXPIRED" + } ], "title": "결제 상태", "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED" @@ -2471,28 +2898,46 @@ "description": "결제 요청 일시." }, "approvedAt": { - "type": "string", - "format": "date-time", - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], "title": "결제 승인 일시", "description": "결제 승인 일시." }, "cancels": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ITossPaymentCancel" - }, - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/ITossPaymentCancel" + } + } + ], "title": "결제 취소 내역", "description": "결제 취소 내역." }, "cashReceipt": { - "$ref": "#/components/schemas/ITossCashReceipt.ISummary.Nullable", + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/ITossCashReceipt.ISummary" + } + ], "title": "현금 영수증 정보", "description": "현금 영수증 정보." } }, - "nullable": false, "required": [ "giftCertificate", "method", @@ -2528,16 +2973,18 @@ "description": "승인 번호." }, "settlementStatus": { - "type": "string", - "enum": [ - "COMPLETE", - "INCOMPLETE" + "oneOf": [ + { + "const": "COMPLETE" + }, + { + "const": "INCOMPLETE" + } ], "title": "정산 상태", "description": "정산 상태." } }, - "nullable": false, "required": [ "approveNo", "settlementStatus" @@ -2553,32 +3000,41 @@ "description": "휴대폰 정보." }, "method": { - "type": "string", - "enum": [ - "휴대폰" - ], + "const": "휴대폰", "title": "결제 수단", "description": "결제 수단." }, "type": { - "type": "string", - "enum": [ - "NORMAL" - ], + "const": "NORMAL", "title": "결제 타입", "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제." }, "status": { - "type": "string", - "enum": [ - "ABORTED", - "CANCELED", - "DONE", - "EXPIRED", - "IN_PROGRESS", - "PARTIAL_CANCELED", - "READY", - "WAITING_FOR_DEPOSIT" + "oneOf": [ + { + "const": "READY" + }, + { + "const": "IN_PROGRESS" + }, + { + "const": "WAITING_FOR_DEPOSIT" + }, + { + "const": "DONE" + }, + { + "const": "CANCELED" + }, + { + "const": "PARTIAL_CANCELED" + }, + { + "const": "ABORTED" + }, + { + "const": "EXPIRED" + } ], "title": "결제 상태", "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED" @@ -2660,28 +3116,46 @@ "description": "결제 요청 일시." }, "approvedAt": { - "type": "string", - "format": "date-time", - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], "title": "결제 승인 일시", "description": "결제 승인 일시." }, "cancels": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ITossPaymentCancel" - }, - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/ITossPaymentCancel" + } + } + ], "title": "결제 취소 내역", "description": "결제 취소 내역." }, "cashReceipt": { - "$ref": "#/components/schemas/ITossCashReceipt.ISummary.Nullable", + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/ITossCashReceipt.ISummary" + } + ], "title": "현금 영수증 정보", "description": "현금 영수증 정보." } }, - "nullable": false, "required": [ "mobilePhone", "method", @@ -2722,16 +3196,18 @@ "description": "고객 휴대폰 번호." }, "settlementStatus": { - "type": "string", - "enum": [ - "COMPLETED", - "INCOMPLETED" + "oneOf": [ + { + "const": "COMPLETED" + }, + { + "const": "INCOMPLETED" + } ], "title": "정산 상태", "description": "정산 상태." } }, - "nullable": false, "required": [ "carrier", "customerMobilePhone", @@ -2748,32 +3224,41 @@ "description": "계좌 이체 정보." }, "method": { - "type": "string", - "enum": [ - "계좌이체" - ], + "const": "계좌이체", "title": "결제 수단", "description": "결제 수단." }, "type": { - "type": "string", - "enum": [ - "NORMAL" - ], + "const": "NORMAL", "title": "결제 타입", "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제." }, "status": { - "type": "string", - "enum": [ - "ABORTED", - "CANCELED", - "DONE", - "EXPIRED", - "IN_PROGRESS", - "PARTIAL_CANCELED", - "READY", - "WAITING_FOR_DEPOSIT" + "oneOf": [ + { + "const": "READY" + }, + { + "const": "IN_PROGRESS" + }, + { + "const": "WAITING_FOR_DEPOSIT" + }, + { + "const": "DONE" + }, + { + "const": "CANCELED" + }, + { + "const": "PARTIAL_CANCELED" + }, + { + "const": "ABORTED" + }, + { + "const": "EXPIRED" + } ], "title": "결제 상태", "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED" @@ -2855,28 +3340,46 @@ "description": "결제 요청 일시." }, "approvedAt": { - "type": "string", - "format": "date-time", - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], "title": "결제 승인 일시", "description": "결제 승인 일시." }, "cancels": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ITossPaymentCancel" - }, - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/ITossPaymentCancel" + } + } + ], "title": "결제 취소 내역", "description": "결제 취소 내역." }, "cashReceipt": { - "$ref": "#/components/schemas/ITossCashReceipt.ISummary.Nullable", + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/ITossCashReceipt.ISummary" + } + ], "title": "현금 영수증 정보", "description": "현금 영수증 정보." } }, - "nullable": false, "required": [ "transfer", "method", @@ -2912,16 +3415,18 @@ "description": "은행명." }, "settlementStatus": { - "type": "string", - "enum": [ - "COMPLETED", - "INCOMPLETED" + "oneOf": [ + { + "const": "COMPLETED" + }, + { + "const": "INCOMPLETED" + } ], "title": "이체 상태", "description": "이체 상태." } }, - "nullable": false, "required": [ "bank", "settlementStatus" @@ -2942,32 +3447,41 @@ "description": "가상 계좌 정보." }, "method": { - "type": "string", - "enum": [ - "가상계좌" - ], + "const": "가상계좌", "title": "결제 수단", "description": "결제 수단." }, "type": { - "type": "string", - "enum": [ - "NORMAL" - ], + "const": "NORMAL", "title": "결제 타입", "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제." }, "status": { - "type": "string", - "enum": [ - "ABORTED", - "CANCELED", - "DONE", - "EXPIRED", - "IN_PROGRESS", - "PARTIAL_CANCELED", - "READY", - "WAITING_FOR_DEPOSIT" + "oneOf": [ + { + "const": "READY" + }, + { + "const": "IN_PROGRESS" + }, + { + "const": "WAITING_FOR_DEPOSIT" + }, + { + "const": "DONE" + }, + { + "const": "CANCELED" + }, + { + "const": "PARTIAL_CANCELED" + }, + { + "const": "ABORTED" + }, + { + "const": "EXPIRED" + } ], "title": "결제 상태", "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED" @@ -3049,28 +3563,46 @@ "description": "결제 요청 일시." }, "approvedAt": { - "type": "string", - "format": "date-time", - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], "title": "결제 승인 일시", "description": "결제 승인 일시." }, "cancels": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ITossPaymentCancel" - }, - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/ITossPaymentCancel" + } + } + ], "title": "결제 취소 내역", "description": "결제 취소 내역." }, "cashReceipt": { - "$ref": "#/components/schemas/ITossCashReceipt.ISummary.Nullable", + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/ITossCashReceipt.ISummary" + } + ], "title": "현금 영수증 정보", "description": "현금 영수증 정보." } }, - "nullable": false, "required": [ "secret", "virtualAccount", @@ -3107,10 +3639,13 @@ "description": "계좌 번호." }, "accountType": { - "type": "string", - "enum": [ - "고정", - "일반" + "oneOf": [ + { + "const": "일반" + }, + { + "const": "고정" + } ], "title": "가상 계좌 타입", "description": "가상 계좌 타입." @@ -3137,28 +3672,39 @@ "description": "가상 계좌 만료 여부." }, "settlementStatus": { - "type": "string", - "enum": [ - "COMPLETED", - "INCOMPLETED" + "oneOf": [ + { + "const": "COMPLETED" + }, + { + "const": "INCOMPLETED" + } ], "title": "정산 상태", "description": "정산 상태." }, "refundStatus": { - "type": "string", - "enum": [ - "COMPLETED", - "FAILED", - "NONE", - "PARTIAL_FAILED", - "PENDING" + "oneOf": [ + { + "const": "COMPLETED" + }, + { + "const": "NONE" + }, + { + "const": "FAILED" + }, + { + "const": "PENDING" + }, + { + "const": "PARTIAL_FAILED" + } ], "title": "환불 처리 상태", "description": "환불 처리 상태.\n\n - NONE: 해당 없음\n - FAILED: 환불 실패\n - PENDING: 환불 처리중\n - PARTIAL_FAILED: 부분 환불 실패\n - COMPLETED: 환불 완료" } }, - "nullable": false, "required": [ "accountNumber", "accountType", @@ -3180,7 +3726,6 @@ "description": "레코드 조회를 위한 비밀번호 입력." } }, - "nullable": false, "required": [ "password" ], @@ -3215,7 +3760,6 @@ "description": "결제 정보가 갱신되었을 때, 이를 수신할 URL" } }, - "nullable": false, "required": [ "vendor", "source", @@ -3229,10 +3773,13 @@ "type": "object", "properties": { "code": { - "type": "string", - "enum": [ - "iamport", - "toss.payments" + "oneOf": [ + { + "const": "iamport" + }, + { + "const": "toss.payments" + } ], "title": "벤더사 식별자 코드", "description": "벤더사 식별자 코드.\n\n아임포트의 경우에는 `iamport` 를, 토스의 경우에는 `toss.payments` 를 적어주면 된다." @@ -3248,7 +3795,6 @@ "description": "벤더사로부터 발급받은 식별자 번호.\n\n결제 PG 사들이 제공하는 팝업창을 이용하여 결제를 진행하거나 혹은 간편 결제 수단을\n등록하거든, 결제 PG 사들은 해당 건에 대하여 별도의 식별자 번호를 발급한다.\n`IPaymentVendor.uid` 는 이처럼 결제 PG 사들이 발급해 준 식별자 번호를 기재하는\n속성이다.\n\n단 예외가 하나 있어, 아임포트는 간편 결제 카드 등록 건에 대하여 별도의 식별자 번호를\n부여하지 않고, 귀하의 서비스에서 발급해 준 ID 를 그대로 사용한다. 때문에 아임포트를\n통한 간편 결제 카드 등록의 건만 예외적으로, `IPaymentVendor.uid` 에\n{@link IPaymentSource.id } 를 동일하게 할당해주어야 한다." } }, - "nullable": false, "required": [ "code", "store_id", @@ -3281,12 +3827,18 @@ "description": "결제 취소 사유." }, "account": { - "$ref": "#/components/schemas/IPaymentCancelHistory.IBankAccount.Nullable", + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IPaymentCancelHistory.IBankAccount" + } + ], "title": "환불 계좌 정보", "description": "환불 계좌 정보.\n\n가상 계좌로 입금한 경우, 결제 취소시, 이를 환불받을 계좌가 필요함.\n\n단, 이 정보는 본 결제 시스템에 저장하지 아니함." } }, - "nullable": false, "required": [ "source", "password", @@ -3296,7 +3848,7 @@ ], "description": "결제 취소 입력 정보." }, - "IPaymentCancelHistory.IBankAccount.Nullable": { + "IPaymentCancelHistory.IBankAccount": { "type": "object", "properties": { "bank": { @@ -3320,7 +3872,6 @@ "description": "연락처, 핸드폰 번호." } }, - "nullable": true, "required": [ "bank", "account", @@ -3350,10 +3901,7 @@ "description": "Primary Key." }, "vendor_code": { - "type": "string", - "enum": [ - "iamport" - ], + "const": "iamport", "title": "벤더사 코드", "description": "벤더사 코드.\n\n{@link IPaymentVendor.code }와 완전히 동일한 값이되, 단지 union type\nspecialization 을 위해 중복 표기하였을 뿐이다. If else condition 을 통하여\n{@link IPaymentReservation.data }의 타입을 특정할 수 있다." }, @@ -3384,7 +3932,6 @@ "description": "레코드 생성 일시." } }, - "nullable": false, "required": [ "id", "vendor_code", @@ -3418,24 +3965,54 @@ "type": "string" }, "customer_name": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "customer_tel": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "customer_email": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "customer_addr": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "customer_postcode": { - "type": "string", - "nullable": true + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "inserted": { "type": "number" @@ -3449,7 +4026,6 @@ "description": "고객 식별자 키.\n\n아임포트가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.\n\n다만 고객이라기보다 실제로는 카드의 식별자 키로 써야함." } }, - "nullable": false, "required": [ "pg_provider", "pg_id", @@ -3478,10 +4054,7 @@ "description": "Primary Key." }, "vendor_code": { - "type": "string", - "enum": [ - "toss.payments" - ], + "const": "toss.payments", "title": "벤더사 코드", "description": "벤더사 코드.\n\n{@link IPaymentVendor.code }와 완전히 동일한 값이되, 단지 union type\nspecialization 을 위해 중복 표기하였을 뿐이다. If else condition 을 통하여\n{@link IPaymentReservation.data }의 타입을 특정할 수 있다." }, @@ -3512,7 +4085,6 @@ "description": "레코드 생성 일시." } }, - "nullable": false, "required": [ "id", "vendor_code", @@ -3538,10 +4110,7 @@ "description": "{@link ITossBilling } 의 식별자 키." }, "method": { - "type": "string", - "enum": [ - "카드" - ], + "const": "카드", "title": "결제 수단", "description": "결제 수단." }, @@ -3568,7 +4137,6 @@ "description": "고객 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키." } }, - "nullable": false, "required": [ "mId", "billingKey", @@ -3603,7 +4171,6 @@ "description": "간편결제 비밀번호.\n\n주의할 점은 카드 비밀번호가 아니라는 것." } }, - "nullable": false, "required": [ "vendor", "source", @@ -3616,10 +4183,13 @@ "type": "object", "properties": { "code": { - "type": "string", - "enum": [ - "iamport", - "toss.payments" + "oneOf": [ + { + "const": "iamport" + }, + { + "const": "toss.payments" + } ], "title": "벤더사 식별자 코드", "description": "벤더사 식별자 코드.\n\n아임포트의 경우에는 `iamport` 를, 토스의 경우에는 `toss.payments` 를 적어주면 된다." @@ -3635,7 +4205,6 @@ "description": "벤더사로부터 발급받은 식별자 번호.\n\n결제 PG 사들이 제공하는 팝업창을 이용하여 결제를 진행하거나 혹은 간편 결제 수단을\n등록하거든, 결제 PG 사들은 해당 건에 대하여 별도의 식별자 번호를 발급한다.\n`IPaymentVendor.uid` 는 이처럼 결제 PG 사들이 발급해 준 식별자 번호를 기재하는\n속성이다.\n\n단 예외가 하나 있어, 아임포트는 간편 결제 카드 등록 건에 대하여 별도의 식별자 번호를\n부여하지 않고, 귀하의 서비스에서 발급해 준 ID 를 그대로 사용한다. 때문에 아임포트를\n통한 간편 결제 카드 등록의 건만 예외적으로, `IPaymentVendor.uid` 에\n{@link IPaymentSource.id } 를 동일하게 할당해주어야 한다." } }, - "nullable": false, "required": [ "code", "store_id", @@ -3657,18 +4226,24 @@ "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다." }, "status": { - "type": "string", - "enum": [ - "cancelled", - "failed", - "paid", - "ready" + "oneOf": [ + { + "const": "paid" + }, + { + "const": "ready" + }, + { + "const": "failed" + }, + { + "const": "cancelled" + } ], "title": "현재 상태", "description": "현재 상태." } }, - "nullable": false, "required": [ "imp_uid", "merchant_uid", @@ -3677,5 +4252,6 @@ "description": "웹훅 데이터." } } - } + }, + "tags": [] } \ No newline at end of file diff --git a/packages/payment-backend/package.json b/packages/payment-backend/package.json index 0fec053..0dec35a 100644 --- a/packages/payment-backend/package.json +++ b/packages/payment-backend/package.json @@ -1,6 +1,6 @@ { "name": "@samchon/payment-backend", - "version": "7.0.0", + "version": "8.0.0", "description": "Payment Backend Server", "main": "lib/index.js", "typings": "lib/index.d.ts", @@ -37,8 +37,8 @@ }, "homepage": "https://github.com/samchon/payments", "devDependencies": { - "@nestia/fetcher": "^2.6.2", - "@nestia/sdk": "^2.6.2", + "@nestia/fetcher": "^3.0.1", + "@nestia/sdk": "^3.0.1", "@types/atob": "^2.1.2", "@types/bcryptjs": "^2.4.4", "@types/btoa": "^1.2.3", @@ -53,12 +53,12 @@ "cli": "^1.0.1", "copy-webpack-plugin": "^11.0.0", "copyfiles": "^2.4.1", - "iamport-server-api": "^7.0.0", + "iamport-server-api": "^8.0.0", "nestia": "^5.0.3", "pm2": "^4.5.6", "rimraf": "^3.0.2", "sloc": "^0.2.1", - "toss-payments-server-api": "^7.0.0", + "toss-payments-server-api": "^8.0.0", "ts-loader": "^9.5.0", "ts-node": "^10.9.1", "ts-patch": "^3.1.1", @@ -69,7 +69,7 @@ "write-file-webpack-plugin": "^4.5.1" }, "dependencies": { - "@nestia/core": "^2.6.2", + "@nestia/core": "^3.0.1", "@nestia/e2e": "^0.4.1", "@nestjs/common": "^10.2.8", "@nestjs/core": "^10.2.8", @@ -81,8 +81,8 @@ "commander": "10.0.0", "dotenv": "^16.3.1", "dotenv-expand": "^10.0.0", - "fake-iamport-server": "^7.0.0", - "fake-toss-payments-server": "^7.0.0", + "fake-iamport-server": "^8.0.0", + "fake-toss-payments-server": "^8.0.0", "fastify": "^4.24.3", "git-last-commit": "^1.0.0", "inquirer": "^8.2.5", @@ -92,7 +92,7 @@ "serialize-error": "^4.1.0", "source-map-support": "^0.5.19", "tstl": "^3.0.0", - "typia": "^5.5.7", + "typia": "^6.0.1", "uuid": "^9.0.1" }, "files": [ diff --git a/packages/toss-payments-server-api/package.json b/packages/toss-payments-server-api/package.json index 9d49ad5..028c3ec 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": "7.0.0", + "version": "8.0.0", "description": "API for Toss Payments Server", "main": "lib/index.js", "typings": "lib/index.d.ts", @@ -34,7 +34,7 @@ "typescript": "^5.3.2" }, "dependencies": { - "@nestia/fetcher": "^2.6.2", - "typia": "^5.5.7" + "@nestia/fetcher": "^3.0.1", + "typia": "^6.0.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 9c764fa..1d9868a 100644 --- a/packages/toss-payments-server-api/swagger.json +++ b/packages/toss-payments-server-api/swagger.json @@ -1,5 +1,5 @@ { - "openapi": "3.0.1", + "openapi": "3.1.0", "servers": [ { "url": "http://localhost:30771", @@ -13,7 +13,7 @@ "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": "7.0.0", + "version": "8.0.0", "license": { "name": "MIT" } @@ -545,7 +545,6 @@ "description": "3DS 인증 결과에 대한 코드 값." } }, - "nullable": false, "required": [ "cavv", "xid", @@ -560,7 +559,6 @@ "description": "고객 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키." } }, - "nullable": false, "required": [ "cardNumber", "cardExpirationYear", @@ -585,10 +583,7 @@ "description": "{@link ITossBilling } 의 식별자 키." }, "method": { - "type": "string", - "enum": [ - "카드" - ], + "const": "카드", "title": "결제 수단", "description": "결제 수단." }, @@ -615,7 +610,6 @@ "description": "고객 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키." } }, - "nullable": false, "required": [ "mId", "billingKey", @@ -636,7 +630,6 @@ "description": "고객 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키." } }, - "nullable": false, "required": [ "customerKey" ], @@ -646,10 +639,7 @@ "type": "object", "properties": { "method": { - "type": "string", - "enum": [ - "billing" - ], + "const": "billing", "title": "결제 수단이 간편 결제임을 의미함", "description": "결제 수단이 간편 결제임을 의미함." }, @@ -674,7 +664,6 @@ "description": "고객 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키." } }, - "nullable": false, "required": [ "method", "billingKey", @@ -713,49 +702,78 @@ "description": "카드 정보." }, "discount": { - "$ref": "#/components/schemas/ITossCardPayment.IDiscount.Nullable", + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/ITossCardPayment.IDiscount" + } + ], "title": "카드사의 즉시 할인 프로모션 정보", "description": "카드사의 즉시 할인 프로모션 정보." }, "easyPay": { - "type": "string", - "enum": [ - "삼성페이", - "토스결제", - "페이코" + "oneOf": [ + { + "type": "null" + }, + { + "const": "토스결제" + }, + { + "const": "페이코" + }, + { + "const": "삼성페이" + } ], - "nullable": true, "title": "간편결제로 결제한 경우 간편결제 타입 정보", "description": "간편결제로 결제한 경우 간편결제 타입 정보." }, "method": { - "type": "string", - "enum": [ - "카드" - ], + "const": "카드", "title": "결제 수단", "description": "결제 수단." }, "type": { - "type": "string", - "enum": [ - "BILLING", - "NORMAL" + "oneOf": [ + { + "const": "NORMAL" + }, + { + "const": "BILLING" + } ], "title": "결제 타입", "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제." }, "status": { - "type": "string", - "enum": [ - "ABORTED", - "CANCELED", - "DONE", - "EXPIRED", - "IN_PROGRESS", - "PARTIAL_CANCELED", - "READY", - "WAITING_FOR_DEPOSIT" + "oneOf": [ + { + "const": "READY" + }, + { + "const": "IN_PROGRESS" + }, + { + "const": "WAITING_FOR_DEPOSIT" + }, + { + "const": "DONE" + }, + { + "const": "CANCELED" + }, + { + "const": "PARTIAL_CANCELED" + }, + { + "const": "ABORTED" + }, + { + "const": "EXPIRED" + } ], "title": "결제 상태", "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED" @@ -837,28 +855,46 @@ "description": "결제 요청 일시." }, "approvedAt": { - "type": "string", - "format": "date-time", - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], "title": "결제 승인 일시", "description": "결제 승인 일시." }, "cancels": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ITossPaymentCancel" - }, - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/ITossPaymentCancel" + } + } + ], "title": "결제 취소 내역", "description": "결제 취소 내역." }, "cashReceipt": { - "$ref": "#/components/schemas/ITossCashReceipt.ISummary.Nullable", + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/ITossCashReceipt.ISummary" + } + ], "title": "현금 영수증 정보", "description": "현금 영수증 정보." } }, - "nullable": false, "required": [ "card", "discount", @@ -917,40 +953,54 @@ "description": "승인 번호." }, "useCardPoint": { - "type": "boolean", - "enum": [ - false - ], + "const": false, "title": "카드 포인트 사용 여부", "description": "카드 포인트 사용 여부." }, "cardType": { - "type": "string", - "enum": [ - "기프트", - "신용", - "체크" + "oneOf": [ + { + "const": "신용" + }, + { + "const": "체크" + }, + { + "const": "기프트" + } ], "title": "카드 타입", "description": "카드 타입." }, "ownerType": { - "type": "string", - "enum": [ - "개인", - "법인" + "oneOf": [ + { + "const": "개인" + }, + { + "const": "법인" + } ], "title": "카드의 소유자 타입", "description": "카드의 소유자 타입." }, "acquireStatus": { - "type": "string", - "enum": [ - "CANCELED", - "CANCEL_REQUESTED", - "COMPLETED", - "READY", - "REQUESTED" + "oneOf": [ + { + "const": "READY" + }, + { + "const": "CANCELED" + }, + { + "const": "REQUESTED" + }, + { + "const": "COMPLETED" + }, + { + "const": "CANCEL_REQUESTED" + } ], "title": "카드 결제의 매입 상태", "description": "카드 결제의 매입 상태.\n\n - READY: 매입 대기\n - REQUESTED: 매입 요청됨\n - COMPLETED: 매입 완료\n - CANCEL_REQUESTED: 매입 취소 요청됨\n - CANCELD: 매입 취소됨" @@ -962,7 +1012,6 @@ "description": "영수증 URL." } }, - "nullable": false, "required": [ "company", "number", @@ -977,7 +1026,7 @@ ], "description": "카드 정보." }, - "ITossCardPayment.IDiscount.Nullable": { + "ITossCardPayment.IDiscount": { "type": "object", "properties": { "amount": { @@ -986,7 +1035,6 @@ "description": "카드사의 즉시 할인 프로모션을 적용한 금액." } }, - "nullable": true, "required": [ "amount" ], @@ -1027,7 +1075,6 @@ "description": "취소 일시." } }, - "nullable": false, "required": [ "cancelAmount", "cancelReason", @@ -1038,7 +1085,7 @@ ], "description": "결제 취소 정보." }, - "ITossCashReceipt.ISummary.Nullable": { + "ITossCashReceipt.ISummary": { "type": "object", "properties": { "type": { @@ -1067,7 +1114,6 @@ "description": "현금영수증 조회 페이지 주소." } }, - "nullable": true, "required": [ "type", "amount", @@ -1078,10 +1124,13 @@ "description": "현금 영수증 요약 정보." }, "ITossCashReceipt.Type": { - "type": "string", - "enum": [ - "소득공제", - "지출증빙" + "oneOf": [ + { + "const": "소득공제" + }, + { + "const": "지출증빙" + } ], "description": "현금 영수증의 종류." }, @@ -1094,32 +1143,41 @@ "description": "상품권 정보." }, "method": { - "type": "string", - "enum": [ - "상품권" - ], + "const": "상품권", "title": "결제 수단", "description": "결제 수단." }, "type": { - "type": "string", - "enum": [ - "NORMAL" - ], + "const": "NORMAL", "title": "결제 타입", "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제." }, "status": { - "type": "string", - "enum": [ - "ABORTED", - "CANCELED", - "DONE", - "EXPIRED", - "IN_PROGRESS", - "PARTIAL_CANCELED", - "READY", - "WAITING_FOR_DEPOSIT" + "oneOf": [ + { + "const": "READY" + }, + { + "const": "IN_PROGRESS" + }, + { + "const": "WAITING_FOR_DEPOSIT" + }, + { + "const": "DONE" + }, + { + "const": "CANCELED" + }, + { + "const": "PARTIAL_CANCELED" + }, + { + "const": "ABORTED" + }, + { + "const": "EXPIRED" + } ], "title": "결제 상태", "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED" @@ -1201,28 +1259,46 @@ "description": "결제 요청 일시." }, "approvedAt": { - "type": "string", - "format": "date-time", - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], "title": "결제 승인 일시", "description": "결제 승인 일시." }, "cancels": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ITossPaymentCancel" - }, - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/ITossPaymentCancel" + } + } + ], "title": "결제 취소 내역", "description": "결제 취소 내역." }, "cashReceipt": { - "$ref": "#/components/schemas/ITossCashReceipt.ISummary.Nullable", + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/ITossCashReceipt.ISummary" + } + ], "title": "현금 영수증 정보", "description": "현금 영수증 정보." } }, - "nullable": false, "required": [ "giftCertificate", "method", @@ -1258,16 +1334,18 @@ "description": "승인 번호." }, "settlementStatus": { - "type": "string", - "enum": [ - "COMPLETE", - "INCOMPLETE" + "oneOf": [ + { + "const": "COMPLETE" + }, + { + "const": "INCOMPLETE" + } ], "title": "정산 상태", "description": "정산 상태." } }, - "nullable": false, "required": [ "approveNo", "settlementStatus" @@ -1283,32 +1361,41 @@ "description": "휴대폰 정보." }, "method": { - "type": "string", - "enum": [ - "휴대폰" - ], + "const": "휴대폰", "title": "결제 수단", "description": "결제 수단." }, "type": { - "type": "string", - "enum": [ - "NORMAL" - ], + "const": "NORMAL", "title": "결제 타입", "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제." }, "status": { - "type": "string", - "enum": [ - "ABORTED", - "CANCELED", - "DONE", - "EXPIRED", - "IN_PROGRESS", - "PARTIAL_CANCELED", - "READY", - "WAITING_FOR_DEPOSIT" + "oneOf": [ + { + "const": "READY" + }, + { + "const": "IN_PROGRESS" + }, + { + "const": "WAITING_FOR_DEPOSIT" + }, + { + "const": "DONE" + }, + { + "const": "CANCELED" + }, + { + "const": "PARTIAL_CANCELED" + }, + { + "const": "ABORTED" + }, + { + "const": "EXPIRED" + } ], "title": "결제 상태", "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED" @@ -1390,28 +1477,46 @@ "description": "결제 요청 일시." }, "approvedAt": { - "type": "string", - "format": "date-time", - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], "title": "결제 승인 일시", "description": "결제 승인 일시." }, "cancels": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ITossPaymentCancel" - }, - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/ITossPaymentCancel" + } + } + ], "title": "결제 취소 내역", "description": "결제 취소 내역." }, "cashReceipt": { - "$ref": "#/components/schemas/ITossCashReceipt.ISummary.Nullable", + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/ITossCashReceipt.ISummary" + } + ], "title": "현금 영수증 정보", "description": "현금 영수증 정보." } }, - "nullable": false, "required": [ "mobilePhone", "method", @@ -1452,16 +1557,18 @@ "description": "고객 휴대폰 번호." }, "settlementStatus": { - "type": "string", - "enum": [ - "COMPLETED", - "INCOMPLETED" + "oneOf": [ + { + "const": "COMPLETED" + }, + { + "const": "INCOMPLETED" + } ], "title": "정산 상태", "description": "정산 상태." } }, - "nullable": false, "required": [ "carrier", "customerMobilePhone", @@ -1478,32 +1585,41 @@ "description": "계좌 이체 정보." }, "method": { - "type": "string", - "enum": [ - "계좌이체" - ], + "const": "계좌이체", "title": "결제 수단", "description": "결제 수단." }, "type": { - "type": "string", - "enum": [ - "NORMAL" - ], + "const": "NORMAL", "title": "결제 타입", "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제." }, "status": { - "type": "string", - "enum": [ - "ABORTED", - "CANCELED", - "DONE", - "EXPIRED", - "IN_PROGRESS", - "PARTIAL_CANCELED", - "READY", - "WAITING_FOR_DEPOSIT" + "oneOf": [ + { + "const": "READY" + }, + { + "const": "IN_PROGRESS" + }, + { + "const": "WAITING_FOR_DEPOSIT" + }, + { + "const": "DONE" + }, + { + "const": "CANCELED" + }, + { + "const": "PARTIAL_CANCELED" + }, + { + "const": "ABORTED" + }, + { + "const": "EXPIRED" + } ], "title": "결제 상태", "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED" @@ -1585,28 +1701,46 @@ "description": "결제 요청 일시." }, "approvedAt": { - "type": "string", - "format": "date-time", - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], "title": "결제 승인 일시", "description": "결제 승인 일시." }, "cancels": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ITossPaymentCancel" - }, - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/ITossPaymentCancel" + } + } + ], "title": "결제 취소 내역", "description": "결제 취소 내역." }, "cashReceipt": { - "$ref": "#/components/schemas/ITossCashReceipt.ISummary.Nullable", + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/ITossCashReceipt.ISummary" + } + ], "title": "현금 영수증 정보", "description": "현금 영수증 정보." } }, - "nullable": false, "required": [ "transfer", "method", @@ -1642,16 +1776,18 @@ "description": "은행명." }, "settlementStatus": { - "type": "string", - "enum": [ - "COMPLETED", - "INCOMPLETED" + "oneOf": [ + { + "const": "COMPLETED" + }, + { + "const": "INCOMPLETED" + } ], "title": "이체 상태", "description": "이체 상태." } }, - "nullable": false, "required": [ "bank", "settlementStatus" @@ -1672,32 +1808,41 @@ "description": "가상 계좌 정보." }, "method": { - "type": "string", - "enum": [ - "가상계좌" - ], + "const": "가상계좌", "title": "결제 수단", "description": "결제 수단." }, "type": { - "type": "string", - "enum": [ - "NORMAL" - ], + "const": "NORMAL", "title": "결제 타입", "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제." }, "status": { - "type": "string", - "enum": [ - "ABORTED", - "CANCELED", - "DONE", - "EXPIRED", - "IN_PROGRESS", - "PARTIAL_CANCELED", - "READY", - "WAITING_FOR_DEPOSIT" + "oneOf": [ + { + "const": "READY" + }, + { + "const": "IN_PROGRESS" + }, + { + "const": "WAITING_FOR_DEPOSIT" + }, + { + "const": "DONE" + }, + { + "const": "CANCELED" + }, + { + "const": "PARTIAL_CANCELED" + }, + { + "const": "ABORTED" + }, + { + "const": "EXPIRED" + } ], "title": "결제 상태", "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED" @@ -1779,28 +1924,46 @@ "description": "결제 요청 일시." }, "approvedAt": { - "type": "string", - "format": "date-time", - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], "title": "결제 승인 일시", "description": "결제 승인 일시." }, "cancels": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ITossPaymentCancel" - }, - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/ITossPaymentCancel" + } + } + ], "title": "결제 취소 내역", "description": "결제 취소 내역." }, "cashReceipt": { - "$ref": "#/components/schemas/ITossCashReceipt.ISummary.Nullable", + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/ITossCashReceipt.ISummary" + } + ], "title": "현금 영수증 정보", "description": "현금 영수증 정보." } }, - "nullable": false, "required": [ "secret", "virtualAccount", @@ -1837,10 +2000,13 @@ "description": "계좌 번호." }, "accountType": { - "type": "string", - "enum": [ - "고정", - "일반" + "oneOf": [ + { + "const": "일반" + }, + { + "const": "고정" + } ], "title": "가상 계좌 타입", "description": "가상 계좌 타입." @@ -1867,28 +2033,39 @@ "description": "가상 계좌 만료 여부." }, "settlementStatus": { - "type": "string", - "enum": [ - "COMPLETED", - "INCOMPLETED" + "oneOf": [ + { + "const": "COMPLETED" + }, + { + "const": "INCOMPLETED" + } ], "title": "정산 상태", "description": "정산 상태." }, "refundStatus": { - "type": "string", - "enum": [ - "COMPLETED", - "FAILED", - "NONE", - "PARTIAL_FAILED", - "PENDING" + "oneOf": [ + { + "const": "COMPLETED" + }, + { + "const": "NONE" + }, + { + "const": "FAILED" + }, + { + "const": "PENDING" + }, + { + "const": "PARTIAL_FAILED" + } ], "title": "환불 처리 상태", "description": "환불 처리 상태.\n\n - NONE: 해당 없음\n - FAILED: 환불 실패\n - PENDING: 환불 처리중\n - PARTIAL_FAILED: 부분 환불 실패\n - COMPLETED: 환불 완료" } }, - "nullable": false, "required": [ "accountNumber", "accountType", @@ -1905,10 +2082,13 @@ "type": "object", "properties": { "type": { - "type": "string", - "enum": [ - "소득공제", - "지출증빙" + "oneOf": [ + { + "const": "소득공제" + }, + { + "const": "지출증빙" + } ], "title": "현금 영수증의 종류", "description": "현금 영수증의 종류." @@ -1949,7 +2129,6 @@ "description": "사업자 등록번호." } }, - "nullable": false, "required": [ "type", "paymentKey", @@ -1995,9 +2174,15 @@ "description": "현금 영수증 승인 일시." }, "canceledAt": { - "type": "string", - "format": "date-time", - "nullable": true, + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], "title": "현금 영수증 취소 일시", "description": "현금 영수증 취소 일시." }, @@ -2007,7 +2192,6 @@ "description": "영수증 URL." } }, - "nullable": false, "required": [ "receiptKey", "type", @@ -2029,17 +2213,13 @@ "description": "취소 금액.\n\n미 입력시 현금 영수증에 기재된 {@link ITossCashReceipt.amount 총액}이 취소됨." } }, - "nullable": false, "description": "현금 영수증 취소 입력 정보." }, "ITossPaymentWebhook": { "type": "object", "properties": { "eventType": { - "type": "string", - "enum": [ - "PAYMENT_STATUS_CHANGED" - ], + "const": "PAYMENT_STATUS_CHANGED", "title": "이벤트 타입", "description": "이벤트 타입." }, @@ -2049,7 +2229,6 @@ "description": "이벤트 데이터." } }, - "nullable": false, "required": [ "eventType", "data" @@ -2070,18 +2249,24 @@ "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키." }, "status": { - "type": "string", - "enum": [ - "CANCELED", - "DONE", - "PARTIAL_CANCELED", - "WAITING_FOR_DEPOSIT" + "oneOf": [ + { + "const": "WAITING_FOR_DEPOSIT" + }, + { + "const": "DONE" + }, + { + "const": "CANCELED" + }, + { + "const": "PARTIAL_CANCELED" + } ], "title": "결제 상태", "description": "결제 상태.\n\n - DONE: 결제 완료\n - CANCELED: 결제가 취소됨\n - PARTIAL_CANCELED: 결제가 부분 취소됨\n - WAITING_FOR_DEPOSIT: 입금 대기 중" } }, - "nullable": false, "required": [ "paymentKey", "orderId", @@ -2093,10 +2278,7 @@ "type": "object", "properties": { "method": { - "type": "string", - "enum": [ - "card" - ], + "const": "card", "title": "결제 수단이 신용 카드임을 의미", "description": "결제 수단이 신용 카드임을 의미." }, @@ -2179,7 +2361,6 @@ "description": "3DS 인증 결과에 대한 코드 값." } }, - "nullable": false, "required": [ "cavv", "xid", @@ -2194,7 +2375,6 @@ "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필요한 상황을 시뮬레이션하기 위해서는 이러한 속성이 필요한 것." } }, - "nullable": false, "required": [ "method", "cardNumber", @@ -2219,7 +2399,6 @@ "description": "결제 총액." } }, - "nullable": false, "required": [ "orderId", "amount" @@ -2264,7 +2443,6 @@ "description": "예금주." } }, - "nullable": false, "required": [ "bank", "accountNumber", @@ -2289,7 +2467,6 @@ "description": "결제 취소 후 환불 가능 잔액." } }, - "nullable": false, "required": [ "paymentKey", "cancelReason" @@ -2300,10 +2477,7 @@ "type": "object", "properties": { "method": { - "type": "string", - "enum": [ - "virtual-account" - ], + "const": "virtual-account", "title": "결제 수단이 가상 계좌임을 의미", "description": "결제 수단이 가상 계좌임을 의미." }, @@ -2338,7 +2512,6 @@ "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필요한 상황을 시뮬레이션하기 위해서는 이러한 속성이 필요한 것." } }, - "nullable": false, "required": [ "method", "orderId", @@ -2357,5 +2530,6 @@ "in": "header" } } - } + }, + "tags": [] } \ No newline at end of file