From 06bd79e59e90e20ee8aa0e49b2b67d39eaf17cba Mon Sep 17 00:00:00 2001 From: Jeongho Nam Date: Wed, 6 Dec 2023 16:07:19 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9A=A9=EC=96=B4=20=EB=B3=80=EA=B2=BD=20?= =?UTF-8?q?=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DTO 와 API 함수에 들어가는 단어 중, `store` 를 모두 `create` 로 변경. 실제로 아임포트와 토스 페이먼츠에서 "스토어" 라는 단어가 사용되기에, 조금 더 헤깔리지 않을법한 단어로 바꾸었다. - `IStore` -> `ICreate` - `store()` -> `create()` --- README.md | 10 +- package.json | 2 +- packages/fake-iamport-server/README.md | 2 +- packages/fake-iamport-server/package.json | 14 +- .../functional/certifications/otp/index.ts | 2 +- .../src/api/functional/payments/index.ts | 2 +- .../src/api/functional/receipts/index.ts | 20 +- .../functional/subscribe/customers/index.ts | 24 +- .../functional/subscribe/payments/index.ts | 2 +- .../src/api/functional/vbanks/index.ts | 20 +- .../api/structures/IIamportCertification.ts | 2 +- .../api/structures/IIamportPaymentCancel.ts | 2 +- .../src/api/structures/IIamportReceipt.ts | 2 +- .../api/structures/IIamportSubscription.ts | 4 +- .../api/structures/IIamportVBankPayment.ts | 2 +- .../FakeIamportCertificationsController.ts | 2 +- .../FakeIamportPaymentsController.ts | 2 +- .../FakeIamportReceiptsController.ts | 4 +- .../FakeIamportVbanksController.ts | 6 +- ...FakeIamportSubscribeCustomersController.ts | 8 +- .../FakeIamportSubscribePaymentsController.ts | 10 +- .../providers/FakeIamportPaymentProvider.ts | 4 +- .../FakeIamportSubscriptionProvider.ts | 4 +- .../test/features/test_fake_receipt.ts | 2 +- .../test_fake_subscription_payment_again.ts | 2 +- .../test/features/test_fake_vbank_payment.ts | 2 +- packages/fake-iamport-server/tsconfig.json | 2 +- packages/fake-toss-payments-server/README.md | 2 +- .../fake-toss-payments-server/package.json | 10 +- .../v1/billing/authorizations/card/index.ts | 24 +- .../api/functional/v1/cash_receipts/index.ts | 20 +- .../src/api/functional/v1/payments/index.ts | 12 +- .../functional/v1/virtual_accounts/index.ts | 26 +- .../src/api/structures/ITossBilling.ts | 2 +- .../src/api/structures/ITossCardPayment.ts | 2 +- .../src/api/structures/ITossCashReceipt.ts | 2 +- .../src/api/structures/ITossPayment.ts | 10 +- .../src/api/structures/ITossPaymentCancel.ts | 2 +- .../structures/ITossVirtualAccountPayment.ts | 2 +- .../controllers/FakeTossBillingController.ts | 10 +- .../FakeTossCashReceiptsController.ts | 4 +- .../controllers/FakeTossPaymentsController.ts | 12 +- .../FakeTossVirtualAccountsController.ts | 10 +- .../src/providers/FakeTossPaymentProvider.ts | 2 +- .../src/providers/FakeTossStorage.ts | 2 +- .../features/test_fake_billing_payment.ts | 2 +- .../test/features/test_fake_card_payment.ts | 2 +- .../test/features/test_fake_cash_receipt.ts | 2 +- .../features/test_fake_storage_capacity.ts | 2 +- .../test_fake_virtual_account_payment.ts | 4 +- .../fake-toss-payments-server/tsconfig.json | 2 +- packages/iamport-server-api/package.json | 10 +- packages/iamport-server-api/swagger.json | 4937 +-------------- packages/payment-api/README.md | 10 +- packages/payment-api/package.json | 14 +- packages/payment-api/swagger.json | 5465 +---------------- packages/payment-backend/INFRASTRUCTURE.md | 2 +- packages/payment-backend/README.md | 30 +- packages/payment-backend/package.json | 20 +- .../functional/payments/histories/index.ts | 22 +- .../functional/payments/reservations/index.ts | 20 +- .../payments/IPaymentCancelHistory.ts | 2 +- .../structures/payments/IPaymentHistory.ts | 6 +- .../payments/IPaymentReservation.ts | 2 +- .../payments/PaymentHistoriesController.ts | 10 +- .../payments/PaymentReservationsController.ts | 6 +- .../payments/PaymentCancelHistoryProvider.ts | 6 +- .../payments/PaymentHistoryProvider.ts | 6 +- .../payments/PaymentReservationProvider.ts | 8 +- .../services/iamport/IamportPaymentService.ts | 2 +- .../toss/TossPaymentBillingService.ts | 6 +- .../services/toss/TossPaymentCardService.ts | 4 +- .../src/services/toss/TossPaymentService.ts | 10 +- .../toss/TossPaymentVirtualAccountService.ts | 6 +- .../iamport/test_api_iamport_card_payment.ts | 6 +- .../test_api_iamport_subscription_payment.ts | 8 +- .../iamport/test_api_iamport_vbank_payment.ts | 10 +- .../toss/test_api_toss_card_payment.ts | 6 +- .../test_api_toss_subscription_payment.ts | 8 +- .../toss/test_api_toss_vbank_payment.ts | 37 +- packages/payment-backend/tsconfig.json | 2 +- .../toss-payments-server-api/package.json | 10 +- .../toss-payments-server-api/swagger.json | 3849 +----------- 83 files changed, 311 insertions(+), 14555 deletions(-) diff --git a/README.md b/README.md index 0d1a149..e9a051c 100644 --- a/README.md +++ b/README.md @@ -65,8 +65,8 @@ export async function test_api_toss_vbank_payment( * {@link IPaymentHistory} 등록에 사용하도록 하자. */ const payment: ITossPayment = - await toss.functional.v1.virtual_accounts.store( - await TossAsset.connection("test-toss-payments-store-id"), + await toss.functional.v1.virtual_accounts.create( + await TossAsset.connection("test-toss-payments-create-id"), { // 가상 계좌 정보 method: "virtual-account", @@ -106,10 +106,10 @@ export async function test_api_toss_vbank_payment( * 조회할 때 필요하니, 이를 반드시 귀하의 백엔드 서버에 저장해두도록 한다. */ const history: IPaymentHistory = - await api.functional.payments.histories.store(connection, { + await api.functional.payments.histories.create(connection, { vendor: { code: "toss.payments", - store_id: "test-toss-payments-store-id", + store_id: "test-toss-payments-create-id", uid: payment.paymentKey, }, source: { @@ -132,7 +132,7 @@ export async function test_api_toss_vbank_payment( * 고객이 자신 앞을 발급된 계좌에, 결제 금액을 입금하는 상황 시뮬레이션. */ await toss.functional.internal.deposit( - await TossAsset.connection("test-toss-payments-store-id"), + await TossAsset.connection("test-toss-payments-create-id"), payment.paymentKey, ); 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/README.md b/packages/fake-iamport-server/README.md index 0b728e7..f76c667 100644 --- a/packages/fake-iamport-server/README.md +++ b/packages/fake-iamport-server/README.md @@ -192,7 +192,7 @@ export async function test_fake_subscription_payment_again(): Promise; + export type Input = Primitive; export type Output = Primitive>; export const METADATA = { diff --git a/packages/fake-iamport-server/src/api/functional/payments/index.ts b/packages/fake-iamport-server/src/api/functional/payments/index.ts index d98b24d..7e5a074 100644 --- a/packages/fake-iamport-server/src/api/functional/payments/index.ts +++ b/packages/fake-iamport-server/src/api/functional/payments/index.ts @@ -137,7 +137,7 @@ export async function cancel( ); } export namespace cancel { - export type Input = Primitive; + export type Input = Primitive; export type Output = Primitive>; export const METADATA = { diff --git a/packages/fake-iamport-server/src/api/functional/receipts/index.ts b/packages/fake-iamport-server/src/api/functional/receipts/index.ts index 21d4973..77bf753 100644 --- a/packages/fake-iamport-server/src/api/functional/receipts/index.ts +++ b/packages/fake-iamport-server/src/api/functional/receipts/index.ts @@ -89,17 +89,17 @@ export namespace at { * @security bearer * @author Samchon * - * @controller FakeIamportReceiptsController.store + * @controller FakeIamportReceiptsController.create * @path POST /receipts/:imp_uid * @nestia Generated by Nestia - https://github.com/samchon/nestia */ -export async function store( +export async function create( connection: IConnection, imp_uid: string, - input: store.Input, -): Promise { + input: create.Input, +): Promise { return !!connection.simulate - ? store.simulate( + ? create.simulate( connection, imp_uid, input, @@ -113,14 +113,14 @@ export async function store( }, }, { - ...store.METADATA, - path: store.path(imp_uid), + ...create.METADATA, + path: create.path(imp_uid), } as const, input, ); } -export namespace store { - export type Input = Primitive; +export namespace create { + export type Input = Primitive; export type Output = Primitive>; export const METADATA = { @@ -145,7 +145,7 @@ export namespace store { export const simulate = async ( connection: IConnection, imp_uid: string, - input: store.Input, + input: create.Input, ): Promise => { const assert = NestiaSimulator.assert({ method: METADATA.method, diff --git a/packages/fake-iamport-server/src/api/functional/subscribe/customers/index.ts b/packages/fake-iamport-server/src/api/functional/subscribe/customers/index.ts index a5c667d..19562f0 100644 --- a/packages/fake-iamport-server/src/api/functional/subscribe/customers/index.ts +++ b/packages/fake-iamport-server/src/api/functional/subscribe/customers/index.ts @@ -15,7 +15,7 @@ import { NestiaSimulator } from "../../../utils/NestiaSimulator"; /** * 간편 결제 카드 정보 조회하기. * - * `subscribe.customers.at` 은 고객이 {@link store } 나 혹은 아임포트가 제공하는 + * `subscribe.customers.at` 은 고객이 {@link create } 나 혹은 아임포트가 제공하는 * 간편 결제 카드 등록 창을 이용하여 저장한 간편 결제 카드 정보를 조회하는 API * 함수이다. * @@ -91,7 +91,7 @@ export namespace at { * 필요할 때마다 카드 정보를 반복 입력하는 일 없이, 간편하게 결제를 진행하고자 할 때 * 사용하는 API 함수이다. * - * 참고로 `subscribe.customers.store` 는 클라이언트 어플리케이션이 아임포트가 제공하는 + * 참고로 `subscribe.customers.create` 는 클라이언트 어플리케이션이 아임포트가 제공하는 * 간편 결제 카드 등록 창을 사용하는 경우, 귀하의 백엔드 서버가 이를 실 서비스에서 호출하는 * 일은 없을 것이다. 다만, 고객이 간편 결제 카드를 등록하는 상황을 시뮬레이션하기 위하여, * 테스트 자동화 프로그램 수준에서 사용될 수는 있다. @@ -102,17 +102,17 @@ export namespace at { * @security bearer * @author Samchon * - * @controller FakeIamportSubscribeCustomersController.store + * @controller FakeIamportSubscribeCustomersController.create * @path POST /subscribe/customers/:customer_uid * @nestia Generated by Nestia - https://github.com/samchon/nestia */ -export async function store( +export async function create( connection: IConnection, customer_uid: string, - input: store.Input, -): Promise { + input: create.Input, +): Promise { return !!connection.simulate - ? store.simulate( + ? create.simulate( connection, customer_uid, input, @@ -126,14 +126,14 @@ export async function store( }, }, { - ...store.METADATA, - path: store.path(customer_uid), + ...create.METADATA, + path: create.path(customer_uid), } as const, input, ); } -export namespace store { - export type Input = Primitive; +export namespace create { + export type Input = Primitive; export type Output = Primitive>; export const METADATA = { @@ -158,7 +158,7 @@ export namespace store { export const simulate = async ( connection: IConnection, customer_uid: string, - input: store.Input, + input: create.Input, ): Promise => { const assert = NestiaSimulator.assert({ method: METADATA.method, diff --git a/packages/fake-iamport-server/src/api/functional/subscribe/payments/index.ts b/packages/fake-iamport-server/src/api/functional/subscribe/payments/index.ts index 3e9fb8d..f5e8834 100644 --- a/packages/fake-iamport-server/src/api/functional/subscribe/payments/index.ts +++ b/packages/fake-iamport-server/src/api/functional/subscribe/payments/index.ts @@ -23,7 +23,7 @@ import { NestiaSimulator } from "../../../utils/NestiaSimulator"; * * 다만, 정히 간편 카드 등록과 결제를 동시에 하고 싶다면, * `subscribe.payments.onetime` 에 {@link IIamportSubscription.IOnetime.customer_uid } - * 를 더하기보다, {@link subscribe.customers.store } 와 {@link subscribe.payments.again } + * 를 더하기보다, {@link subscribe.customers.create } 와 {@link subscribe.payments.again } * 을 각각 호출하는 것을 권장한다. 그것이 예외적인 상황에 보다 안전하게 대처할 수 있기 * 때문이다. * diff --git a/packages/fake-iamport-server/src/api/functional/vbanks/index.ts b/packages/fake-iamport-server/src/api/functional/vbanks/index.ts index 0e81e5f..d588384 100644 --- a/packages/fake-iamport-server/src/api/functional/vbanks/index.ts +++ b/packages/fake-iamport-server/src/api/functional/vbanks/index.ts @@ -20,16 +20,16 @@ import { NestiaSimulator } from "../../utils/NestiaSimulator"; * @security bearer * @author Samchon * - * @controller FakeIamportVbanksController.store + * @controller FakeIamportVbanksController.create * @path POST /vbanks * @nestia Generated by Nestia - https://github.com/samchon/nestia */ -export async function store( +export async function create( connection: IConnection, - input: store.Input, -): Promise { + input: create.Input, +): Promise { return !!connection.simulate - ? store.simulate( + ? create.simulate( connection, input, ) @@ -42,14 +42,14 @@ export async function store( }, }, { - ...store.METADATA, - path: store.path(), + ...create.METADATA, + path: create.path(), } as const, input, ); } -export namespace store { - export type Input = Primitive; +export namespace create { + export type Input = Primitive; export type Output = Primitive>; export const METADATA = { @@ -73,7 +73,7 @@ export namespace store { typia.random>>(g); export const simulate = async ( connection: IConnection, - input: store.Input, + input: create.Input, ): Promise => { const assert = NestiaSimulator.assert({ method: METADATA.method, diff --git a/packages/fake-iamport-server/src/api/structures/IIamportCertification.ts b/packages/fake-iamport-server/src/api/structures/IIamportCertification.ts index 884f39c..8e1d618 100644 --- a/packages/fake-iamport-server/src/api/structures/IIamportCertification.ts +++ b/packages/fake-iamport-server/src/api/structures/IIamportCertification.ts @@ -124,7 +124,7 @@ export namespace IIamportCertification { /** * 본인 인증 입력 정보. */ - export interface IStore { + export interface ICreate { /** * 본인인증대상자 성명. */ diff --git a/packages/fake-iamport-server/src/api/structures/IIamportPaymentCancel.ts b/packages/fake-iamport-server/src/api/structures/IIamportPaymentCancel.ts index 0a7d28e..6bcb668 100644 --- a/packages/fake-iamport-server/src/api/structures/IIamportPaymentCancel.ts +++ b/packages/fake-iamport-server/src/api/structures/IIamportPaymentCancel.ts @@ -17,7 +17,7 @@ export namespace IIamportPaymentCancel { /** * 결제 취소 입력 정보. */ - export interface IStore { + export interface ICreate { /** * 결제 정보 {@link IIamportPayment} 의 식별자 키. */ diff --git a/packages/fake-iamport-server/src/api/structures/IIamportReceipt.ts b/packages/fake-iamport-server/src/api/structures/IIamportReceipt.ts index 22bdfca..d5fd978 100644 --- a/packages/fake-iamport-server/src/api/structures/IIamportReceipt.ts +++ b/packages/fake-iamport-server/src/api/structures/IIamportReceipt.ts @@ -73,7 +73,7 @@ export namespace IIamportReceipt { /** * 현금영수증 입력 정보. */ - export interface IStore { + export interface ICreate { /** * 귀속 결제의 {@link IIamportPayment.imp_uid}. */ diff --git a/packages/fake-iamport-server/src/api/structures/IIamportSubscription.ts b/packages/fake-iamport-server/src/api/structures/IIamportSubscription.ts index 7c44870..85eab81 100644 --- a/packages/fake-iamport-server/src/api/structures/IIamportSubscription.ts +++ b/packages/fake-iamport-server/src/api/structures/IIamportSubscription.ts @@ -40,7 +40,7 @@ export namespace IIamportSubscription { /** * 간편 결제 카드 입력 정보. */ - export interface IStore extends IAccessor { + export interface ICreate extends IAccessor { /** * 카드 번호. * @@ -82,7 +82,7 @@ export namespace IIamportSubscription { * 결제 신청 입력 정보. */ export interface IOnetime - extends Omit, + extends Omit, Omit { /** * 고객 식별자 키. diff --git a/packages/fake-iamport-server/src/api/structures/IIamportVBankPayment.ts b/packages/fake-iamport-server/src/api/structures/IIamportVBankPayment.ts index 494b00b..28900ae 100644 --- a/packages/fake-iamport-server/src/api/structures/IIamportVBankPayment.ts +++ b/packages/fake-iamport-server/src/api/structures/IIamportVBankPayment.ts @@ -48,7 +48,7 @@ export namespace IIamportVBankPayment { * - 나이스페이먼츠 * - KG이니시스 */ - export interface IStore { + export interface ICreate { /** * 주문 식별자 키. * diff --git a/packages/fake-iamport-server/src/controllers/FakeIamportCertificationsController.ts b/packages/fake-iamport-server/src/controllers/FakeIamportCertificationsController.ts index 9a44c17..7a5b8d3 100644 --- a/packages/fake-iamport-server/src/controllers/FakeIamportCertificationsController.ts +++ b/packages/fake-iamport-server/src/controllers/FakeIamportCertificationsController.ts @@ -63,7 +63,7 @@ export class FakeIamportCertificationsController { @core.TypedRoute.Post("otp/request") public request( @FakeIamportUserAuth() _user: IIamportUser.IAccessor, - @core.TypedBody() input: IIamportCertification.IStore, + @core.TypedBody() input: IIamportCertification.ICreate, ): IIamportResponse { const birth: Date = new Date( `${input.birth.substr(0, 4)}-${input.birth.substr( diff --git a/packages/fake-iamport-server/src/controllers/FakeIamportPaymentsController.ts b/packages/fake-iamport-server/src/controllers/FakeIamportPaymentsController.ts index ff8ce13..f3af9e4 100644 --- a/packages/fake-iamport-server/src/controllers/FakeIamportPaymentsController.ts +++ b/packages/fake-iamport-server/src/controllers/FakeIamportPaymentsController.ts @@ -49,7 +49,7 @@ export class FakeIamportPaymentsController { @core.TypedRoute.Post("cancel") public cancel( @FakeIamportUserAuth() _user: IIamportUser.IAccessor, - @core.TypedBody() input: IIamportPaymentCancel.IStore, + @core.TypedBody() input: IIamportPaymentCancel.ICreate, ): IIamportResponse { const payment: IIamportPayment = FakeIamportStorage.payments.get( input.imp_uid, diff --git a/packages/fake-iamport-server/src/controllers/FakeIamportReceiptsController.ts b/packages/fake-iamport-server/src/controllers/FakeIamportReceiptsController.ts index 016f3da..bff7e8c 100644 --- a/packages/fake-iamport-server/src/controllers/FakeIamportReceiptsController.ts +++ b/packages/fake-iamport-server/src/controllers/FakeIamportReceiptsController.ts @@ -41,10 +41,10 @@ export class FakeIamportReceiptsController { * @author Samchon */ @core.TypedRoute.Post() - public store( + public create( @FakeIamportUserAuth() _user: IIamportUser.IAccessor, @core.TypedParam("imp_uid") imp_uid: string, - @core.TypedBody() input: IIamportReceipt.IStore, + @core.TypedBody() input: IIamportReceipt.ICreate, ): IIamportResponse { const payment: IIamportPayment = FakeIamportStorage.payments.get(imp_uid); if (!payment.paid_at) diff --git a/packages/fake-iamport-server/src/controllers/FakeIamportVbanksController.ts b/packages/fake-iamport-server/src/controllers/FakeIamportVbanksController.ts index 5082250..b2d603e 100644 --- a/packages/fake-iamport-server/src/controllers/FakeIamportVbanksController.ts +++ b/packages/fake-iamport-server/src/controllers/FakeIamportVbanksController.ts @@ -25,9 +25,9 @@ export class FakeIamportVbanksController { * @author Samchon */ @core.TypedRoute.Post() - public store( + public create( @FakeIamportUserAuth() _user: IIamportUser.IAccessor, - @core.TypedBody() input: IIamportVBankPayment.IStore, + @core.TypedBody() input: IIamportVBankPayment.ICreate, ): IIamportResponse { // CONSTRUCTION const pg_id: string = v4(); @@ -83,7 +83,7 @@ export class FakeIamportVbanksController { // HIDDEN notice_url: input.notice_url, }; - FakeIamportPaymentProvider.store(payment); + FakeIamportPaymentProvider.create(payment); // RETURNS return FakeIamportResponseProvider.success(payment); diff --git a/packages/fake-iamport-server/src/controllers/subscribe/FakeIamportSubscribeCustomersController.ts b/packages/fake-iamport-server/src/controllers/subscribe/FakeIamportSubscribeCustomersController.ts index dc75e4d..36245fc 100644 --- a/packages/fake-iamport-server/src/controllers/subscribe/FakeIamportSubscribeCustomersController.ts +++ b/packages/fake-iamport-server/src/controllers/subscribe/FakeIamportSubscribeCustomersController.ts @@ -15,7 +15,7 @@ export class FakeIamportSubscribeCustomersController { /** * 간편 결제 카드 정보 조회하기. * - * `subscribe.customers.at` 은 고객이 {@link store} 나 혹은 아임포트가 제공하는 + * `subscribe.customers.at` 은 고객이 {@link create} 나 혹은 아임포트가 제공하는 * 간편 결제 카드 등록 창을 이용하여 저장한 간편 결제 카드 정보를 조회하는 API * 함수이다. * @@ -44,7 +44,7 @@ export class FakeIamportSubscribeCustomersController { * 필요할 때마다 카드 정보를 반복 입력하는 일 없이, 간편하게 결제를 진행하고자 할 때 * 사용하는 API 함수이다. * - * 참고로 `subscribe.customers.store` 는 클라이언트 어플리케이션이 아임포트가 제공하는 + * 참고로 `subscribe.customers.create` 는 클라이언트 어플리케이션이 아임포트가 제공하는 * 간편 결제 카드 등록 창을 사용하는 경우, 귀하의 백엔드 서버가 이를 실 서비스에서 호출하는 * 일은 없을 것이다. 다만, 고객이 간편 결제 카드를 등록하는 상황을 시뮬레이션하기 위하여, * 테스트 자동화 프로그램 수준에서 사용될 수는 있다. @@ -57,10 +57,10 @@ export class FakeIamportSubscribeCustomersController { * @author Samchon */ @core.TypedRoute.Post(":customer_uid") - public store( + public create( @FakeIamportUserAuth() _user: IIamportUser.IAccessor, @core.TypedParam("customer_uid") customer_uid: string, - @core.TypedBody() input: IIamportSubscription.IStore, + @core.TypedBody() input: IIamportSubscription.ICreate, ): IIamportResponse { // ENROLLMENT const subscription: IIamportSubscription = { diff --git a/packages/fake-iamport-server/src/controllers/subscribe/FakeIamportSubscribePaymentsController.ts b/packages/fake-iamport-server/src/controllers/subscribe/FakeIamportSubscribePaymentsController.ts index 81e9dc8..21ca585 100644 --- a/packages/fake-iamport-server/src/controllers/subscribe/FakeIamportSubscribePaymentsController.ts +++ b/packages/fake-iamport-server/src/controllers/subscribe/FakeIamportSubscribePaymentsController.ts @@ -25,7 +25,7 @@ export class FakeIampotSubscribePaymentsController { * * 다만, 정히 간편 카드 등록과 결제를 동시에 하고 싶다면, * `subscribe.payments.onetime` 에 {@link IIamportSubscription.IOnetime.customer_uid} - * 를 더하기보다, {@link subscribe.customers.store} 와 {@link subscribe.payments.again} + * 를 더하기보다, {@link subscribe.customers.create} 와 {@link subscribe.payments.again} * 을 각각 호출하는 것을 권장한다. 그것이 예외적인 상황에 보다 안전하게 대처할 수 있기 * 때문이다. * @@ -46,9 +46,9 @@ export class FakeIampotSubscribePaymentsController { @core.TypedBody() input: IIamportSubscription.IOnetime, ): IIamportResponse { if (input.customer_uid) - FakeIamportSubscriptionProvider.store( + FakeIamportSubscriptionProvider.create( input.customer_uid, - input as IIamportSubscription.IStore, + input as IIamportSubscription.ICreate, ); const pg_id: string = v4(); @@ -102,7 +102,7 @@ export class FakeIampotSubscribePaymentsController { // HIDDEN notice_url: input.notice_url, }; - FakeIamportPaymentProvider.store(payment); + FakeIamportPaymentProvider.create(payment); return FakeIamportResponseProvider.success(payment); } @@ -186,7 +186,7 @@ export class FakeIampotSubscribePaymentsController { // HIDDEN notice_url: input.notice_url, }; - FakeIamportPaymentProvider.store(payment); + FakeIamportPaymentProvider.create(payment); return FakeIamportResponseProvider.success(payment); } diff --git a/packages/fake-iamport-server/src/providers/FakeIamportPaymentProvider.ts b/packages/fake-iamport-server/src/providers/FakeIamportPaymentProvider.ts index 1388e62..a3bfcc3 100644 --- a/packages/fake-iamport-server/src/providers/FakeIamportPaymentProvider.ts +++ b/packages/fake-iamport-server/src/providers/FakeIamportPaymentProvider.ts @@ -9,7 +9,7 @@ import { FakeIamportStorage } from "./FakeIamportStorage"; (global as any).fetch ??= require("node-fetch"); export namespace FakeIamportPaymentProvider { - export function store(payment: IIamportPayment): void { + export function create(payment: IIamportPayment): void { FakeIamportStorage.payments.set(payment.imp_uid, payment); webhook(payment).catch(() => {}); } @@ -22,7 +22,7 @@ export namespace FakeIamportPaymentProvider { export function cancel( payment: IIamportPayment, - input: IIamportPaymentCancel.IStore, + input: IIamportPaymentCancel.ICreate, ): void { // VALIDATION if ( diff --git a/packages/fake-iamport-server/src/providers/FakeIamportSubscriptionProvider.ts b/packages/fake-iamport-server/src/providers/FakeIamportSubscriptionProvider.ts index c9ece2a..a029c90 100644 --- a/packages/fake-iamport-server/src/providers/FakeIamportSubscriptionProvider.ts +++ b/packages/fake-iamport-server/src/providers/FakeIamportSubscriptionProvider.ts @@ -5,9 +5,9 @@ import { AdvancedRandomGenerator } from "../utils/AdvancedRandomGenerator"; import { FakeIamportStorage } from "./FakeIamportStorage"; export namespace FakeIamportSubscriptionProvider { - export function store( + export function create( customer_uid: string, - input: IIamportSubscription.IStore, + input: IIamportSubscription.ICreate, ): IIamportSubscription { const subscription: IIamportSubscription = { customer_uid, diff --git a/packages/fake-iamport-server/test/features/test_fake_receipt.ts b/packages/fake-iamport-server/test/features/test_fake_receipt.ts index c8c1071..88e5619 100644 --- a/packages/fake-iamport-server/test/features/test_fake_receipt.ts +++ b/packages/fake-iamport-server/test/features/test_fake_receipt.ts @@ -12,7 +12,7 @@ export async function test_fake_receipt( ): Promise { const payment: IIamportPayment = await test_fake_card_payment(connector); const output: IIamportResponse = - await imp.functional.receipts.store( + await imp.functional.receipts.create( await connector.get(), payment.imp_uid, { diff --git a/packages/fake-iamport-server/test/features/test_fake_subscription_payment_again.ts b/packages/fake-iamport-server/test/features/test_fake_subscription_payment_again.ts index f732320..fc40361 100644 --- a/packages/fake-iamport-server/test/features/test_fake_subscription_payment_again.ts +++ b/packages/fake-iamport-server/test/features/test_fake_subscription_payment_again.ts @@ -28,7 +28,7 @@ export async function test_fake_subscription_payment_again( * 카드 정보를 반복 입력하는 일 없이, `customer_uid` 만을 사용하여 매우 * 간단하게 결제할 수 있다. */ - await imp.functional.subscribe.customers.store( + await imp.functional.subscribe.customers.create( await connector.get(), customer_uid, { diff --git a/packages/fake-iamport-server/test/features/test_fake_vbank_payment.ts b/packages/fake-iamport-server/test/features/test_fake_vbank_payment.ts index 1155f0c..776d6c7 100644 --- a/packages/fake-iamport-server/test/features/test_fake_vbank_payment.ts +++ b/packages/fake-iamport-server/test/features/test_fake_vbank_payment.ts @@ -30,7 +30,7 @@ async function issue( * 향후 고객이 결제 금액을 모두 입금하기 전까지, `ready` 상태가 계속된다. */ const output: IIamportResponse = - await imp.functional.vbanks.store(await connector.get(), { + await imp.functional.vbanks.create(await connector.get(), { merchant_uid: v4(), amount: 40_000, vbank_code: AdvancedRandomGenerator.alphabets(8), diff --git a/packages/fake-iamport-server/tsconfig.json b/packages/fake-iamport-server/tsconfig.json index ff34750..5eab84c 100644 --- a/packages/fake-iamport-server/tsconfig.json +++ b/packages/fake-iamport-server/tsconfig.json @@ -17,7 +17,7 @@ "outDir": "./lib", /* Redirect output structure to the directory. */ // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ // "composite": true, /* Enable project compilation */ - // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ + // "tsBuildInfoFile": "./", /* Specify file to create incremental compilation information */ // "removeComments": true, /* Do not emit comments to output. */ // "noEmit": true, /* Do not emit outputs. */ // "importHelpers": true, /* Import emit helpers from 'tslib'. */ diff --git a/packages/fake-toss-payments-server/README.md b/packages/fake-toss-payments-server/README.md index 5ecafa3..f782b38 100644 --- a/packages/fake-toss-payments-server/README.md +++ b/packages/fake-toss-payments-server/README.md @@ -175,7 +175,7 @@ export async function test_fake_payment_billing_payment(): Promise } }; - const billing: ITossBilling = await toss.functional.v1.billing.authorizations.card.store + const billing: ITossBilling = await toss.functional.v1.billing.authorizations.card.create ( connection, { diff --git a/packages/fake-toss-payments-server/package.json b/packages/fake-toss-payments-server/package.json index 59dd293..f0b9f63 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": "6.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.3.6", - "@nestia/sdk": "^2.3.9", + "@nestia/sdk": "^2.4.2", "@types/atob": "^2.1.2", "@types/btoa": "^1.2.3", "@types/cli": "^0.11.19", @@ -54,12 +54,12 @@ "rimraf": "^3.0.2", "sloc": "^0.2.1", "ts-node": "^10.9.1", - "ts-patch": "^3.0.2", + "ts-patch": "^3.1.1", "typescript": "^5.1.6", "typescript-transform-paths": "^3.4.6" }, "dependencies": { - "@nestia/core": "^2.3.9", + "@nestia/core": "^2.4.2", "@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.4", "uuid": "^9.0.0" }, "keywords": [ diff --git a/packages/fake-toss-payments-server/src/api/functional/v1/billing/authorizations/card/index.ts b/packages/fake-toss-payments-server/src/api/functional/v1/billing/authorizations/card/index.ts index 725bb13..d301fc1 100644 --- a/packages/fake-toss-payments-server/src/api/functional/v1/billing/authorizations/card/index.ts +++ b/packages/fake-toss-payments-server/src/api/functional/v1/billing/authorizations/card/index.ts @@ -14,11 +14,11 @@ import { NestiaSimulator } from "../../../../../utils/NestiaSimulator"; /** * 간편 결제 카드 등록하기. * - * `billing.authorizations.card.store` 는 고객이 자신의 신록 카드를 서버에 등록해두고, + * `billing.authorizations.card.create` 는 고객이 자신의 신록 카드를 서버에 등록해두고, * 매번 결제가 필요할 때마다 카드 정보를 반복 입력하는 일 없이 간편하게 결제를 * 진행하고자 할 때, 호출되는 API 함수이다. * - * 참고로 `billing.authorizations.card.store` 는 클라이언트 어플리케이션이 토스 + * 참고로 `billing.authorizations.card.create` 는 클라이언트 어플리케이션이 토스 * 페이먼츠가 제공하는 간편 결제 카드 등록 창을 사용하는 경우, 귀하의 백엔드 서버가 이를 * 실 서비스에서 호출하는 일은 없을 것이다. 다만, 고객이 간편 결제 카드를 등록하는 * 상황을 시뮬레이션하기 위하여, 테스트 자동화 프로그램 수준에서 사용될 수는 있다. @@ -28,16 +28,16 @@ import { NestiaSimulator } from "../../../../../utils/NestiaSimulator"; * @security basic * @author Samchon * - * @controller FakeTossBillingController.store + * @controller FakeTossBillingController.create * @path POST /v1/billing/authorizations/card * @nestia Generated by Nestia - https://github.com/samchon/nestia */ -export async function store( +export async function create( connection: IConnection, - input: store.Input, -): Promise { + input: create.Input, +): Promise { return !!connection.simulate - ? store.simulate( + ? create.simulate( connection, input, ) @@ -50,14 +50,14 @@ export async function store( }, }, { - ...store.METADATA, - path: store.path(), + ...create.METADATA, + path: create.path(), } as const, input, ); } -export namespace store { - export type Input = Primitive; +export namespace create { + export type Input = Primitive; export type Output = Primitive; export const METADATA = { @@ -81,7 +81,7 @@ export namespace store { typia.random>(g); export const simulate = async ( connection: IConnection, - input: store.Input, + input: create.Input, ): Promise => { const assert = NestiaSimulator.assert({ method: METADATA.method, diff --git a/packages/fake-toss-payments-server/src/api/functional/v1/cash_receipts/index.ts b/packages/fake-toss-payments-server/src/api/functional/v1/cash_receipts/index.ts index a059f8d..91338e8 100644 --- a/packages/fake-toss-payments-server/src/api/functional/v1/cash_receipts/index.ts +++ b/packages/fake-toss-payments-server/src/api/functional/v1/cash_receipts/index.ts @@ -19,16 +19,16 @@ import { NestiaSimulator } from "../../../utils/NestiaSimulator"; * @security basic * @author Samchon * - * @controller FakeTossCashReceiptsController.store + * @controller FakeTossCashReceiptsController.create * @path POST /v1/cash-receipts * @nestia Generated by Nestia - https://github.com/samchon/nestia */ -export async function store( +export async function create( connection: IConnection, - input: store.Input, -): Promise { + input: create.Input, +): Promise { return !!connection.simulate - ? store.simulate( + ? create.simulate( connection, input, ) @@ -41,14 +41,14 @@ export async function store( }, }, { - ...store.METADATA, - path: store.path(), + ...create.METADATA, + path: create.path(), } as const, input, ); } -export namespace store { - export type Input = Primitive; +export namespace create { + export type Input = Primitive; export type Output = Primitive; export const METADATA = { @@ -72,7 +72,7 @@ export namespace store { typia.random>(g); export const simulate = async ( connection: IConnection, - input: store.Input, + input: create.Input, ): Promise => { const assert = NestiaSimulator.assert({ method: METADATA.method, diff --git a/packages/fake-toss-payments-server/src/api/functional/v1/payments/index.ts b/packages/fake-toss-payments-server/src/api/functional/v1/payments/index.ts index dd70952..b470753 100644 --- a/packages/fake-toss-payments-server/src/api/functional/v1/payments/index.ts +++ b/packages/fake-toss-payments-server/src/api/functional/v1/payments/index.ts @@ -107,7 +107,7 @@ export namespace at { * 필요한 때 대비, 훨씬 더 세심한 주의가 요구된다. * * 더하여 만약 귀하의 백엔드 서버가 `fake-toss-payments-server` 를 이용하여 고객의 - * 카드 결제를 시뮬레이션하는 경우, {@link ITossCardPayment.IStore.__approved } 값을 + * 카드 결제를 시뮬레이션하는 경우, {@link ITossCardPayment.ICreate.__approved } 값을 * `false` 로 하여 카드 결제의 확정을 고의로 회피할 수 있다. 이를 통하여 토스 * 페이먼츠의 결제 창을 이용한 카드 결제의 경우, 별도의 {@link approve } 가 필요한 * 상황을 시뮬레이션 할 수 있다. @@ -146,7 +146,7 @@ export async function key_in( ); } export namespace key_in { - export type Input = Primitive; + export type Input = Primitive; export type Output = Primitive; export const METADATA = { @@ -197,8 +197,8 @@ export namespace key_in { * 함수이다. * * 만일 귀하가 `fake-toss-payments-server` 를 이용하여 결제를 시뮬레이션하는 경우라면, - * 결제 관련 API 를 호출함에 있어 {@link ITossCardPayment.IStore.__approved } 내지 - * {@link ITossVirtualAccountPayment.IStore.__approved } 를 `false` 로 함으로써, 별도 + * 결제 관련 API 를 호출함에 있어 {@link ITossCardPayment.ICreate.__approved } 내지 + * {@link ITossVirtualAccountPayment.ICreate.__approved } 를 `false` 로 함으로써, 별도 * 승인이 필요한 이러한 상황을 시뮬레이션 할 수 있다. * * @param paymentKey 대상 결제의 {@link ITossPayment.paymentKey} @@ -287,7 +287,7 @@ export namespace approve { * * `payments.cancel` 은 결제를 취소하는 API 이다. * - * 결제 취소 입력 정보 {@link ITossPaymentCancel.IStore } 에는 취소 사유를 비롯하여, + * 결제 취소 입력 정보 {@link ITossPaymentCancel.ICreate } 에는 취소 사유를 비롯하여, * 고객에게 환불해 줄 금액과 부가세 및 필요시 환불 계좌 정보 등을 입력하게 되어있다. * * @param paymentKey 결제 정보의 {@link ITossPayment.paymentKey} @@ -327,7 +327,7 @@ export async function cancel( ); } export namespace cancel { - export type Input = Primitive; + export type Input = Primitive; export type Output = Primitive; export const METADATA = { diff --git a/packages/fake-toss-payments-server/src/api/functional/v1/virtual_accounts/index.ts b/packages/fake-toss-payments-server/src/api/functional/v1/virtual_accounts/index.ts index 9fa209d..4b85840 100644 --- a/packages/fake-toss-payments-server/src/api/functional/v1/virtual_accounts/index.ts +++ b/packages/fake-toss-payments-server/src/api/functional/v1/virtual_accounts/index.ts @@ -14,17 +14,17 @@ import { NestiaSimulator } from "../../../utils/NestiaSimulator"; /** * 가상 계좌로 결제 신청하기. * - * `virtual_accounts.store` 는 고객이 결제 수단을 가상 계좌로 선택하는 경우에 호출되는 + * `virtual_accounts.create` 는 고객이 결제 수단을 가상 계좌로 선택하는 경우에 호출되는 * API 함수이다. 물론 고객이 이처럼 가상 계좌를 선택한 경우, 고객이 지정된 계좌에 돈을 * 입금하기 전까지는 결제가 마무리된 것이 아니기에, {@link ITossPayment.status } 값은 * `WAITING_FOR_DEPOSIT` 이 된다. * - * 참고로 `virtual_accounts.store` 는 클라이언트 어플리케이션이 토스 페이먼츠가 + * 참고로 `virtual_accounts.create` 는 클라이언트 어플리케이션이 토스 페이먼츠가 * 자체적으로 제공하는 결제 창을 사용하는 경우, 귀하의 백엔드 서버가 이를 실 서비스에서 * 호출하는 일은 없을 것이다. 다만, 고객이 가상 계좌로 결제를 진행하는 상황을 * 시뮬레이션하기 위하여, 테스트 자동화 프로그램 수준에서 사용될 수는 있다. * - * 그리고 `virtual_accounts.store` 이후에 고객이 지정된 계좌에 금액을 입금하거든, 토스 + * 그리고 `virtual_accounts.create` 이후에 고객이 지정된 계좌에 금액을 입금하거든, 토스 * 페이먼츠 서버로부터 웹훅 이벤트가 발생되어 귀하의 백엔드 서버로 전송된다. 만약 연동 * 대상 토스 페이먼츠 서버가 실제가 아닌 `fake-toss-payments-server` 라면, * {@link internal.virtual_accounts.deposit } 를 호출하여, 고객이 가상 계좌에 입금하는 @@ -35,16 +35,16 @@ import { NestiaSimulator } from "../../../utils/NestiaSimulator"; * @security basic * @author Samchon * - * @controller FakeTossVirtualAccountsController.store + * @controller FakeTossVirtualAccountsController.create * @path POST /v1/virtual-accounts * @nestia Generated by Nestia - https://github.com/samchon/nestia */ -export async function store( +export async function create( connection: IConnection, - input: store.Input, -): Promise { + input: create.Input, +): Promise { return !!connection.simulate - ? store.simulate( + ? create.simulate( connection, input, ) @@ -57,14 +57,14 @@ export async function store( }, }, { - ...store.METADATA, - path: store.path(), + ...create.METADATA, + path: create.path(), } as const, input, ); } -export namespace store { - export type Input = Primitive; +export namespace create { + export type Input = Primitive; export type Output = Primitive; export const METADATA = { @@ -88,7 +88,7 @@ export namespace store { typia.random>(g); export const simulate = async ( connection: IConnection, - input: store.Input, + input: create.Input, ): Promise => { const assert = NestiaSimulator.assert({ method: METADATA.method, diff --git a/packages/fake-toss-payments-server/src/api/structures/ITossBilling.ts b/packages/fake-toss-payments-server/src/api/structures/ITossBilling.ts index bf09fd0..e1dc404 100644 --- a/packages/fake-toss-payments-server/src/api/structures/ITossBilling.ts +++ b/packages/fake-toss-payments-server/src/api/structures/ITossBilling.ts @@ -46,7 +46,7 @@ export namespace ITossBilling { /** * 간편 결제 카드 등록 정보. */ - export interface IStore extends ICustomerKey { + export interface ICreate extends ICustomerKey { /** * 카드 번호. */ diff --git a/packages/fake-toss-payments-server/src/api/structures/ITossCardPayment.ts b/packages/fake-toss-payments-server/src/api/structures/ITossCardPayment.ts index 7485354..f5f8636 100644 --- a/packages/fake-toss-payments-server/src/api/structures/ITossCardPayment.ts +++ b/packages/fake-toss-payments-server/src/api/structures/ITossCardPayment.ts @@ -104,7 +104,7 @@ export namespace ITossCardPayment { /** * 신용 카드를 이용한 결제 신청 정보. */ - export interface IStore { + export interface ICreate { /** * 결제 수단이 신용 카드임을 의미. */ diff --git a/packages/fake-toss-payments-server/src/api/structures/ITossCashReceipt.ts b/packages/fake-toss-payments-server/src/api/structures/ITossCashReceipt.ts index 7245bba..2bf10df 100644 --- a/packages/fake-toss-payments-server/src/api/structures/ITossCashReceipt.ts +++ b/packages/fake-toss-payments-server/src/api/structures/ITossCashReceipt.ts @@ -90,7 +90,7 @@ export namespace ITossCashReceipt { /** * 현금 영수증 입력 정보. */ - export interface IStore { + export interface ICreate { /** * 현금 영수증의 종류. */ diff --git a/packages/fake-toss-payments-server/src/api/structures/ITossPayment.ts b/packages/fake-toss-payments-server/src/api/structures/ITossPayment.ts index d0d215f..bba832c 100644 --- a/packages/fake-toss-payments-server/src/api/structures/ITossPayment.ts +++ b/packages/fake-toss-payments-server/src/api/structures/ITossPayment.ts @@ -203,19 +203,19 @@ export namespace ITossPayment { /** * 결제 신청 정보. * - * `ITossPayment.IStore` 는 결제 신청 정보를 형상화한 자료구조이자 유니언 타입의 + * `ITossPayment.ICreate` 는 결제 신청 정보를 형상화한 자료구조이자 유니언 타입의 * 인터페이스로써, if condition 을 이용하여 대상 method 를 특정하면, 파생 타입이 * 자동으로 지정된다. * * ```typescript * if (input.method === "card") - * input.cardNumber; // input is ITossCardPayment.IStore + * input.cardNumber; // input is ITossCardPayment.ICreate * ``` */ - export type IStore = - | ITossCardPayment.IStore + export type ICreate = + | ITossCardPayment.ICreate | ITossBilling.IPaymentStore - | ITossVirtualAccountPayment.IStore; + | ITossVirtualAccountPayment.ICreate; // export interface IFinalize // { diff --git a/packages/fake-toss-payments-server/src/api/structures/ITossPaymentCancel.ts b/packages/fake-toss-payments-server/src/api/structures/ITossPaymentCancel.ts index dd70236..76bc3c1 100644 --- a/packages/fake-toss-payments-server/src/api/structures/ITossPaymentCancel.ts +++ b/packages/fake-toss-payments-server/src/api/structures/ITossPaymentCancel.ts @@ -40,7 +40,7 @@ export namespace ITossPaymentCancel { /** * 결제 취소 신청 정보. */ - export interface IStore { + export interface ICreate { /** * {@link ITossPayment} 의 식별자 키. */ diff --git a/packages/fake-toss-payments-server/src/api/structures/ITossVirtualAccountPayment.ts b/packages/fake-toss-payments-server/src/api/structures/ITossVirtualAccountPayment.ts index 32f720e..1cdaf72 100644 --- a/packages/fake-toss-payments-server/src/api/structures/ITossVirtualAccountPayment.ts +++ b/packages/fake-toss-payments-server/src/api/structures/ITossVirtualAccountPayment.ts @@ -23,7 +23,7 @@ export namespace ITossVirtualAccountPayment { /** * 가상 계좌를 이용한 결제 신청 정보. */ - export interface IStore { + export interface ICreate { /** * 결제 수단이 가상 계좌임을 의미. */ diff --git a/packages/fake-toss-payments-server/src/controllers/FakeTossBillingController.ts b/packages/fake-toss-payments-server/src/controllers/FakeTossBillingController.ts index 69722b4..7c1c635 100644 --- a/packages/fake-toss-payments-server/src/controllers/FakeTossBillingController.ts +++ b/packages/fake-toss-payments-server/src/controllers/FakeTossBillingController.ts @@ -14,11 +14,11 @@ export class FakeTossBillingController { /** * 간편 결제 카드 등록하기. * - * `billing.authorizations.card.store` 는 고객이 자신의 신록 카드를 서버에 등록해두고, + * `billing.authorizations.card.create` 는 고객이 자신의 신록 카드를 서버에 등록해두고, * 매번 결제가 필요할 때마다 카드 정보를 반복 입력하는 일 없이 간편하게 결제를 * 진행하고자 할 때, 호출되는 API 함수이다. * - * 참고로 `billing.authorizations.card.store` 는 클라이언트 어플리케이션이 토스 + * 참고로 `billing.authorizations.card.create` 는 클라이언트 어플리케이션이 토스 * 페이먼츠가 제공하는 간편 결제 카드 등록 창을 사용하는 경우, 귀하의 백엔드 서버가 이를 * 실 서비스에서 호출하는 일은 없을 것이다. 다만, 고객이 간편 결제 카드를 등록하는 * 상황을 시뮬레이션하기 위하여, 테스트 자동화 프로그램 수준에서 사용될 수는 있다. @@ -30,9 +30,9 @@ export class FakeTossBillingController { * @author Samchon */ @core.TypedRoute.Post("authorizations/card") - public store( + public create( @FakeTossUserAuth() _0: void, - @core.TypedBody() input: ITossBilling.IStore, + @core.TypedBody() input: ITossBilling.ICreate, ): ITossBilling { const billing: ITossBilling = { mId: "tosspyaments", @@ -108,7 +108,7 @@ export class FakeTossBillingController { @core.TypedBody() input: ITossBilling.IPaymentStore, ): ITossPayment { const tuple = FakeTossStorage.billings.get(billingKey); - const card: ITossBilling.IStore = tuple[1]; + const card: ITossBilling.ICreate = tuple[1]; const payment: ITossCardPayment = { ...FakeTossPaymentProvider.get_common_props(input), diff --git a/packages/fake-toss-payments-server/src/controllers/FakeTossCashReceiptsController.ts b/packages/fake-toss-payments-server/src/controllers/FakeTossCashReceiptsController.ts index 3e50dff..6e2b44d 100644 --- a/packages/fake-toss-payments-server/src/controllers/FakeTossCashReceiptsController.ts +++ b/packages/fake-toss-payments-server/src/controllers/FakeTossCashReceiptsController.ts @@ -23,9 +23,9 @@ export class FakeTossCashReceiptsController { * @author Samchon */ @core.TypedRoute.Post() - public store( + public create( @FakeTossUserAuth() _0: void, - @core.TypedBody() input: ITossCashReceipt.IStore, + @core.TypedBody() input: ITossCashReceipt.ICreate, ): ITossCashReceipt { // CHECK PAYMENT const payment: ITossPayment = FakeTossStorage.payments.get( diff --git a/packages/fake-toss-payments-server/src/controllers/FakeTossPaymentsController.ts b/packages/fake-toss-payments-server/src/controllers/FakeTossPaymentsController.ts index 7eaa5e9..a064456 100644 --- a/packages/fake-toss-payments-server/src/controllers/FakeTossPaymentsController.ts +++ b/packages/fake-toss-payments-server/src/controllers/FakeTossPaymentsController.ts @@ -54,7 +54,7 @@ export class FakeTossPaymentsController { * 필요한 때 대비, 훨씬 더 세심한 주의가 요구된다. * * 더하여 만약 귀하의 백엔드 서버가 `fake-toss-payments-server` 를 이용하여 고객의 - * 카드 결제를 시뮬레이션하는 경우, {@link ITossCardPayment.IStore.__approved} 값을 + * 카드 결제를 시뮬레이션하는 경우, {@link ITossCardPayment.ICreate.__approved} 값을 * `false` 로 하여 카드 결제의 확정을 고의로 회피할 수 있다. 이를 통하여 토스 * 페이먼츠의 결제 창을 이용한 카드 결제의 경우, 별도의 {@link approve} 가 필요한 * 상황을 시뮬레이션 할 수 있다. @@ -68,7 +68,7 @@ export class FakeTossPaymentsController { @core.TypedRoute.Post("key-in") public key_in( @FakeTossUserAuth() _0: void, - @core.TypedBody() input: ITossCardPayment.IStore, + @core.TypedBody() input: ITossCardPayment.ICreate, ): ITossCardPayment { const payment: ITossCardPayment = { ...FakeTossPaymentProvider.get_common_props(input), @@ -104,8 +104,8 @@ export class FakeTossPaymentsController { * 함수이다. * * 만일 귀하가 `fake-toss-payments-server` 를 이용하여 결제를 시뮬레이션하는 경우라면, - * 결제 관련 API 를 호출함에 있어 {@link ITossCardPayment.IStore.__approved} 내지 - * {@link ITossVirtualAccountPayment.IStore.__approved} 를 `false` 로 함으로써, 별도 + * 결제 관련 API 를 호출함에 있어 {@link ITossCardPayment.ICreate.__approved} 내지 + * {@link ITossVirtualAccountPayment.ICreate.__approved} 를 `false` 로 함으로써, 별도 * 승인이 필요한 이러한 상황을 시뮬레이션 할 수 있다. * * @param paymentKey 대상 결제의 {@link ITossPayment.paymentKey} @@ -138,7 +138,7 @@ export class FakeTossPaymentsController { * * `payments.cancel` 은 결제를 취소하는 API 이다. * - * 결제 취소 입력 정보 {@link ITossPaymentCancel.IStore} 에는 취소 사유를 비롯하여, + * 결제 취소 입력 정보 {@link ITossPaymentCancel.ICreate} 에는 취소 사유를 비롯하여, * 고객에게 환불해 줄 금액과 부가세 및 필요시 환불 계좌 정보 등을 입력하게 되어있다. * * @param paymentKey 결제 정보의 {@link ITossPayment.paymentKey} @@ -152,7 +152,7 @@ export class FakeTossPaymentsController { public cancel( @FakeTossUserAuth() _0: void, @core.TypedParam("paymentKey") paymentKey: string, - @core.TypedBody() input: ITossPaymentCancel.IStore, + @core.TypedBody() input: ITossPaymentCancel.ICreate, ): ITossPayment { const payment: ITossPayment = FakeTossStorage.payments.get(paymentKey); const amount: number = input.cancelAmount ?? payment.totalAmount; diff --git a/packages/fake-toss-payments-server/src/controllers/FakeTossVirtualAccountsController.ts b/packages/fake-toss-payments-server/src/controllers/FakeTossVirtualAccountsController.ts index 4ccb737..b644a17 100644 --- a/packages/fake-toss-payments-server/src/controllers/FakeTossVirtualAccountsController.ts +++ b/packages/fake-toss-payments-server/src/controllers/FakeTossVirtualAccountsController.ts @@ -14,17 +14,17 @@ export class FakeTossVirtualAccountsController { /** * 가상 계좌로 결제 신청하기. * - * `virtual_accounts.store` 는 고객이 결제 수단을 가상 계좌로 선택하는 경우에 호출되는 + * `virtual_accounts.create` 는 고객이 결제 수단을 가상 계좌로 선택하는 경우에 호출되는 * API 함수이다. 물론 고객이 이처럼 가상 계좌를 선택한 경우, 고객이 지정된 계좌에 돈을 * 입금하기 전까지는 결제가 마무리된 것이 아니기에, {@link ITossPayment.status} 값은 * `WAITING_FOR_DEPOSIT` 이 된다. * - * 참고로 `virtual_accounts.store` 는 클라이언트 어플리케이션이 토스 페이먼츠가 + * 참고로 `virtual_accounts.create` 는 클라이언트 어플리케이션이 토스 페이먼츠가 * 자체적으로 제공하는 결제 창을 사용하는 경우, 귀하의 백엔드 서버가 이를 실 서비스에서 * 호출하는 일은 없을 것이다. 다만, 고객이 가상 계좌로 결제를 진행하는 상황을 * 시뮬레이션하기 위하여, 테스트 자동화 프로그램 수준에서 사용될 수는 있다. * - * 그리고 `virtual_accounts.store` 이후에 고객이 지정된 계좌에 금액을 입금하거든, 토스 + * 그리고 `virtual_accounts.create` 이후에 고객이 지정된 계좌에 금액을 입금하거든, 토스 * 페이먼츠 서버로부터 웹훅 이벤트가 발생되어 귀하의 백엔드 서버로 전송된다. 만약 연동 * 대상 토스 페이먼츠 서버가 실제가 아닌 `fake-toss-payments-server` 라면, * {@link internal.virtual_accounts.deposit} 를 호출하여, 고객이 가상 계좌에 입금하는 @@ -37,9 +37,9 @@ export class FakeTossVirtualAccountsController { * @author Samchon */ @core.TypedRoute.Post() - public store( + public create( @FakeTossUserAuth() _0: void, - @core.TypedBody() input: ITossVirtualAccountPayment.IStore, + @core.TypedBody() input: ITossVirtualAccountPayment.ICreate, ): ITossVirtualAccountPayment { const payment: ITossVirtualAccountPayment = { ...FakeTossPaymentProvider.get_common_props(input), diff --git a/packages/fake-toss-payments-server/src/providers/FakeTossPaymentProvider.ts b/packages/fake-toss-payments-server/src/providers/FakeTossPaymentProvider.ts index 2cb7a58..09d368d 100644 --- a/packages/fake-toss-payments-server/src/providers/FakeTossPaymentProvider.ts +++ b/packages/fake-toss-payments-server/src/providers/FakeTossPaymentProvider.ts @@ -2,7 +2,7 @@ import { ITossPayment } from "toss-payments-server-api/lib/structures/ITossPayme import { v4 } from "uuid"; export namespace FakeTossPaymentProvider { - export function get_common_props(input: ITossPayment.IStore) { + export function get_common_props(input: ITossPayment.ICreate) { return { mId: "tosspayments", version: "1.3", diff --git a/packages/fake-toss-payments-server/src/providers/FakeTossStorage.ts b/packages/fake-toss-payments-server/src/providers/FakeTossStorage.ts index 5c472fe..7506bd0 100644 --- a/packages/fake-toss-payments-server/src/providers/FakeTossStorage.ts +++ b/packages/fake-toss-payments-server/src/providers/FakeTossStorage.ts @@ -12,7 +12,7 @@ export namespace FakeTossStorage { ); export const billings: VolatileMap< string, - [ITossBilling, ITossBilling.IStore] + [ITossBilling, ITossBilling.ICreate] > = new VolatileMap(FakeTossConfiguration.EXPIRATION); export const cash_receipts: VolatileMap = new VolatileMap(FakeTossConfiguration.EXPIRATION); diff --git a/packages/fake-toss-payments-server/test/features/test_fake_billing_payment.ts b/packages/fake-toss-payments-server/test/features/test_fake_billing_payment.ts index 1464466..30d5322 100644 --- a/packages/fake-toss-payments-server/test/features/test_fake_billing_payment.ts +++ b/packages/fake-toss-payments-server/test/features/test_fake_billing_payment.ts @@ -11,7 +11,7 @@ import { TestConnection } from "../internal/TestConnection"; export async function test_fake_billing_payment(): Promise { // 간편 결제 카드 등록하기 const billing: ITossBilling = - await toss.functional.v1.billing.authorizations.card.store( + await toss.functional.v1.billing.authorizations.card.create( TestConnection.FAKE, { customerKey: "some-consumer-key", diff --git a/packages/fake-toss-payments-server/test/features/test_fake_card_payment.ts b/packages/fake-toss-payments-server/test/features/test_fake_card_payment.ts index 4721841..0317a8f 100644 --- a/packages/fake-toss-payments-server/test/features/test_fake_card_payment.ts +++ b/packages/fake-toss-payments-server/test/features/test_fake_card_payment.ts @@ -20,7 +20,7 @@ export async function test_fake_card_payment(): Promise { // 결제 창을 이용하여 직접 결제를 진행하는 경우, 백엔드 서버에서 이를 별도 승인 // 처리해주기 전까지 정식 결제로 인정치 아니함. // - // 때문에 {@link ITossCardPayment.IStore.__approved} 값을 `false` 로 하여, + // 때문에 {@link ITossCardPayment.ICreate.__approved} 값을 `false` 로 하여, // 백엔드에서 해당 결제 요청 건에 대하여 별도의 승인 처리가 필요한 상황을 고의로 만듦. const payment: ITossCardPayment = await toss.functional.v1.payments.key_in( TestConnection.FAKE, diff --git a/packages/fake-toss-payments-server/test/features/test_fake_cash_receipt.ts b/packages/fake-toss-payments-server/test/features/test_fake_cash_receipt.ts index 10e6e2d..bc00c3a 100644 --- a/packages/fake-toss-payments-server/test/features/test_fake_cash_receipt.ts +++ b/packages/fake-toss-payments-server/test/features/test_fake_cash_receipt.ts @@ -12,7 +12,7 @@ export async function test_fake_cash_receipt(): Promise { const payment: ITossVirtualAccountPayment = await test_fake_virtual_account_payment(); const receipt: ITossCashReceipt = - await toss.functional.v1.cash_receipts.store(TestConnection.FAKE, { + await toss.functional.v1.cash_receipts.create(TestConnection.FAKE, { type: "소득공제", paymentKey: payment.paymentKey, orderId: payment.orderId, diff --git a/packages/fake-toss-payments-server/test/features/test_fake_storage_capacity.ts b/packages/fake-toss-payments-server/test/features/test_fake_storage_capacity.ts index 8d87468..a1796ae 100644 --- a/packages/fake-toss-payments-server/test/features/test_fake_storage_capacity.ts +++ b/packages/fake-toss-payments-server/test/features/test_fake_storage_capacity.ts @@ -24,7 +24,7 @@ export async function test_fake_storage_capacity(): Promise { // GENERATE RANDOM BILLING const customerKey: string = v4(); const billing: ITossBilling = - await toss.functional.v1.billing.authorizations.card.store( + await toss.functional.v1.billing.authorizations.card.create( TestConnection.FAKE, { customerKey, diff --git a/packages/fake-toss-payments-server/test/features/test_fake_virtual_account_payment.ts b/packages/fake-toss-payments-server/test/features/test_fake_virtual_account_payment.ts index 7253949..74f6f9c 100644 --- a/packages/fake-toss-payments-server/test/features/test_fake_virtual_account_payment.ts +++ b/packages/fake-toss-payments-server/test/features/test_fake_virtual_account_payment.ts @@ -24,10 +24,10 @@ export async function test_fake_virtual_account_payment(): Promise", - "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":"6.0.0","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 create } 나 혹은 아임포트가 제공하는\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.ICreate"}}},"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.create` 는 클라이언트 어플리케이션이 아임포트가 제공하는\n간편 결제 카드 등록 창을 사용하는 경우, 귀하의 백엔드 서버가 이를 실 서비스에서 호출하는\n일은 없을 것이다. 다만, 고객이 간편 결제 카드를 등록하는 상황을 시뮬레이션하기 위하여,\n테스트 자동화 프로그램 수준에서 사용될 수는 있다.","security":[{"bearer":[]}],"x-nestia-namespace":"subscribe.customers.create","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.create } 와 {@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.ICreate"}}},"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.ICreate"}}},"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.ICreate"}}},"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.create","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.ICreate"}}},"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.create","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.ICreate":{"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.ICreate":{"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.ICreate":{"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.ICreate":{"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.ICreate":{"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/README.md b/packages/payment-api/README.md index a1fc890..21bf5f2 100644 --- a/packages/payment-api/README.md +++ b/packages/payment-api/README.md @@ -87,8 +87,8 @@ export async function test_api_toss_vbank_payment( * {@link IPaymentHistory} 등록에 사용하도록 하자. */ const payment: ITossPayment = - await toss.functional.v1.virtual_accounts.store( - await TossAsset.connection("test-toss-payments-store-id"), + await toss.functional.v1.virtual_accounts.create( + await TossAsset.connection("test-toss-payments-create-id"), { // 가상 계좌 정보 method: "virtual-account", @@ -128,10 +128,10 @@ export async function test_api_toss_vbank_payment( * 조회할 때 필요하니, 이를 반드시 귀하의 백엔드 서버에 저장해두도록 한다. */ const history: IPaymentHistory = - await api.functional.payments.histories.store(connection, { + await api.functional.payments.histories.create(connection, { vendor: { code: "toss.payments", - store_id: "test-toss-payments-store-id", + store_id: "test-toss-payments-create-id", uid: payment.paymentKey, }, source: { @@ -154,7 +154,7 @@ export async function test_api_toss_vbank_payment( * 고객이 자신 앞을 발급된 계좌에, 결제 금액을 입금하는 상황 시뮬레이션. */ await toss.functional.internal.deposit( - await TossAsset.connection("test-toss-payments-store-id"), + await TossAsset.connection("test-toss-payments-create-id"), payment.paymentKey, ); diff --git a/packages/payment-api/package.json b/packages/payment-api/package.json index db7804d..f544f67 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": "6.0.0", "description": "API for Payment Backend", "main": "lib/index.js", "typings": "lib/index.d.ts", @@ -30,13 +30,13 @@ "devDependencies": { "rimraf": "^5.0.1", "ts-node": "^10.9.1", - "ts-patch": "^3.0.2", - "typescript": "^5.2.2" + "ts-patch": "^3.1.1", + "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.2", + "iamport-server-api": "^6.0.0", + "toss-payments-server-api": "^6.0.0", + "typia": "^5.3.4" } } \ No newline at end of file diff --git a/packages/payment-api/swagger.json b/packages/payment-api/swagger.json index 5016fb0..f69dae1 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":"6.0.0","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.ICreate"}}},"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.create","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.ICreate"}}},"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.ICreate"}}},"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.create","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.ICreate.vendor } +\n{@link IPaymentHistory.ICreate.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.ICreate":{"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.ICreate":{"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.ICreate":{"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/INFRASTRUCTURE.md b/packages/payment-backend/INFRASTRUCTURE.md index f655120..eff3b46 100644 --- a/packages/payment-backend/INFRASTRUCTURE.md +++ b/packages/payment-backend/INFRASTRUCTURE.md @@ -140,7 +140,7 @@ sudo sysctl net.core.somaxconn=2048 # BUILD PROJECT ################################ # CLONE REPOSITORY -git config --global credential.helper store +git config --global credential.helper create git clone https://github.com/samchon/payments cd ${PROJECT} diff --git a/packages/payment-backend/README.md b/packages/payment-backend/README.md index 40dfe93..79b0bce 100644 --- a/packages/payment-backend/README.md +++ b/packages/payment-backend/README.md @@ -91,8 +91,8 @@ export async function test_api_toss_vbank_payment( * {@link IPaymentHistory} 등록에 사용하도록 하자. */ const payment: ITossPayment = - await toss.functional.v1.virtual_accounts.store( - await TossAsset.connection("test-toss-payments-store-id"), + await toss.functional.v1.virtual_accounts.create( + await TossAsset.connection("test-toss-payments-create-id"), { // 가상 계좌 정보 method: "virtual-account", @@ -132,10 +132,10 @@ export async function test_api_toss_vbank_payment( * 조회할 때 필요하니, 이를 반드시 귀하의 백엔드 서버에 저장해두도록 한다. */ const history: IPaymentHistory = - await api.functional.payments.histories.store(connection, { + await api.functional.payments.histories.create(connection, { vendor: { code: "toss.payments", - store_id: "test-toss-payments-store-id", + store_id: "test-toss-payments-create-id", uid: payment.paymentKey, }, source: { @@ -158,7 +158,7 @@ export async function test_api_toss_vbank_payment( * 고객이 자신 앞을 발급된 계좌에, 결제 금액을 입금하는 상황 시뮬레이션. */ await toss.functional.internal.deposit( - await TossAsset.connection("test-toss-payments-store-id"), + await TossAsset.connection("test-toss-payments-create-id"), payment.paymentKey, ); @@ -365,8 +365,8 @@ export async function test_api_iamport_vbank_payment( * 다음 단계인 {@link IPaymentHistory} 등록에 사용하도록 하자. */ const payment: IIamportResponse = - await imp.functional.vbanks.store( - await IamportAsset.connection("test-iamport-store-id"), + await imp.functional.vbanks.create( + await IamportAsset.connection("test-iamport-create-id"), { merchant_uid: yourOrderId, amount: yourOrderPrice, @@ -399,10 +399,10 @@ export async function test_api_iamport_vbank_payment( * 조회할 때 필요하니, 이를 반드시 귀하의 백엔드 서버에 저장해두도록 한다. */ const history: IPaymentHistory = - await PaymentAPI.functional.payments.histories.store(connection, { + await PaymentAPI.functional.payments.histories.create(connection, { vendor: { code: "iamport", - store_id: "test-iamport-store-id", + store_id: "test-iamport-create-id", uid: payment.response.imp_uid, }, source: { @@ -425,7 +425,7 @@ export async function test_api_iamport_vbank_payment( * 고객이 자신 앞을 발급된 계좌에, 결제 금액을 입금하는 상황 시뮬레이션. */ await imp.functional.internal.deposit( - await IamportAsset.connection("test-iamport-store-id"), + await IamportAsset.connection("test-iamport-create-id"), payment.response.imp_uid, ); @@ -511,9 +511,9 @@ export async function test_fake_iamport_payment_webhook // 아임포트 가상 계좌 결제 시뮬레이션 const payment: IIamportResponse = - await imp.functional.vbanks.store + await imp.functional.vbanks.create ( - await IamportAsset.connection("test-iamport-store-id"), + await IamportAsset.connection("test-iamport-create-id"), { merchant_uid: yourOrderId, amount: yourOrderPrice, @@ -529,13 +529,13 @@ export async function test_fake_iamport_payment_webhook + payments.functional.internal.webhook.PATH; // 결제 이력 등록하기 - const history: IPaymentHistory = await payments.functional.histories.store + const history: IPaymentHistory = await payments.functional.histories.create ( connection, { vendor: { code: "iamport", - store_id: "test-iamport-store-id", + store_id: "test-iamport-create-id", uid: payment.response.imp_uid, }, source: { @@ -552,7 +552,7 @@ export async function test_fake_iamport_payment_webhook // 가상 계좌 입금 시뮬레이션 await imp.functional.internal.deposit ( - await IamportAsset.connection("test-iamport-store-id"), + await IamportAsset.connection("test-iamport-create-id"), payment.response.imp_uid ); diff --git a/packages/payment-backend/package.json b/packages/payment-backend/package.json index b762348..ced0246 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": "6.0.0", "description": "Payment Backend Server", "main": "lib/index.js", "typings": "lib/index.d.ts", @@ -53,7 +53,7 @@ }, "homepage": "https://github.com/samchon/payments", "devDependencies": { - "@nestia/sdk": "^2.3.9", + "@nestia/sdk": "^2.4.2", "@types/atob": "^2.1.2", "@types/bcryptjs": "^2.4.4", "@types/btoa": "^1.2.3", @@ -68,23 +68,23 @@ "cli": "^1.0.1", "copy-webpack-plugin": "^11.0.0", "copyfiles": "^2.4.1", - "iamport-server-api": "^5.1.4", + "iamport-server-api": "^6.0.0", "nestia": "^5.0.3", "pm2": "^4.5.6", "rimraf": "^3.0.2", "sloc": "^0.2.1", - "toss-payments-server-api": "^5.1.4", + "toss-payments-server-api": "^6.0.0", "ts-loader": "^9.5.0", "ts-node": "^10.9.1", - "ts-patch": "^3.0.2", - "typescript": "^5.2.2", + "ts-patch": "^3.1.1", + "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.2", "@nestjs/common": "^10.2.8", "@nestjs/core": "^10.2.8", "@nestjs/platform-fastify": "^10.2.8", @@ -92,8 +92,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": "^6.0.0", + "fake-toss-payments-server": "^6.0.0", "fastify": "^4.24.3", "git-last-commit": "^1.0.0", "inquirer": "^8.2.5", @@ -103,7 +103,7 @@ "serialize-error": "^4.1.0", "source-map-support": "^0.5.19", "tstl": "^2.5.13", - "typia": "^5.2.6" + "typia": "^5.3.4" }, "files": [ "lib", diff --git a/packages/payment-backend/src/api/functional/payments/histories/index.ts b/packages/payment-backend/src/api/functional/payments/histories/index.ts index 169fbd3..0cdfc58 100644 --- a/packages/payment-backend/src/api/functional/payments/histories/index.ts +++ b/packages/payment-backend/src/api/functional/payments/histories/index.ts @@ -182,16 +182,16 @@ export namespace at { * @returns 결제 내역 * @author Samchon * - * @controller PaymentHistoriesController.store + * @controller PaymentHistoriesController.create * @path POST /payments/histories * @nestia Generated by Nestia - https://github.com/samchon/nestia */ -export async function store( +export async function create( connection: IConnection, - input: store.Input, -): Promise { + input: create.Input, +): Promise { return !!connection.simulate - ? store.simulate( + ? create.simulate( connection, input, ) @@ -204,14 +204,14 @@ export async function store( }, }, { - ...store.METADATA, - path: store.path(), + ...create.METADATA, + path: create.path(), } as const, input, ); } -export namespace store { - export type Input = Primitive; +export namespace create { + export type Input = Primitive; export type Output = Primitive; export const METADATA = { @@ -235,7 +235,7 @@ export namespace store { typia.random>(g); export const simulate = async ( connection: IConnection, - input: store.Input, + input: create.Input, ): Promise => { const assert = NestiaSimulator.assert({ method: METADATA.method, @@ -288,7 +288,7 @@ export async function cancel( ); } export namespace cancel { - export type Input = Primitive; + export type Input = Primitive; export type Output = Primitive; export const METADATA = { diff --git a/packages/payment-backend/src/api/functional/payments/reservations/index.ts b/packages/payment-backend/src/api/functional/payments/reservations/index.ts index 3201288..3b26894 100644 --- a/packages/payment-backend/src/api/functional/payments/reservations/index.ts +++ b/packages/payment-backend/src/api/functional/payments/reservations/index.ts @@ -178,16 +178,16 @@ export namespace at { * @param input 간편 결제 수단 입력 정보 * @returns 간편 결제 수단 정보 * - * @controller PaymentReservationsController.store + * @controller PaymentReservationsController.create * @path POST /payments/reservations * @nestia Generated by Nestia - https://github.com/samchon/nestia */ -export async function store( +export async function create( connection: IConnection, - input: store.Input, -): Promise { + input: create.Input, +): Promise { return !!connection.simulate - ? store.simulate( + ? create.simulate( connection, input, ) @@ -200,14 +200,14 @@ export async function store( }, }, { - ...store.METADATA, - path: store.path(), + ...create.METADATA, + path: create.path(), } as const, input, ); } -export namespace store { - export type Input = Primitive; +export namespace create { + export type Input = Primitive; export type Output = Primitive; export const METADATA = { @@ -231,7 +231,7 @@ export namespace store { typia.random>(g); export const simulate = async ( connection: IConnection, - input: store.Input, + input: create.Input, ): Promise => { const assert = NestiaSimulator.assert({ method: METADATA.method, diff --git a/packages/payment-backend/src/api/structures/payments/IPaymentCancelHistory.ts b/packages/payment-backend/src/api/structures/payments/IPaymentCancelHistory.ts index 09e390b..445b8f9 100644 --- a/packages/payment-backend/src/api/structures/payments/IPaymentCancelHistory.ts +++ b/packages/payment-backend/src/api/structures/payments/IPaymentCancelHistory.ts @@ -29,7 +29,7 @@ export namespace IPaymentCancelHistory { /** * 결제 취소 입력 정보. */ - export interface IStore { + export interface ICreate { /** * 결제의 근간이 된 원천 레코드 정보. */ diff --git a/packages/payment-backend/src/api/structures/payments/IPaymentHistory.ts b/packages/payment-backend/src/api/structures/payments/IPaymentHistory.ts index b92f881..0e8b8d1 100644 --- a/packages/payment-backend/src/api/structures/payments/IPaymentHistory.ts +++ b/packages/payment-backend/src/api/structures/payments/IPaymentHistory.ts @@ -10,8 +10,8 @@ import { IPaymentVendor } from "./IPaymentVendor"; * 결제 내역. * * `IPaymentHistory` 는 결제 내역을 형상화한 자료구조이자 유니언 타입의 인터페이이다. - * 서비스 시스템으로부 결제 사건의 귀속 정보 ({@link IPaymentHistory.IStore.vendor} + - * {@link IPaymentHistory.IStore.source}) 를 전달받아, 본 Payment 시스템이 PG 사에 + * 서비스 시스템으로부 결제 사건의 귀속 정보 ({@link IPaymentHistory.ICreate.vendor} + + * {@link IPaymentHistory.ICreate.source}) 를 전달받아, 본 Payment 시스템이 PG 사에 * 추가 정보를 취득하여 레코드가 완성된다. * * 그리고 만일 현 결제 건이 가상계좌와 같이 레코드 생성 시점에 지불이 이루어지지 않은 @@ -127,7 +127,7 @@ export namespace IPaymentHistory { * * SDK 에서 받은 데이터를 취합하여 결제 진행 상황을 서버에 알려준다. */ - export interface IStore { + export interface ICreate { /** * 벤더사 정보 */ diff --git a/packages/payment-backend/src/api/structures/payments/IPaymentReservation.ts b/packages/payment-backend/src/api/structures/payments/IPaymentReservation.ts index 046ede2..beefd4c 100644 --- a/packages/payment-backend/src/api/structures/payments/IPaymentReservation.ts +++ b/packages/payment-backend/src/api/structures/payments/IPaymentReservation.ts @@ -90,7 +90,7 @@ export namespace IPaymentReservation { * 식별자ㅏ 되니, 이를 {@link IPaymentVendor.uid} 와 {@link IPaymentSource.id} 에 * 모두 동일하게 할당해주면 된다. */ - export interface IStore { + export interface ICreate { /** * 벤더사 정보. */ diff --git a/packages/payment-backend/src/controllers/payments/PaymentHistoriesController.ts b/packages/payment-backend/src/controllers/payments/PaymentHistoriesController.ts index a3807a0..cda323b 100644 --- a/packages/payment-backend/src/controllers/payments/PaymentHistoriesController.ts +++ b/packages/payment-backend/src/controllers/payments/PaymentHistoriesController.ts @@ -55,10 +55,10 @@ export class PaymentHistoriesController { * @author Samchon */ @core.EncryptedRoute.Post() - public async store( - @core.EncryptedBody() input: IPaymentHistory.IStore, + public async create( + @core.EncryptedBody() input: IPaymentHistory.ICreate, ): Promise { - return PaymentHistoryProvider.store(input); + return PaymentHistoryProvider.create(input); } /** @@ -70,8 +70,8 @@ export class PaymentHistoriesController { */ @core.EncryptedRoute.Put("cancel") public async cancel( - @core.EncryptedBody() input: IPaymentCancelHistory.IStore, + @core.EncryptedBody() input: IPaymentCancelHistory.ICreate, ): Promise { - return PaymentCancelHistoryProvider.store(input); + return PaymentCancelHistoryProvider.create(input); } } diff --git a/packages/payment-backend/src/controllers/payments/PaymentReservationsController.ts b/packages/payment-backend/src/controllers/payments/PaymentReservationsController.ts index e95c96f..b7a8bae 100644 --- a/packages/payment-backend/src/controllers/payments/PaymentReservationsController.ts +++ b/packages/payment-backend/src/controllers/payments/PaymentReservationsController.ts @@ -47,9 +47,9 @@ export class PaymentReservationsController { * @returns 간편 결제 수단 정보 */ @core.EncryptedRoute.Post() - public async store( - @core.EncryptedBody() input: IPaymentReservation.IStore, + public async create( + @core.EncryptedBody() input: IPaymentReservation.ICreate, ): Promise { - return PaymentReservationProvider.store(input); + return PaymentReservationProvider.create(input); } } diff --git a/packages/payment-backend/src/providers/payments/PaymentCancelHistoryProvider.ts b/packages/payment-backend/src/providers/payments/PaymentCancelHistoryProvider.ts index 1faf3bd..a89b0b6 100644 --- a/packages/payment-backend/src/providers/payments/PaymentCancelHistoryProvider.ts +++ b/packages/payment-backend/src/providers/payments/PaymentCancelHistoryProvider.ts @@ -32,8 +32,8 @@ export namespace PaymentCancelHistoryProvider { >()({}); } - export const store = async ( - input: IPaymentCancelHistory.IStore, + export const create = async ( + input: IPaymentCancelHistory.ICreate, ): Promise => { const history: IPaymentHistory = await PaymentHistoryProvider.find({ source_schema: input.source.schema, @@ -60,7 +60,7 @@ export namespace PaymentCancelHistoryProvider { const request = (history: IPaymentHistory) => async ( - input: IPaymentCancelHistory.IStore, + input: IPaymentCancelHistory.ICreate, ): Promise => { if (history.vendor_code === "iamport") { const payment: IIamportPayment = await IamportPaymentService.cancel( diff --git a/packages/payment-backend/src/providers/payments/PaymentHistoryProvider.ts b/packages/payment-backend/src/providers/payments/PaymentHistoryProvider.ts index 6c391e6..c68d0f2 100644 --- a/packages/payment-backend/src/providers/payments/PaymentHistoryProvider.ts +++ b/packages/payment-backend/src/providers/payments/PaymentHistoryProvider.ts @@ -109,8 +109,8 @@ export namespace PaymentHistoryProvider { /* ----------------------------------------------------------- STORE ----------------------------------------------------------- */ - export async function store( - input: IPaymentHistory.IStore, + export async function create( + input: IPaymentHistory.ICreate, ): Promise { const props = await approve(input); const history = await PaymentGlobal.prisma.payment_histories.create({ @@ -172,7 +172,7 @@ export namespace PaymentHistoryProvider { }; async function approve( - input: IPaymentHistory.IStore, + input: IPaymentHistory.ICreate, ): Promise { if (input.vendor.code === "iamport") { const data: IIamportPayment = await IamportPaymentService.approve( diff --git a/packages/payment-backend/src/providers/payments/PaymentReservationProvider.ts b/packages/payment-backend/src/providers/payments/PaymentReservationProvider.ts index af064b5..3f48822 100644 --- a/packages/payment-backend/src/providers/payments/PaymentReservationProvider.ts +++ b/packages/payment-backend/src/providers/payments/PaymentReservationProvider.ts @@ -62,8 +62,8 @@ export namespace PaymentReservationProvider { return json.transform(reservation); }; - export async function store( - input: IPaymentReservation.IStore, + export async function create( + input: IPaymentReservation.ICreate, ): Promise { const data = input.vendor.code === "toss.payments" @@ -89,7 +89,7 @@ export namespace PaymentReservationProvider { } async function get_iamport_subscription( - input: IPaymentReservation.IStore, + input: IPaymentReservation.ICreate, ): Promise { const { response } = await imp.functional.subscribe.customers.at( await IamportAsset.connection(input.vendor.store_id), @@ -99,7 +99,7 @@ export namespace PaymentReservationProvider { } async function get_toss_billing( - input: IPaymentReservation.IStore, + input: IPaymentReservation.ICreate, ): Promise { return toss.functional.v1.billing.authorizations.at( await TossAsset.connection(input.vendor.store_id), diff --git a/packages/payment-backend/src/services/iamport/IamportPaymentService.ts b/packages/payment-backend/src/services/iamport/IamportPaymentService.ts index 7f7a079..46d1ac5 100644 --- a/packages/payment-backend/src/services/iamport/IamportPaymentService.ts +++ b/packages/payment-backend/src/services/iamport/IamportPaymentService.ts @@ -70,7 +70,7 @@ export namespace IamportPaymentService { export async function cancel( storeId: string, - input: IIamportPaymentCancel.IStore, + input: IIamportPaymentCancel.ICreate, ): Promise { const reply = await imp.functional.payments.cancel( await IamportAsset.connection(storeId), diff --git a/packages/payment-backend/src/services/toss/TossPaymentBillingService.ts b/packages/payment-backend/src/services/toss/TossPaymentBillingService.ts index 8e03494..d0d4c35 100644 --- a/packages/payment-backend/src/services/toss/TossPaymentBillingService.ts +++ b/packages/payment-backend/src/services/toss/TossPaymentBillingService.ts @@ -5,11 +5,11 @@ import { ITossPayment } from "toss-payments-server-api/lib/structures/ITossPayme import { TossAsset } from "./TossAsset"; export namespace TossPaymentBillingService { - export async function store( + export async function create( mid: string, - input: ITossBilling.IStore, + input: ITossBilling.ICreate, ): Promise { - return toss.functional.v1.billing.authorizations.card.store( + return toss.functional.v1.billing.authorizations.card.create( await TossAsset.connection(mid), input, ); diff --git a/packages/payment-backend/src/services/toss/TossPaymentCardService.ts b/packages/payment-backend/src/services/toss/TossPaymentCardService.ts index c41f329..c5c9376 100644 --- a/packages/payment-backend/src/services/toss/TossPaymentCardService.ts +++ b/packages/payment-backend/src/services/toss/TossPaymentCardService.ts @@ -4,9 +4,9 @@ import { ITossCardPayment } from "toss-payments-server-api/lib/structures/ITossC import { TossAsset } from "./TossAsset"; export namespace TossPaymentCardService { - export async function store( + export async function create( mid: string, - input: ITossCardPayment.IStore, + input: ITossCardPayment.ICreate, ): Promise { return toss.functional.v1.payments.key_in( await TossAsset.connection(mid), diff --git a/packages/payment-backend/src/services/toss/TossPaymentService.ts b/packages/payment-backend/src/services/toss/TossPaymentService.ts index b4550fb..36c78c4 100644 --- a/packages/payment-backend/src/services/toss/TossPaymentService.ts +++ b/packages/payment-backend/src/services/toss/TossPaymentService.ts @@ -73,20 +73,20 @@ export namespace TossPaymentService { /* ---------------------------------------------------------------- API ---------------------------------------------------------------- */ - export function store( + export function create( storeId: string, - input: ITossPayment.IStore, + input: ITossPayment.ICreate, ): Promise { if (input.method === "billing") return TossPaymentBillingService.pay(storeId, input); else if (input.method === "card") - return TossPaymentCardService.store(storeId, input); - else return TossPaymentVirtualAccountService.store(storeId, input); + return TossPaymentCardService.create(storeId, input); + else return TossPaymentVirtualAccountService.create(storeId, input); } export async function cancel( storeId: string, - input: ITossPaymentCancel.IStore, + input: ITossPaymentCancel.ICreate, ): Promise { return toss.functional.v1.payments.cancel( await TossAsset.connection(storeId), diff --git a/packages/payment-backend/src/services/toss/TossPaymentVirtualAccountService.ts b/packages/payment-backend/src/services/toss/TossPaymentVirtualAccountService.ts index 1151442..5811d32 100644 --- a/packages/payment-backend/src/services/toss/TossPaymentVirtualAccountService.ts +++ b/packages/payment-backend/src/services/toss/TossPaymentVirtualAccountService.ts @@ -4,11 +4,11 @@ import { ITossVirtualAccountPayment } from "toss-payments-server-api/lib/structu import { TossAsset } from "./TossAsset"; export namespace TossPaymentVirtualAccountService { - export async function store( + export async function create( storeId: string, - input: ITossVirtualAccountPayment.IStore, + input: ITossVirtualAccountPayment.ICreate, ): Promise { - return toss.functional.v1.virtual_accounts.store( + return toss.functional.v1.virtual_accounts.create( await TossAsset.connection(storeId), input, ); diff --git a/packages/payment-backend/test/features/iamport/test_api_iamport_card_payment.ts b/packages/payment-backend/test/features/iamport/test_api_iamport_card_payment.ts index 9d6b2a8..fb51a9b 100644 --- a/packages/payment-backend/test/features/iamport/test_api_iamport_card_payment.ts +++ b/packages/payment-backend/test/features/iamport/test_api_iamport_card_payment.ts @@ -41,7 +41,7 @@ export async function test_api_iamport_card_payment( */ const payment: IIamportResponse = await imp.functional.subscribe.payments.onetime( - await IamportAsset.connection("test-iamport-store-id"), + await IamportAsset.connection("test-iamport-create-id"), { card_number: "1234-1234-1234-1234", expiry: "2028-12", @@ -67,10 +67,10 @@ export async function test_api_iamport_card_payment( * 조회할 때 필요하니, 이를 반드시 귀하의 백엔드 서버에 저장해두도록 한다. */ const history: IPaymentHistory = - await PaymentAPI.functional.payments.histories.store(connection, { + await PaymentAPI.functional.payments.histories.create(connection, { vendor: { code: "iamport", - store_id: "test-iamport-store-id", + store_id: "test-iamport-create-id", uid: payment.response.imp_uid, }, source: { diff --git a/packages/payment-backend/test/features/iamport/test_api_iamport_subscription_payment.ts b/packages/payment-backend/test/features/iamport/test_api_iamport_subscription_payment.ts index edcade9..9c5ef0e 100644 --- a/packages/payment-backend/test/features/iamport/test_api_iamport_subscription_payment.ts +++ b/packages/payment-backend/test/features/iamport/test_api_iamport_subscription_payment.ts @@ -39,8 +39,8 @@ export async function test_api_iamport_subscription_payment( * 두었다가, 이를 다음 단계인 {@link IPaymentReservation} 등록에 사용하도록 하자. */ const subscription: IIamportResponse = - await imp.functional.subscribe.customers.store( - await IamportAsset.connection("test-iamport-store-id"), + await imp.functional.subscribe.customers.create( + await IamportAsset.connection("test-iamport-create-id"), yourSourceId, { customer_uid: yourSourceId, @@ -65,10 +65,10 @@ export async function test_api_iamport_subscription_payment( * 한다. */ const reservation: IPaymentReservation = - await PaymentAPI.functional.payments.reservations.store(connection, { + await PaymentAPI.functional.payments.reservations.create(connection, { vendor: { code: "iamport", - store_id: "test-iamport-store-id", + store_id: "test-iamport-create-id", uid: yourSourceId, }, source: { diff --git a/packages/payment-backend/test/features/iamport/test_api_iamport_vbank_payment.ts b/packages/payment-backend/test/features/iamport/test_api_iamport_vbank_payment.ts index a285213..b81b47a 100644 --- a/packages/payment-backend/test/features/iamport/test_api_iamport_vbank_payment.ts +++ b/packages/payment-backend/test/features/iamport/test_api_iamport_vbank_payment.ts @@ -44,8 +44,8 @@ export async function test_api_iamport_vbank_payment( * 다음 단계인 {@link IPaymentHistory} 등록에 사용하도록 하자. */ const payment: IIamportResponse = - await imp.functional.vbanks.store( - await IamportAsset.connection("test-iamport-store-id"), + await imp.functional.vbanks.create( + await IamportAsset.connection("test-iamport-create-id"), { merchant_uid: yourOrderId, amount: yourOrderPrice, @@ -78,10 +78,10 @@ export async function test_api_iamport_vbank_payment( * 조회할 때 필요하니, 이를 반드시 귀하의 백엔드 서버에 저장해두도록 한다. */ const history: IPaymentHistory = - await PaymentAPI.functional.payments.histories.store(connection, { + await PaymentAPI.functional.payments.histories.create(connection, { vendor: { code: "iamport", - store_id: "test-iamport-store-id", + store_id: "test-iamport-create-id", uid: payment.response.imp_uid, }, source: { @@ -104,7 +104,7 @@ export async function test_api_iamport_vbank_payment( * 고객이 자신 앞을 발급된 계좌에, 결제 금액을 입금하는 상황 시뮬레이션. */ await imp.functional.internal.deposit( - await IamportAsset.connection("test-iamport-store-id"), + await IamportAsset.connection("test-iamport-create-id"), payment.response.imp_uid, ); diff --git a/packages/payment-backend/test/features/toss/test_api_toss_card_payment.ts b/packages/payment-backend/test/features/toss/test_api_toss_card_payment.ts index 3b7f8fb..be7d6d5 100644 --- a/packages/payment-backend/test/features/toss/test_api_toss_card_payment.ts +++ b/packages/payment-backend/test/features/toss/test_api_toss_card_payment.ts @@ -51,7 +51,7 @@ export async function test_api_toss_card_payment( * {@link IPaymentHistory} 등록에 사용하도록 하자. */ const payment: ITossPayment = await toss.functional.v1.payments.key_in( - await TossAsset.connection("test-toss-payments-store-id"), + await TossAsset.connection("test-toss-payments-create-id"), { // 카드 정보 method: "card", @@ -94,10 +94,10 @@ export async function test_api_toss_card_payment( * 조회할 때 필요하니, 이를 반드시 귀하의 백엔드 서버에 저장해두도록 한다. */ const history: IPaymentHistory = - await api.functional.payments.histories.store(connection, { + await api.functional.payments.histories.create(connection, { vendor: { code: "toss.payments", - store_id: "test-toss-payments-store-id", + store_id: "test-toss-payments-create-id", uid: payment.paymentKey, }, source: { diff --git a/packages/payment-backend/test/features/toss/test_api_toss_subscription_payment.ts b/packages/payment-backend/test/features/toss/test_api_toss_subscription_payment.ts index c010cd5..75e65b2 100644 --- a/packages/payment-backend/test/features/toss/test_api_toss_subscription_payment.ts +++ b/packages/payment-backend/test/features/toss/test_api_toss_subscription_payment.ts @@ -35,8 +35,8 @@ export async function test_api_toss_subscription_payment( * 단계인 {@link IPaymentReservation} 등록에 사용하도록 하자. */ const billing: ITossBilling = - await toss.functional.v1.billing.authorizations.card.store( - await TossAsset.connection("test-toss-payments-store-id"), + await toss.functional.v1.billing.authorizations.card.create( + await TossAsset.connection("test-toss-payments-create-id"), { customerKey: yourSourceId, cardNumber: "1111222233334444", @@ -74,10 +74,10 @@ export async function test_api_toss_subscription_payment( * 결제 수단을 조회할 때 필요하니, 이를 반드시 귀하의 백엔드 서버에 저장해두도록 한다. */ const reservation: IPaymentReservation = - await api.functional.payments.reservations.store(connection, { + await api.functional.payments.reservations.create(connection, { vendor: { code: "toss.payments", - store_id: "test-toss-payments-store-id", + store_id: "test-toss-payments-create-id", uid: billing.billingKey, }, source: { diff --git a/packages/payment-backend/test/features/toss/test_api_toss_vbank_payment.ts b/packages/payment-backend/test/features/toss/test_api_toss_vbank_payment.ts index 45c8a09..85e1d5b 100644 --- a/packages/payment-backend/test/features/toss/test_api_toss_vbank_payment.ts +++ b/packages/payment-backend/test/features/toss/test_api_toss_vbank_payment.ts @@ -42,23 +42,24 @@ export async function test_api_toss_vbank_payment( * {@link ITossPayment.orderId yourOrderId} 를 잘 기억해두었다가, 이를 다음 단계인 * {@link IPaymentHistory} 등록에 사용하도록 하자. */ - const payment: ITossPayment = await toss.functional.v1.virtual_accounts.store( - await TossAsset.connection("test-toss-payments-store-id"), - { - // 가상 계좌 정보 - method: "virtual-account", - bank: "신한", - customerName: "Samchon", + const payment: ITossPayment = + await toss.functional.v1.virtual_accounts.create( + await TossAsset.connection("test-toss-payments-create-id"), + { + // 가상 계좌 정보 + method: "virtual-account", + bank: "신한", + customerName: "Samchon", - // 주문 정보 - orderId: yourOrderId, - orderName: "something", - amount: yourOrderPrice, + // 주문 정보 + orderId: yourOrderId, + orderName: "something", + amount: yourOrderPrice, - // 고의 미승인 처리 - __approved: false, - }, - ); + // 고의 미승인 처리 + __approved: false, + }, + ); typia.assert(payment); /** @@ -83,10 +84,10 @@ export async function test_api_toss_vbank_payment( * 조회할 때 필요하니, 이를 반드시 귀하의 백엔드 서버에 저장해두도록 한다. */ const history: IPaymentHistory = - await api.functional.payments.histories.store(connection, { + await api.functional.payments.histories.create(connection, { vendor: { code: "toss.payments", - store_id: "test-toss-payments-store-id", + store_id: "test-toss-payments-create-id", uid: payment.paymentKey, }, source: { @@ -109,7 +110,7 @@ export async function test_api_toss_vbank_payment( * 고객이 자신 앞을 발급된 계좌에, 결제 금액을 입금하는 상황 시뮬레이션. */ await toss.functional.internal.deposit( - await TossAsset.connection("test-toss-payments-store-id"), + await TossAsset.connection("test-toss-payments-create-id"), payment.paymentKey, ); diff --git a/packages/payment-backend/tsconfig.json b/packages/payment-backend/tsconfig.json index 1b51f60..2688c54 100644 --- a/packages/payment-backend/tsconfig.json +++ b/packages/payment-backend/tsconfig.json @@ -16,7 +16,7 @@ "outDir": "./lib", /* Redirect output structure to the directory. */ // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ // "composite": true, /* Enable project compilation */ - // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ + // "tsBuildInfoFile": "./", /* Specify file to create incremental compilation information */ "removeComments": true, /* Do not emit comments to output. */ // "noEmit": true, /* Do not emit outputs. */ // "importHelpers": true, /* Import emit helpers from 'tslib'. */ diff --git a/packages/toss-payments-server-api/package.json b/packages/toss-payments-server-api/package.json index a810115..bdc1fbc 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": "6.0.0", "description": "API for Toss Payments Server", "main": "lib/index.js", "typings": "lib/index.d.ts", @@ -30,11 +30,11 @@ "devDependencies": { "rimraf": "^5.0.1", "ts-node": "^10.9.1", - "ts-patch": "^3.0.2", - "typescript": "^5.2.2" + "ts-patch": "^3.1.1", + "typescript": "^5.3.2" }, "dependencies": { - "@nestia/fetcher": "^2.3.9", - "typia": "^5.2.6" + "@nestia/fetcher": "^2.4.2", + "typia": "^5.3.4" } } \ 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..121b6e8 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":"6.0.0","license":{"name":"MIT"}},"paths":{"/v1/billing/authorizations/card":{"post":{"tags":[],"parameters":[],"requestBody":{"description":"간편 결제 카드 등록 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ITossBilling.ICreate"}}},"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.create` 는 고객이 자신의 신록 카드를 서버에 등록해두고,\n매번 결제가 필요할 때마다 카드 정보를 반복 입력하는 일 없이 간편하게 결제를\n진행하고자 할 때, 호출되는 API 함수이다.\n\n참고로 `billing.authorizations.card.create` 는 클라이언트 어플리케이션이 토스\n페이먼츠가 제공하는 간편 결제 카드 등록 창을 사용하는 경우, 귀하의 백엔드 서버가 이를\n실 서비스에서 호출하는 일은 없을 것이다. 다만, 고객이 간편 결제 카드를 등록하는\n상황을 시뮬레이션하기 위하여, 테스트 자동화 프로그램 수준에서 사용될 수는 있다.","security":[{"basic":[]}],"x-nestia-namespace":"v1.billing.authorizations.card.create","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.ICreate"}}},"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.create","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.ICreate.__approved } 내지\n{@link ITossVirtualAccountPayment.ICreate.__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.ICreate"}}},"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.ICreate.__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.ICreate"}}},"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.ICreate } 에는 취소 사유를 비롯하여,\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.ICreate"}}},"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.create` 는 고객이 결제 수단을 가상 계좌로 선택하는 경우에 호출되는\nAPI 함수이다. 물론 고객이 이처럼 가상 계좌를 선택한 경우, 고객이 지정된 계좌에 돈을\n입금하기 전까지는 결제가 마무리된 것이 아니기에, {@link ITossPayment.status } 값은\n`WAITING_FOR_DEPOSIT` 이 된다.\n\n참고로 `virtual_accounts.create` 는 클라이언트 어플리케이션이 토스 페이먼츠가\n자체적으로 제공하는 결제 창을 사용하는 경우, 귀하의 백엔드 서버가 이를 실 서비스에서\n호출하는 일은 없을 것이다. 다만, 고객이 가상 계좌로 결제를 진행하는 상황을\n시뮬레이션하기 위하여, 테스트 자동화 프로그램 수준에서 사용될 수는 있다.\n\n그리고 `virtual_accounts.create` 이후에 고객이 지정된 계좌에 금액을 입금하거든, 토스\n페이먼츠 서버로부터 웹훅 이벤트가 발생되어 귀하의 백엔드 서버로 전송된다. 만약 연동\n대상 토스 페이먼츠 서버가 실제가 아닌 `fake-toss-payments-server` 라면,\n{@link internal.virtual_accounts.deposit } 를 호출하여, 고객이 가상 계좌에 입금하는\n상황을 시뮬레이션 할 수 있다.","security":[{"basic":[]}],"x-nestia-namespace":"v1.virtual-accounts.create","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.ICreate":{"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.ICreate":{"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.ICreate":{"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.ICreate":{"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.ICreate":{"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