UNPKG

medusa-payment-tosspayments

Version:
326 lines (325 loc) 15.9 kB
type CardType = "신용" | "체크" | "기프트" | "미확인"; type OwnerType = "개인" | "법인" | "미확인"; /** * 카드 결제의 매입 상태입니다. 아래와 같은 상태 값을 가질 있습니다. * * READY: 아직 매입 요청이 상태입니다. * REQUEST: 매입이 요청된 상태입니다. * COMPLETED: 요청된 매입이 완료된 상태입니다. * CANCEL_REQUESTED: 매입 취소가 요청된 상태입니다. * CANCELED: 요청된 매입 취소가 완료된 상태입니다. */ type AcquireStatus = "READY" | "REQUESTED" | "COMPLETED" | "CANCEL_REQUESTED" | "CANCELED"; /** * 할부가 적용된 결제에서 할부 수수료를 부담하는 주체입니다. BUYER, CARD_COMPANY, MERCHANT 하나입니다. * * BUYER: 상품을 구매한 고객이 할부 수수료를 부담합니다. 일반적인 할부 결제입니다. * CARD_COMPANY: 카드사에서 할부 수수료를 부담합니다. 무이자 할부 결제입니다. * MERCHANT: 상점에서 할부 수수료를 부담합니다. 무이자 할부 결제입니다. */ type InterestPayer = "BUYER" | "CARD_COMPANY" | "MERCHANT"; /** * 카드로 결제하면 제공되는 카드 관련 정보입니다. * * amount: 카드사에 결제 요청한 금액입니다. 즉시 할인 금액(discount.amount)이 포함됩니다. * issuerCode: 카드 발급사 숫자 코드입니다. 카드사 코드를 참고하세요. * acquirerCode: 카드 매입사 숫자 코드입니다. 카드사 코드를 참고하세요. * number: 카드번호입니다. 번호의 일부는 마스킹 되어 있습니다. 최대 길이는 20자입니다. * installmentPlanMonths: 할부 개월 수입니다. 일시불이면 0입니다. * approveNo: 카드사 승인 번호입니다. 최대 길이는 8자입니다. * useCardPoint: 카드사 포인트 사용 여부입니다. 일반 카드사 포인트가 아닌, 특수한 포인트나 바우처를 사용하면 할부 개월 수가 변경되어 응답이 돌아오니 유의해주세요. * cardType: 카드 종류입니다. * ownerType: 카드의 소유자 타입입니다. * acquireStatus: 카드 결제의 매입 상태입니다. * isInterestFree: 무이자 할부의 적용 여부입니다. * interestPayer: 할부가 적용된 결제에서 할부 수수료를 부담하는 주체입니다. */ type Card = { amount: number; issuerCode: string; acquirerCode?: string; number: string; installmentPlanMonths: number; approveNo: string; useCardPoint: boolean; cardType: CardType; ownerType: OwnerType; acquireStatus: AcquireStatus; isInterestFree: boolean; interestPayer?: InterestPayer; }; /** * 환불 처리 상태입니다. 아래와 같은 상태 값을 가질 있습니다. * * NONE: 환불 요청이 없는 상태입니다. * PENDING: 환불을 처리 중인 상태입니다. * FAILED: 환불에 실패한 상태입니다. * PARTIAL_FAILED: 부분 환불에 실패한 상태입니다. * COMPLETED: 환불이 완료된 상태입니다. */ type RefundStatus = "NONE" | "PENDING" | "FAILED" | "PARTIAL_FAILED" | "COMPLETED"; type SettlementStatus = "INCOMPLETED" | "COMPLETED"; type RefundReceiveAccount = { bankCode: string; accountNumber: string; holderName: string; }; /** * 가상계좌로 결제하면 제공되는 가상계좌 관련 정보입니다. * * accountType: 가상계좌 타입을 나타냅니다. 일반, 고정 하나입니다. * accountNumber: 발급된 계좌번호입니다. 최대 길이는 20자입니다. * bankCode: 가상계좌 은행 숫자 코드입니다. 은행 코드와 증권사 코드를 참고하세요. * customerName: 가상계좌를 발급한 구매자명입니다. 최대 길이는 100자입니다. * dueDate: 입금 기한입니다. yyyy-MM-dd'T'HH:mm:ss ISO 8601 형식을 사용합니다. * refundStatus: 환불 처리 상태입니다. * expired: 가상계좌의 만료 여부입니다. * settlementStatus: 정산 상태입니다. * refundReceiveAccount?: 결제위젯 가상계좌 환불 정보 입력 기능으로 받은 고객의 환불 계좌 정보입니다. */ type VirtualAccount = { accountType: "일반" | "고정"; accountNumber: string; bankCode: string; customerName: string; dueDate: string; refundStatus: RefundStatus; expired: boolean; settlementStatus: SettlementStatus; refundReceiveAccount?: RefundReceiveAccount; }; /** * 휴대폰으로 결제하면 제공되는 휴대폰 결제 관련 정보입니다. * * customerMobilePhone: 구매자가 결제에 사용한 휴대폰 번호입니다. * settlementStatus: 정산 상태입니다. * receiptUrl: 휴대폰 결제 내역 영수증을 확인할 있는 주소입니다. */ type MobilePhone = { customerMobilePhone: string; settlementStatus: SettlementStatus; receiptUrl: string; }; /** * 상품권으로 결제하면 제공되는 상품권 결제 관련 정보입니다. * * approveNo: 결제 승인번호입니다. 최대 길이는 8자입니다. * settlementStatus: 정산 상태입니다. */ type GiftCertificate = { approveNo: string; settlementStatus: SettlementStatus; }; /** * 계좌이체로 결제했을 이체 정보가 담기는 객체입니다. * * bankCode: 은행 숫자 코드입니다. * settlementStatus: 정산 상태입니다. */ type Transfer = { bankCode: string; settlementStatus: SettlementStatus; }; /** * 발행된 영수증 정보입니다. * * url: 고객에게 제공할 있는 결제수단별 영수증입니다. 카드 결제는 매출전표, 가상계좌는 무통장 거래 명세서, 계좌이체・휴대폰・상품권 결제는 결제 거래 내역 확인서가 제공됩니다. */ type Receipt = { url: string; }; /** * 결제창 정보입니다. * * url: 결제창이 열리는 주소입니다. */ type Checkout = { url: string; }; /** * 간편결제 정보입니다. 고객이 선택한 결제수단에 따라 amount, discountAmount가 달라집니다. 간편결제 응답 확인 가이드를 참고하세요. * * provider: 선택한 간편결제사 코드입니다. * amount: 간편결제 서비스에 등록된 계좌 혹은 현금성 포인트로 결제한 금액입니다. * discountAmount: 간편결제 서비스의 적립 포인트나 쿠폰 등으로 즉시 할인된 금액입니다. */ type EasyPay = { provider: string; amount: number; discountAmount: number; }; /** * 결제 승인에 실패하면 응답으로 받는 에러 객체입니다. 실패한 결제를 조회할 확인할 있습니다. * * code: 오류 타입을 보여주는 에러 코드입니다. * message: 에러 메시지입니다. 에러 발생 이유를 알려줍니다. 최대 길이는 510자입니다. */ type Failure = { code: string; message: string; }; /** * 현금영수증 정보입니다. * * type: 현금영수증의 종류입니다. 소득공제, 지출증빙 하나입니다. * receiptKey: 현금영수증의 값입니다. 최대 길이는 200자입니다. * issuerNumber: 현금영수증 발급 번호입니다. 최대 길이는 9자입니다. * receiptUrl: 발행된 현금영수증을 확인할 있는 주소입니다. * amount: 현금영수증 처리된 금액입니다. * taxFreeAmount: 면세 처리된 금액입니다. */ type CashReceipt = { type: "소득공제" | "지출증빙" | "미발행"; receiptKey: string; issuerNumber: string; receiptUrl: string; amount: number; taxFreeAmount: number; }; /** * 현금영수증 발행 취소 이력이 담기는 배열입니다. 순서는 보장되지 않습니다. 예를 들어 결제 부분 취소가 여러 일어나면 모든 결제 부분 취소 건에 대한 현금영수증 정보를 담고 있습니다. * 계좌이체는 결제 즉시 현금영수증 정보를 확인할 있습니다. 가상계좌는 고객이 입금을 완료하면 현금영수증 정보를 확인할 있습니다. * 결제가 이미 승인된 현금영수증 발급 요청 API로 발급한 현금영수증은 먼저 처리된 결제 정보와 연결되지 않아 값이 null입니다. 현금영수증 조회 API로 조회해주세요. * 현금영수증 가맹점이라면 결제했을 바로 발급됩니다. 발급을 원하지 않는다면 토스페이먼츠 고객센터(1544-7772, support@tosspayments.com)로 문의해주세요. * * receiptKey: 현금영수증의 값입니다. 최대 길이는 200자입니다. * orderId: 주문번호입니다. 최소 길이는 6자, 최대 길이는 64자입니다. 주문한 결제를 식별하는 역할로, 결제를 요청할 가맹점에서 만들어서 사용합니다. 결제 데이터 관리를 위해 반드시 저장해야 합니다. 중복되지 않는 고유한 값을 발급해야 합니다. 결제 상태가 변해도 값이 유지됩니다. * orderName: 구매상품입니다. 예를 들면 생수 1 같은 형식입니다. 최대 길이는 100자입니다. * type: 현금영수증의 종류입니다. * issueNumber: 현금영수증 발급 번호입니다. 최대 길이는 9자입니다. * receiptUrl: 발행된 현금영수증을 확인할 있는 주소입니다. * businessNumber: 현금영수증을 발급한 사업자등록번호입니다. 길이는 10자입니다. * transactionType: 현금영수증 발급 종류입니다. 현금영수증 발급(CONFIRM)·취소(CANCEL) 건을 구분합니다. * amount: 현금영수증 처리된 금액입니다. * taxFreeAmount: 면세 처리된 금액입니다. * issueStatus: 현금영수증 발급 상태입니다. * failure: 결제 실패 객체입니다. * customerIdentityNumber: 현금영수증 발급에 필요한 소비자 인증수단입니다. 현금영수증을 발급한 주체를 식별합니다. 최대 길이는 30자입니다. 현금영수증 종류에 따라 휴대폰 번호, 사업자등록번호, 현금영수증 카드 번호 등을 입력할 있습니다. * requestedAt: 현금영수증 발급 혹은 취소를 요청한 날짜와 시간 정보입니다. yyyy-MM-dd'T'HH:mm:ss±hh:mm ISO 8601 형식입니다. (e.g. 2022-01-01T00:00:00+09:00) */ type CashReceipts = { receiptKey: string; orderId: string; orderName: string; type: "소득공제" | "지출증빙" | "미발행"; issueNumber: string; receiptUrl: string; businessNumber: string; transactionType: "CONFIRM" | "CANCEL"; amount: number; taxFreeAmount: number; issueStatus: "IN_PROGRESS" | "COMPLETED" | "FAILED"; failure: Failure; customerIdentityNumber: string; requestedAt: string; }; /** * 카드사의 즉시 할인 프로모션 정보입니다. 즉시 할인 프로모션이 적용됐을 때만 생성됩니다. * * amount: 카드사의 즉시 할인 프로모션을 적용한 금액입니다. */ type Discount = { amount: number; }; /** * 결제 처리 상태입니다. 아래와 같은 상태 값을 가질 있습니다. 상태 변화 흐름이 궁금하다면 흐름도를 살펴보세요. * * READY: 결제를 생성하면 가지게 되는 초기 상태입니다. 인증 전까지는 READY 상태를 유지합니다. * IN_PROGRESS: 결제수단 정보와 해당 결제수단의 소유자가 맞는지 인증을 마친 상태입니다. 결제 승인 API를 호출하면 결제가 완료됩니다. * WAITING_FOR_DEPOSIT: 가상계좌 결제 흐름에만 있는 상태로, 결제 고객이 발급된 가상계좌에 입금하는 것을 기다리고 있는 상태입니다. * DONE: 인증된 결제수단 정보, 고객 정보로 요청한 결제가 승인된 상태입니다. * CANCELED: 승인된 결제가 취소된 상태입니다. * PARTIAL_CANCELED: 승인된 결제가 부분 취소된 상태입니다. * ABORTED: 결제 승인이 실패한 상태입니다. * EXPIRED: 결제 유효 시간 30분이 지나 거래가 취소된 상태입니다. IN_PROGRESS 상태에서 결제 승인 API를 호출하지 않으면 EXPIRED가 됩니다. */ export type PaymentStatus = "READY" | "IN_PROGRESS" | "WAITING_FOR_DEPOSIT" | "DONE" | "CANCELED" | "PARTIAL_CANCELED" | "ABORTED" | "EXPIRED"; /** * 결제수단입니다. 카드, 가상계좌, 간편결제, 휴대폰, 계좌이체, 문화상품권, 도서문화상품권, 게임문화상품권 하나입니다. */ type PaymentMethod = "카드" | "가상계좌" | "간편결제" | "휴대폰" | "계좌이체" | "문화상품권" | "도서문화상품권" | "게임문화상품권"; /** * 결제 타입 정보입니다. * * NORMAL: 일반결제 * BILLING: 자동결제 * BRANDPAY: 브랜드페이 */ type PaymentType = "NORMAL" | "BILLING" | "BRANDPAY"; /** * 결제 취소 이력입니다. * * cancelAmount: 결제를 취소한 금액입니다. * cancelReason: 결제를 취소한 이유입니다. 최대 길이는 200자입니다. * taxFreeAmount: 취소된 금액 면세 금액입니다. * taxExemptionAmount: 취소된 금액 과세 제외 금액(컵 보증금 등)입니다. * refundableAmount: 결제 취소 환불 가능한 잔액입니다. * easyPayDiscountAmount: 간편결제 서비스의 포인트, 쿠폰, 즉시할인과 같은 적립식 결제수단에서 취소된 금액입니다. * canceledAt: 결제 취소가 일어난 날짜와 시간 정보입니다. yyyy-MM-dd'T'HH:mm:ss±hh:mm ISO 8601 형식입니다.(e.g. 2022-01-01T00:00:00+09:00) * transactionKey: 취소 건의 값입니다. 여러 건의 취소 거래를 구분하는 사용됩니다. 최대 길이는 64자입니다. * receiptKey?: 취소 건의 현금영수증 값입니다. 최대 길이는 200자입니다. * cancelStatus: 취소 상태입니다. DONE이면 결제가 성공적으로 취소된 상태입니다. * cancelRequestid?: 취소 요청 ID입니다. 비동기 결제에만 적용되는 특수 값입니다. 일반결제, 자동결제(빌링), 페이팔 해외결제에서는 항상 null입니다. */ type Cancels = { cancelAmount: number; cancelReason: string; taxFreeAmount: number; taxExemptionAmount: number; refundableAmount: number; easyPayDiscountAmount: number; canceledAt: string; transactionKey: string; receiptKey?: string; cancelStatus: string; cancelRequestid?: string; }; /** * 결제 정보를 담고 있는 객체입니다. 결제 건의 결제 상태, 결제 취소 기록, 매출 전표, 현금영수증 정보 등을 자세히 있습니다. * 결제가 승인됐을 응답은 Payment 객체로 항상 동일합니다. 객체의 구성은 결제수단(카드, 가상계좌, 간편결제 등)에 따라 조금씩 달라집니다. */ export interface Payment { version: string; paymentKey: string; type: PaymentType; orderId: string; orderName: string; mId: string; currency: string; method: PaymentMethod; totalAmount: number; balanceAmount: number; status: PaymentStatus; requestedAt: string; approvedAt: string; useEscrow: boolean; lastTransactionKey?: string; suppliedAmount: number; vat: number; cultureExpense: boolean; taxFreeAmount: number; taxExemptionAmount: number; cancels?: Cancels; isPartialCancelable: boolean; card?: Card; virtualAccount?: VirtualAccount; secret?: string; mobilePhone?: MobilePhone; giftCertificate?: GiftCertificate; transfer?: Transfer; receipt?: Receipt; checkout?: Checkout; easyPay?: EasyPay; country: string; failure?: Failure; cashReceipt?: CashReceipt; cashReceipts?: CashReceipts[]; discount?: Discount; } export interface PaymentWithVirtualAccount extends Payment { virtualAccount: VirtualAccount; } export interface PaymentWithCard extends Payment { card: Card; } export {};