UNPKG

react-native-toss-payments

Version:

리액트 네이티브용 토스페이먼츠 결제 연동 라이브러리

328 lines (309 loc) 20.1 kB
export type TossPaymentApproveTypes = { paymentKey: string; orderId: string; amount: number; }; export type TossPaymentSuccessMessageFromWebTypes = { type: 'success'; data: TossPaymentApproveTypes; }; export type TossPaymentFailMessageFromWebTypes = { type: 'fail'; data: TossPaymentFailMessageTypes; }; export type TossPaymentResultMessageTypes = | TossPaymentFailMessageFromWebTypes | TossPaymentSuccessMessageFromWebTypes; export type TossPaymentFailMessageTypes = { /** * @description 결제 요청에 실패했을 때 failUrl로 전달되는 에러 목록입니다. * @see https://docs.tosspayments.com/reference/error-codes#failurl%EB%A1%9C-%EC%A0%84%EB%8B%AC%EB%90%98%EB%8A%94-%EC%97%90%EB%9F%AC * * PAY_PROCESS_CANCELED - 사용자에 의해 결제가 취소되었습니다. * PAY_PROCESS_ABORTED - 결제 진행 중 승인에 실패하여 결제가 중단되었습니다. * REJECT_CARD_COMPANY - 결제 승인이 거절되었습니다. */ code: 'PAY_PROCESS_CANCELED' | 'PAY_PROCESS_ABORTED' | 'REJECT_CARD_COMPANY'; message: string; orderId: string; }; /** * @description 계좌이체로 결제했을 때 이체 정보가 담기는 객체입니다. */ export type TossPaymentReceiptTransferTypes = { /** * @description 이체할 은행입니다. 은행 코드를 참고하세요. * @see https://docs.tosspayments.com/reference/codes#%EC%9D%80%ED%96%89-%EC%BD%94%EB%93%9C */ bank: string; settlementStatus: 'INCOMPLETE' | 'COMPLETE'; // 정산 상태입니다. 정산이 아직 되지 않았다면 INCOMPLETE, 정산이 완료됐다면 COMPLETE 값이 들어옵니다. }; /** * @description 휴대폰으로 결제하면 제공되는 휴대폰 결제 관련 정보입니다. */ export type TossPaymentReceiptMobilePhoneTypes = { customerMobilePhone: string; // 결제에 사용한 휴대폰 번호입니다. settlementStatus: 'INCOMPLETE' | 'COMPLETE'; // 정산 상태입니다. 정산이 아직 되지 않았다면 INCOMPLETE, 정산이 완료됐다면 COMPLETE 값이 들어옵니다. receiptUrl: string; // 휴대폰 결제 내역 영수증을 확인할 수 있는 주소입니다. }; /** * @description 상품권으로 결제하면 제공되는 상품권 결제 관련 정보입니다. */ export type TossPaymentReceiptGiftCertificateTypes = { approveNo: string; // 결제 승인번호입니다. 최대 길이는 8자입니다. settlementStatus: 'INCOMPLETE' | 'COMPLETE'; // 정산 상태입니다. 정산이 아직 되지 않았다면 INCOMPLETE, 정산이 완료됐다면 COMPLETE 값이 들어옵니다. }; /** * @description 현금영수증 정보입니다. */ export type TossPaymentReceiptCashReceiptTypes = { type: '소득공제' | '지출증빙'; // 현금영수증의 종류입니다. 소득공제, 지출증빙 중 하나의 값입니다. amount: number; // 현금영수증 처리된 금액입니다. taxFreeAmount: number; // 면세 처리된 금액입니다. issueNumber: string; // 현금영수증 발급 번호입니다. 최대 길이는 9자 이하여야 합니다. receiptUrl: string; // 발행된 현금영수증을 확인할 수 있는 주소입니다. }; /** * @description 카드사의 즉시 할인 프로모션 정보입니다. 즉시 할인 프로모션이 적용됐을 때만 생성됩니다. */ export type TossPaymentReceiptDiscountTypes = { amount: number; // 카드사의 즉시 할인 프로모션을 적용한 금액입니다. }; /** * @description 결제 취소 이력이 담기는 배열입니다. */ export type TossPaymentReceiptCancelTypes = { cancelAmount: number; // 결제를 취소한 금액입니다. cancelReason: string; // 결제를 취소한 이유입니다. 최대 길이는 200자입니다. taxFreeAmount: number; // 취소된 금액 중 면세 금액입니다. taxAmount: number | null; // 과세 처리된 금액입니다. refundableAmount: number; // 결제 취소 후 환불 가능한 잔액입니다. canceledAt: string; // 결제 취소가 일어난 날짜와 시간 정보입니다. ISO 8601 형식인 yyyy-MM-dd'T'HH:mm:ss±hh:mm입니다. (e.g. 2022-01-01T00:00:00+09:00) transactionKey: string; // 취소 건에 대한 고유한 키 값입니다. 여러 건의 취소 거래를 구분하는데 사용됩니다. 최대 길이는 64자입니다. }; /** * @description 간편결제로 결제한 정보를 담은 객체입니다. */ export type TossPaymentReceiptEasyPayTypes = { /** * @description 간편결제 서비스 ENUM 코드입니다. * @see https://docs.tosspayments.com/reference/enum-codes#%EA%B0%84%ED%8E%B8%EA%B2%B0%EC%A0%9C-%EC%84%9C%EB%B9%84%EC%8A%A4 * TOSSPAY - 토스페이 * NAVERPAY - 네이버페이 * SAMSUNGPAY - 삼성페이 * LPAY - 엘페이 * KAKAOPAY - 카카오페이 * PAYCO - 페이코 * LGPAY - LG페이 * SSG - SSG페이 */ provider: | 'TOSSPAY' | 'NAVERPAY' | 'SAMSUNGPAY' | 'LPAY' | 'KAKAOPAY' | 'PAYCO' | 'LGPAY' | 'SSG'; amount: number; // 간편결제 서비스에 등록된 카드, 계좌 중 하나로 결제한 금액입니다. discountAmount: number; // 간편결제 서비스의 적립 포인트나 쿠폰 등을 사용해서 즉시 할인된 금액입니다. }; /** * @description 결제 실패 정보입니다. */ export type TossPaymentReceiptFailureTypes = { code: string; // 오류 타입을 보여주는 에러 코드입니다. message: string; // 에러 메시지입니다. 에러 발생 이유를 알려줍니다. 최대 길이는 200자입니다. }; /** * @description 가상계좌로 결제하면 제공되는 가상계좌 관련 정보입니다. */ export type TossPaymentReceiptVirtualAccountTypes = { accountType: '일반' | '고정'; // 가상계좌 타입을 나타냅니다. 일반, 고정 중 하나입니다. accountNumber: string; // 발급된 계좌 번호입니다. 최대 길이는 20자입니다. bank: string; // 가상계좌를 발급한 은행입니다. customerName: string; // 가상계좌를 발급한 고객 이름입니다. 최대 길이는 100자입니다. dueDate: string; // 입금 기한입니다. refundStatus: 'NONE' | 'FAILED' | 'PENDING' | 'PARTIAL_FAILED' | 'COMPLETED'; /** * 환불처리 상태입니다. 아래와 같은 상태값을 가질 수 있습니다. * NONE - 해당 없음 * FAILED - 환불 실패 * PENDING - 환불 처리중 * PARTIAL_FAILED - 부분환불 실패 * COMPLETED - 환불 완료 */ expired: boolean; // 가상계좌가 만료되었는지 여부입니다. settlementStatus: 'INCOMPLETE' | 'INCOMPLETE'; // 정산 상태입니다. 정산이 아직 되지 않았다면 INCOMPLETE, 정산이 완료됐다면 COMPLETE 값이 들어옵니다. }; /** * @description 카드로 결제하면 제공되는 카드 관련 정보입니다. */ export type TossPaymentReceiptCardTypes = { company: string; // 카드사 코드입니다. number: string; // 카드번호입니다. 번호의 일부는 마스킹 되어 있습니다. 최대 길이는 20자입니다. installmentPlanMonths: number; // 할부 개월 수입니다. 일시불인 경우 0입니다. isInterestFree: boolean; // 무이자 할부의 적용 여부입니다. interestPayer: 'BUYER' | 'CARD_COMPANY' | 'MERCHANT'; /** * 무이자 할부가 적용된 결제일 때 할부 수수료를 부담하는 주체에 대한 정보입니다. BUYER, CARD_COMPANY, MERCHANT 중 하나입니다. * BUYER - 상품을 구매한 고객 * CARD_COMPANY - 카드사 * MERCHANT - 상점 */ approveNo: string; // 카드사 승인 번호입니다. 최대 길이는 8자입니다. useCardPoint: boolean; // 카드사 포인트를 사용했는지 여부입니다. cardType: '신용' | '체크' | '기프트'; // 카드 종류입니다. 신용, 체크, 기프트 중 하나입니다. ownerType: '개인' | '법인'; // 카드의 소유자 타입입니다. 개인, 법인 중 하나입니다. acquireStatus: | 'READY' | 'REQUESTED' | 'COMPLETED' | 'CANCEL_REQUESTED' | 'CANCELED'; /** * 카드 결제의 매입 상태입니다. 아래와 같은 상태값을 가질 수 있습니다. * READY - 매입 대기 * REQUESTED - 매입 요청됨 * COMPLETED - 매입 완료 * CANCEL_REQUESTED - 매입 취소 요청됨 * CANCELED - 매입 취소 완료 */ receiptUrl: string; // 카드 매출 전표를 확인할 수 있는 주소입니다. amount: number; // 카드로 결제한 금액입니다. }; export type TossPaymentReceiptTypes = { mId: string; // 상점아이디(MID)입니다. 토스페이먼츠에서 상점을 구분하기 위해 발급한 고유 ID입니다. 최대 길이는 14자입니다. transactionKey: string; // 거래 건에 대한 고유한 키 값입니다. 결제 한 건에 대한 승인 거래와 취소 거래를 구분하는데 사용됩니다. 최대 길이는 64자입니다. lastTransactionKey: string; // 마지막 거래 건에 대한 고유한 키 값입니다. 결제 한 건에 대한 승인 거래와 취소 거래를 구분하는데 사용됩니다. 예를 들어 결제 승인 후 부분 취소를 두 번 했다면 마지막 부분 취소 거래 건에 대한 키 값이 할당됩니다. 최대 길이는 64자입니다. paymentKey: string; // 결제 건에 대한 고유한 키 값입니다. 최대 길이는 200자입니다. orderId: string; // 상점에서 주문 건을 구분하기 위해 발급한 고유 ID입니다. 최소 길이는 6자, 최대 길이는 64자입니다. orderName: string; // 결제에 대한 주문명입니다. 예를 들면 생수 외 1건 같은 형식입니다. 최대 길이는 100자입니다. status: | 'READY' | 'DONE' | 'IN_PROGRESS' | 'WAITING_FOR_DEPOSIT' | 'CANCELED' | 'PARTIAL_CANCELED' | 'EXPIRED' | 'ABORTED'; /** * 결제 처리 상태입니다. 아래와 같은 상태값을 가질 수 있습니다. * READY - 준비됨 * IN_PROGRESS - 진행중 * WAITING_FOR_DEPOSIT - 가상계좌 입금 대기 중 * DONE - 결제 완료됨 * CANCELED - 결제가 취소됨 * PARTIAL_CANCELED - 결제가 부분 취소됨 * ABORTED - 카드 자동 결제 혹은 키인 결제를 할 때 결제 승인에 실패함 * EXPIRED - 유효 시간(30분)이 지나 거래가 취소됨 */ requestedAt: string; // 결제 요청이 일어난 날짜와 시간 정보입니다. ISO 8601 형식인 yyyy-MM-dd'T'HH:mm:ss.SSS±hh:mm으로 돌아옵니다. (e.g. 2022-01-01T00:00:00+09:00) approvedAt: string; // 결제 승인이 일어난 날짜와 시간 정보입니다. ISO 8601 형식인 yyyy-MM-dd'T'HH:mm:ss.SSS±hh:mm으로 돌아옵니다. (e.g. 2022-01-01T00:00:00+09:00) useEscrow: boolean; // 에스크로 사용 여부입니다. cultureExpense: boolean; // 문화비로 지출했는지 여부입니다. (도서구입, 공연 티켓, 박물관·미술관 입장권 등) // 카드로 결제하면 제공되는 카드 관련 정보입니다. card: TossPaymentReceiptCardTypes | null; // 카드로 결제하면 제공되는 카드 관련 정보입니다. virtualAccount: TossPaymentReceiptVirtualAccountTypes | null; // 가상계좌로 결제하면 제공되는 가상계좌 관련 정보입니다. transfer: TossPaymentReceiptTransferTypes | null; // 계좌이체로 결제했을 때 이체 정보가 담기는 객체입니다. mobilePhone: TossPaymentReceiptMobilePhoneTypes | null; // 휴대폰으로 결제하면 제공되는 휴대폰 결제 관련 정보입니다. giftCertificate: TossPaymentReceiptGiftCertificateTypes | null; // 상품권으로 결제하면 제공되는 상품권 결제 관련 정보입니다. cashReceipt: TossPaymentReceiptCashReceiptTypes | null; // 현금영수증 정보입니다. discount: TossPaymentReceiptDiscountTypes | null; // 카드사의 즉시 할인 프로모션 정보입니다. 즉시 할인 프로모션이 적용됐을 때만 생성됩니다. cancels: TossPaymentReceiptCancelTypes[] | null; // 결제 취소 이력이 담기는 배열입니다. /** * @description 가상계좌 웹훅 요청이 정상적인 요청인지 검증하기 위한 값입니다. 이 값이 가상계좌 웹훅 이벤트 본문으로 돌아온 secret과 같으면 정상적인 요청입니다. 최대 길이는 50자 이하여야 합니다. * @see https://docs.tosspayments.com/guides/webhook#%EC%9D%BC%EB%B0%98-%EA%B2%B0%EC%A0%9C---%EA%B0%80%EC%83%81%EA%B3%84%EC%A2%8C */ secret: string; type: 'NORMAL' | 'BILLING' | 'BRANDPAY'; // 결제 타입 정보입니다. NORMAL(일반 결제), BILLING(자동 결제), BRANDPAY(브랜드페이) 중 하나입니다. easyPay: TossPaymentReceiptEasyPayTypes | null; // 간편결제로 결제한 정보를 담은 객체입니다. /** * @description 결제한 국가 정보입니다. ISO-3166의 두 자리 국가 코드 형식입니다. * @see https://ko.wikipedia.org/wiki/ISO_3166-1_alpha-2 */ country: 'KR'; failure: TossPaymentReceiptFailureTypes | null; // 결제 실패 정보입니다. isPartialCancelable: boolean; // 부분 취소 가능 여부입니다. 이 값이 false이면 전액 취소만 가능합니다. receipt: { // 발행된 영수증 정보입니다. url: string; // 영수증을 확인할 수 있는 주소입니다. }; /** * @description 토스에서 정의되지않은 변수입니다. 추측상 결제상태를 조회하는 URL로 보입니다. */ checkout: { url: string; // 결제상태를 조회하는 URL }; currency: 'KRW'; // 결제할 때 사용한 통화 단위입니다. 원화인 KRW만 사용합니다. totalAmount: number; // 총 결제 금액입니다. balanceAmount: number; // 취소할 수 있는 금액(잔고)입니다. suppliedAmount: number; // 공급가액입니다. /** * @description 부가세입니다. (결제 금액 amount - 면세 금액 taxFreeAmount) / 11 후 소수점 첫째 자리에서 반올림해서 계산합니다. (e.g. 결제 금액이 10,000원이고, 면세 금액이 3,000원이라면 부가세는 (10000-3000)/11 = 636.3636..을 반올림한 값 636원입니다.) * @see https://docs.tosspayments.com/guides/tax */ vat: number; /** * @description 전체 결제 금액 중 면세 금액입니다. 값이 0으로 돌아왔다면 전체 결제 금액이 과세 대상입니다. [일반 상점일 때는 모든 결제 금액이 과세에 해당하기 때문에 0이 돌아옵니다. 면세 상점, 복합 과세 상점일 때만 면세 금액이 돌아옵니다. 더 자세한 내용은 복합 과세 처리하기에서 살펴보세요.] * @see https://docs.tosspayments.com/guides/tax */ taxFreeAmount: number; method: '카드' | '가상계좌' | '휴대폰' | '계좌이체' | '상품권' | '간편결제'; // 결제할 때 사용한 결제 수단입니다. 카드, 가상계좌, 휴대폰, 계좌이체, 상품권(문화상품권, 도서문화상품권, 게임문화상품권), 간편결제 중 하나입니다. version: string; // Payment 객체의 응답 버전입니다. 버전 2022-06-08부터 날짜 기반 버저닝을 사용합니다. }; export type TossPaymentRequestDataTypes = { amount: number; // 결제되는 금액입니다. orderId: string; // 상점에서 주문 건을 구분하기 위해 발급한 고유 ID입니다. 영문 대소문자, 숫자, 특수문자 -, _, =로 이루어진 6자 이상 64자 이하의 문자열이어야 합니다. orderName: string; // 결제에 대한 주문명입니다. 예를 들면 생수 외 1건 같은 형식입니다. 최대 길이는 100자입니다. successUrl: string; // 결제가 성공하고 나면 리다이렉트(Redirect)되는 URL입니다. 결제 승인 처리에 필요한 값들이 쿼리 파라미터(Query Parameter)로 함께 전달됩니다. 반드시 오리진(origin)을 포함해야 합니다. 예를 들면 https://www.example.com/success와 같은 형태입니다. failUrl: string; //결제가 실패하면 리다이렉트되는 URL입니다. 에러 코드 및 에러 메시지가 쿼리 파라미터로 함께 전송됩니다. 반드시 오리진(origin)을 포함해야 합니다. /** * @description 카드사 코드입니다. 값이 있으면 카드사가 고정된 상태로 결제창이 열립니다. 예를 들어, BC라는 값을 주면 BC카드로 고정된 결제창이 열립니다. 카드사 코드를 참조하세요. * @see https://docs.tosspayments.com/reference/codes#%EC%B9%B4%EB%93%9C%EC%82%AC-%EC%BD%94%EB%93%9C */ cardCompany?: string; /** * @description 할부 개월 수를 고정해 결제창을 열 때 사용합니다. 결제 금액(amount)이 5만원 이상일 때만 사용할 수 있습니다. * 2부터 12사이의 값을 사용할 수 있고, 0이 들어가는 경우 할부가 아닌 일시불로 결제됩니다. * 값을 넣지 않으면 결제창에서 전체 할부 개월 수를 선택할 수 있습니다. */ cardInstallmentPlan?: number; /** * @description 선택할 수 있는 최대 할부 개월 수를 제한하기 위해 사용합니다. 결제 금액(amount)이 5만원 이상일 때만 사용할 수 있습니다. * 2부터 12사이의 값을 사용할 수 있고, 0이 들어가는 경우 할부가 아닌 일시불로 결제됩니다. 만약 값을 6으로 설정한다면 결제창에서 일시불~6개월 사이로 할부 개월을 선택할 수 있습니다. * 할부 개월 수를 고정하는 cardInstallmentPlan와 같이 사용할 수 없습니다. */ maxCardInstallmentPlan?: number; useCardPoint?: boolean; // 카드사 포인트를 사용했는지 여부입니다. 값을 주지 않으면 사용자가 카드사 포인트 사용 여부를 결정할 수 있습니다. 이 값을 true로 주면 카드사 포인트 사용이 체크된 상태로 결제창이 열립니다. 이 값을 false로 주면 사용자는 카드사 포인트를 사용할 수 없습니다. useAppCardOnly?: boolean; // 카드사 앱카드로만 결제할지 여부를 결정합니다. 이 값을 true로 주면 카드사의 앱카드 결제창만 열립니다.카드사가 국민, 농협, 롯데, 삼성, 신한, 현대인 경우에만 true 값을 사용할 수 있습니다. useInternationalCardOnly?: boolean; // 해외카드(Visa, MasterCard, UnionPay)로 결제할 지 여부입니다. 값이 true면 해외카드 결제가 가능한 영문 결제창이 열립니다. flowMode?: 'DIRECT' | 'DEFAULT'; // 값으로 DIRECT를 넣고 cardCompany 파라미터 값을 채우면 결제창의 약관 동의, 카드 선택 페이지를 건너뛰고 특정 카드사의 결제로 바로 연결됩니다. DEFAULT, DIRECT 중 하나의 값이 들어올 수 있습니다. /** * @description 간편결제 결제 수단 타입입니다. flowMode 값이 DIRECT여야 합니다. * @see https://docs.tosspayments.com/reference/enum-codes#%EA%B0%84%ED%8E%B8%EA%B2%B0%EC%A0%9C-%EC%84%9C%EB%B9%84%EC%8A%A4 * TOSSPAY - 토스페이 * NAVERPAY - 네이버페이 * SAMSUNGPAY - 삼성페이 * LPAY - 엘페이 * KAKAOPAY - 카카오페이 * PAYCO - 페이코 * LGPAY - LG페이 * SSG - SSG페이 */ easyPay?: | 'TOSSPAY' | 'NAVERPAY' | 'SAMSUNGPAY' | 'LPAY' | 'KAKAOPAY' | 'PAYCO' | 'LGPAY' | 'SSG'; appScheme?: string; // 모바일 ISP 앱에서 상점 앱으로 돌아오기 위해 사용됩니다. 상점의 앱 스킴을 지정하면 됩니다. 예를 들면 testapp://같은 형태입니다. customerName: string; // 고객의 이름입니다. 최대 길이는 100자입니다. customerEmail: string; // 고객의 이메일 주소입니다. 최대 길이는 100자입니다. taxFreeAmount?: number; // 결제할 금액 중 면세 금액입니다. 값을 넣지 않으면 기본값인 0으로 설정됩니다. *면세 상점 혹은 복합 과세 상점일 때만 설정한 금액이 적용되고, 일반 과세 상점인 경우에는 적용되지 않습니다. 더 자세한 내용은 복합 과세 처리하기에서 살펴보세요. };