fake-iamport-server
Version:
Fake iamport server for testing
152 lines (151 loc) • 5.22 kB
TypeScript
import { tags } from "typia";
import { IIamportCardPayment } from "./IIamportCardPayment";
import { IIamportPaymentCancel } from "./IIamportPaymentCancel";
import { IIamportTransferPayment } from "./IIamportTransferPayment";
import { IIamportVBankPayment } from "./IIamportVBankPayment";
/**
* 결제 정보.
*
* `IIamportPayment` 는 아임포트의 결제 정보를 형상화한 자료구조이자 유니언 타입의
* 인터페이스로써, if condition 을 통하여 method 값을 특정하면, 파생 타입이 자동으로
* 지정된다.
*
* ```typescript
* if (payment.pay_method === "card")
* payment.card_number; // payment be IIamportCardPayment
* ```
*
* @author Samchon
*/
export type IIamportPayment = IIamportCardPayment | IIamportTransferPayment | IIamportVBankPayment | IIamportPayment.IBase<Exclude<IIamportPayment.PayMethod, "card" | "samsung" | "trans" | "vbank">>;
export declare namespace IIamportPayment {
/**
* 결제 수단이 페이팔인 경우, 페이팔의 구매자 보호정책에 의해 결제 승인 시점에
* Pending 상태를 만든 후, 내부 심사등을 통해 최종 결제 완료라고 변경함.
*
* `iamport` 의 기술적 이슈로 해당 상태를 status: failed 로 기록함. 추후
* 페이팔에서 최종결제완료로 변경된 경우, `iamport` 에서 `paid` 로 변경 후,
* 해당건에 대한 웹훅 발송. `iamport` 를 사용하는 고객사에서는, failed 로 이미
* 처리된 결제건에 대한 paid 상태의 웹훅을 받는 문제점이 생김.
*
* 이에, `iamport` 에서 제공하는 `/payment/{imp_uid}` 에 query-string 으로
* `extension=true` 옵션을 추가해야 함
*
* @issue https://github.com/samchon/fake-iamport-server/issues/13
* @author Sangjin Han - https://github.com/ltnscp9028
*/
interface IQuery {
/**
* 페이팔의 경우, 이 값을 `true` 로 할 것.
*/
extension?: boolean;
}
/**
* 웹훅 데이터.
*/
interface IWebhook {
/**
* 결제 정보 {@link IIamportPayment} 의 식별자 키.
*/
imp_uid: string;
/**
* 주문 식별자 키.
*
* 아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.
*/
merchant_uid: string;
/**
* 현재 상태.
*/
status: Status;
}
/**
* 결제 기본 (공통) 정보.
*/
interface IBase<Method extends PayMethod> {
pay_method: Method;
/**
* 결제 정보 {@link IIamportPayment} 의 식별자 키.
*/
imp_uid: string;
/**
* 주문 식별자 키.
*
* 아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.
*/
merchant_uid: string;
/**
* 주문명, 누락 가능.
*/
name: null | string;
/**
* 결제 총액.
*/
amount: number;
/**
* 결제 취소, 환불 총액.
*/
cancel_amount: number;
/**
* 통화 단위.
*/
currency: IIamportPayment.Currency;
/**
* 영수증 URL.
*/
receipt_url: string & tags.Format<"uri">;
/**
* 현금 영수증 발행 여부.
*/
cash_receipt_issue: boolean;
channel: string;
pg_provider: string;
emb_pg_provider: null | string;
pg_id: string;
pg_tid: string;
escrow: boolean;
buyer_name: null | string;
buyer_email: null | (string & tags.Format<"email">);
buyer_tel: null | string;
buyer_addr: null | string;
buyer_postcode: null | string;
customer_uid: null | string;
customer_uid_usage: null | string;
custom_data: null | string;
user_agent: null | string;
/**
* 결제의 현재 (진행) 상태.
*/
status: IIamportPayment.Status;
/**
* 결제 신청 일시.
*
* 리눅스 타임이 쓰임.
*/
started_at: number;
/**
* 결제 (지불) 완료 일시.
*
* 리눅스 타임이 쓰이며, `null` 대신 0 을 씀.
*/
paid_at: number;
/**
* 결제 실패 일시.
*
* 리눅스 타임이 쓰이며, `null` 대신 0 을 씀.
*/
failed_at: number;
/**
* 결제 취소 일시.
*
* 리눅스 타임이 쓰이며, `null` 대신 0 을 씀.
*/
cancelled_at: number;
fail_reason: null | string;
cancel_reason: null | string;
cancel_history: IIamportPaymentCancel[];
}
type PayMethod = "card" | "trans" | "vbank" | "phone" | "samsung" | "kpay" | "kakaopay" | "payco" | "lpay" | "ssgpay" | "tosspay" | "cultureland" | "smartculture" | "happymoney" | "booknlife" | "point";
type Status = "paid" | "ready" | "failed" | "cancelled";
type Currency = "KRW" | "USD" | "EUR" | "JPY";
}