Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@bootpay/backend-js

Package Overview
Dependencies
Maintainers
0
Versions
46
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@bootpay/backend-js - npm Package Compare versions

Package version was removed
This package version has been unpublished, mostly likely due to security reasons
Comparing version
2.3.2
to
2.3.3
+182
bootpay.d.ts
import { BootpayBackendNodejsResource } from './lib/resource';
import { AccessTokenResponseParameters, CancelPaymentParameters, CertificateResponseParameters, DestroySubscribeResponseParameters, ReceiptResponseParameters, SubscriptionBillingRequestParameters, SubscriptionBillingResponseParameters, SubscriptionCardPaymentRequestParameters, UserTokenRequestParameters, UserTokenResponseParameters, SubscribePaymentReserveParameters, SubscribePaymentReserveResponse, CancelSubscribeReserveResponse, ShippingRequestParameters, CashReceiptPublishOnReceiptParameters, CashReceiptCancelOnReceiptParameters, RequestCashReceiptParameters, CancelCashReceiptParameters, RequestAuthenticateParameters, SubscribePaymentLookupResponse, SubscriptionBillingTransferRequestParameters, SubscriptionPaymentRequestParameters, WalletRequestParameters, WalletDataPart, WalletPaymentResponseParameters } from './lib/response';
declare class BootpayBackendNodejs extends BootpayBackendNodejsResource {
constructor();
/**
* Get Access Token
* Comment by GOSOMI
* @returns Promise<AccessTokenResponseParameters>
*/
getAccessToken(): Promise<AccessTokenResponseParameters>;
/**
* Lookup Receipt
* Comment by GOSOMI
* @param receiptId: string
* @param lookupUserData: boolean
*/
receiptPayment(receiptId: string, lookupUserData?: boolean): Promise<ReceiptResponseParameters>;
/**
* Cancel Payment
* Comment by GOSOMI
* @param cancelPayment: CancelPaymentParameters
* @returns Promise<CancelPaymentParameters>
*/
cancelPayment(cancelPayment: CancelPaymentParameters): Promise<ReceiptResponseParameters>;
/**
* Lookup Certificate Data
* Comment by GOSOMI
* @param receiptId: string
* @returns Promise<CertificateResponseParameters>
*/
certificate(receiptId: string): Promise<CertificateResponseParameters>;
/**
* ConfirmPayment
* Comment by GOSOMI
* @param receiptId: string
* @returns Promise<ReceiptResponseParameters>
*/
confirmPayment(receiptId: string): Promise<ReceiptResponseParameters>;
/**
* lookupSubscribeBillingKey
* Comment by GOSOMI
* @param receiptId: string
* @returns Promise<SubscriptionBillingResponseParameters>
*/
lookupSubscribeBillingKey(receiptId: string): Promise<SubscriptionBillingResponseParameters>;
/**
* lookupBillingKey
* Comment by ehowlsla
* @param billingKey: string
* @returns Promise<SubscriptionBillingResponseParameters>
*/
lookupBillingKey(billingKey: string): Promise<SubscriptionBillingResponseParameters>;
/**
* requestSubscribeBillingKey
* Comment by GOSOMI
* @param subscriptionBillingRequest: SubscriptionBillingRequestParameters
* @returns Promise<SubscriptionBillingResponseParameters>
*/
requestSubscribeBillingKey(subscriptionBillingRequest: SubscriptionBillingRequestParameters): Promise<SubscriptionBillingResponseParameters>;
/**
* requestSubscribeCardPayment
* Comment by GOSOMI
* @param subscriptionCardRequest: SubscriptionCardPaymentRequestParameters
* @returns Promise<ReceiptResponseParameters>
*/
requestSubscribeCardPayment(subscriptionCardRequest: SubscriptionCardPaymentRequestParameters): Promise<ReceiptResponseParameters>;
/**
* requestSubscribePayment
* Comment by ehowlsla
* @param subscriptionRequest: SubscriptionPaymentRequestParameters
* @returns Promise<ReceiptResponseParameters>
*/
requestSubscribePayment(subscriptionRequest: SubscriptionPaymentRequestParameters): Promise<ReceiptResponseParameters>;
/**
* destroyBillingKey
* Comment by GOSOMI
* @param billingKey:string
* @returns Promise<DestroySubscribeResponseParameters>
*/
destroyBillingKey(billingKey: string): Promise<DestroySubscribeResponseParameters>;
/**
* requestUserToken
* Comment by GOSOMI
* @param userTokenRequest:UserTokenRequestParameters
* @returns Promise<UserTokenResponseParameters>
*/
requestUserToken(userTokenRequest: UserTokenRequestParameters): Promise<UserTokenResponseParameters>;
/**
* subscribePaymentReserve
* Comment by GOSOMI
* @param subscribePaymentReserveRequest:SubscribePaymentReserveParameters
* @returns Promise<SubscribePaymentReserveResponse>
*/
subscribePaymentReserve(subscribePaymentReserveRequest: SubscribePaymentReserveParameters): Promise<SubscribePaymentReserveResponse>;
/**
* SubscribeReserve Lookup
* Comment by GOSOMI
* @date: 2023-03-07
* @param reserveId: string
* @returns Promise<SubscribeLookupResponse>
*/
subscribePaymentReserveLookup(reserveId: string): Promise<SubscribePaymentLookupResponse>;
/**
* cancelSubscribeReserve
* Comment by GOSOMI
* @param reserveId:string
* @returns Promise<CancelSubscribeReserveResponse>
*/
cancelSubscribeReserve(reserveId: string): Promise<CancelSubscribeReserveResponse>;
/**
* 배송시작 REST API 시작
* Comment by GOSOMI
* @date: 2022-06-14
*/
shippingStart(shippingRequest: ShippingRequestParameters): Promise<ReceiptResponseParameters | any>;
/**
* 기존결제 현금영수증 발행 API
* Comment by GOSOMI
* @date: 2022-07-28
*/
cashReceiptPublishOnReceipt(cashReceiptPublishRequest: CashReceiptPublishOnReceiptParameters): Promise<ReceiptResponseParameters>;
/**
* 기존 결제 현금영수증 발행 취소 API
* Comment by GOSOMI
* @date: 2022-08-09
*/
cashReceiptCancelOnReceipt(cashReceiptCancelRequest: CashReceiptCancelOnReceiptParameters): Promise<null>;
/**
* 별건 현금영수증 발행하기
* Comment by GOSOMI
* @date: 2022-08-09
*/
requestCashReceipt(cashReceiptRequest: RequestCashReceiptParameters): Promise<ReceiptResponseParameters>;
/**
* 별건 현금영수증 취소하기
* Comment by GOSOMI
* @date: 2022-08-09
*/
cancelCashReceipt(cancelCashReceiptRequest: CancelCashReceiptParameters): Promise<ReceiptResponseParameters>;
/**
* 본인인증 REST API 요청
* Comment by GOSOMI
* @date: 2022-11-07
*/
requestAuthentication(authenticateRequest: RequestAuthenticateParameters): Promise<CertificateResponseParameters>;
/**
* 본인인증 승인하기
* Comment by GOSOMI
* @date: 2022-11-07
*/
confirmAuthentication(receipt_id: string, otp?: null | string): Promise<CertificateResponseParameters>;
/**
* 본인인증 SMS 재전송
* Comment by GOSOMI
* @date: 2022-11-07
*/
realarmAuthentication(receipt_id: string): Promise<CertificateResponseParameters>;
/**
* 계좌 자동이체를 위한 빌링키 발급 요청
* Comment by ehowlsla
* @date: 2024-05-27
*/
requestSubscribeAutomaticTransferBillingKey(parameters: SubscriptionBillingTransferRequestParameters): Promise<ReceiptResponseParameters>;
/**
* 계좌 자동이체를 위한 출금 동의 확인 요청
* Comment by ehowlsla
* @date: 2024-05-27
*/
publishAutomaticTransferBillingKey(receipt_id: string): Promise<SubscriptionBillingResponseParameters>;
/**
* 등록된 지갑 리스트 가져오기
* Comment by ehowlsla
* @date: 2025-03-16
*/
getUserWallets(user_id: string, sandbox: boolean): Promise<WalletDataPart[]>;
requestWalletPayment(walletRequest: WalletRequestParameters): Promise<WalletPaymentResponseParameters>;
}
declare const Bootpay: BootpayBackendNodejs;
export { Bootpay };
export default Bootpay;
export * from './lib/response';
export * from './lib/resource';
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Bootpay = void 0;
const resource_1 = require("./lib/resource");
class BootpayBackendNodejs extends resource_1.BootpayBackendNodejsResource {
constructor() {
super();
}
/**
* Get Access Token
* Comment by GOSOMI
* @returns Promise<AccessTokenResponseParameters>
*/
getAccessToken() {
return __awaiter(this, void 0, void 0, function* () {
try {
const { application_id, private_key } = this.bootpayConfiguration;
const response = yield this.post('request/token', {
application_id,
private_key
});
// set Token
this.setToken(response.access_token);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* Lookup Receipt
* Comment by GOSOMI
* @param receiptId: string
* @param lookupUserData: boolean
*/
receiptPayment(receiptId_1) {
return __awaiter(this, arguments, void 0, function* (receiptId, lookupUserData = false) {
try {
const response = yield this.get(`receipt/${receiptId}?lookup_user_data=${lookupUserData ? 'true' : 'false'}`);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* Cancel Payment
* Comment by GOSOMI
* @param cancelPayment: CancelPaymentParameters
* @returns Promise<CancelPaymentParameters>
*/
cancelPayment(cancelPayment) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.post('cancel', Object.assign({}, cancelPayment));
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* Lookup Certificate Data
* Comment by GOSOMI
* @param receiptId: string
* @returns Promise<CertificateResponseParameters>
*/
certificate(receiptId) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.get(`certificate/${receiptId}`);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* ConfirmPayment
* Comment by GOSOMI
* @param receiptId: string
* @returns Promise<ReceiptResponseParameters>
*/
confirmPayment(receiptId) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.post('confirm', {
receipt_id: receiptId
});
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* lookupSubscribeBillingKey
* Comment by GOSOMI
* @param receiptId: string
* @returns Promise<SubscriptionBillingResponseParameters>
*/
lookupSubscribeBillingKey(receiptId) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.get(`subscribe/billing_key/${receiptId}`);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* lookupBillingKey
* Comment by ehowlsla
* @param billingKey: string
* @returns Promise<SubscriptionBillingResponseParameters>
*/
lookupBillingKey(billingKey) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.get(`billing_key/${billingKey}`);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* requestSubscribeBillingKey
* Comment by GOSOMI
* @param subscriptionBillingRequest: SubscriptionBillingRequestParameters
* @returns Promise<SubscriptionBillingResponseParameters>
*/
requestSubscribeBillingKey(subscriptionBillingRequest) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.post('request/subscribe', Object.assign({}, subscriptionBillingRequest));
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* requestSubscribeCardPayment
* Comment by GOSOMI
* @param subscriptionCardRequest: SubscriptionCardPaymentRequestParameters
* @returns Promise<ReceiptResponseParameters>
*/
requestSubscribeCardPayment(subscriptionCardRequest) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.post('subscribe/payment', Object.assign({}, subscriptionCardRequest));
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* requestSubscribePayment
* Comment by ehowlsla
* @param subscriptionRequest: SubscriptionPaymentRequestParameters
* @returns Promise<ReceiptResponseParameters>
*/
requestSubscribePayment(subscriptionRequest) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.post('subscribe/payment', Object.assign({}, subscriptionRequest));
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* destroyBillingKey
* Comment by GOSOMI
* @param billingKey:string
* @returns Promise<DestroySubscribeResponseParameters>
*/
destroyBillingKey(billingKey) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.delete(`subscribe/billing_key/${billingKey}`);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* requestUserToken
* Comment by GOSOMI
* @param userTokenRequest:UserTokenRequestParameters
* @returns Promise<UserTokenResponseParameters>
*/
requestUserToken(userTokenRequest) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.post('request/user/token', Object.assign({}, userTokenRequest));
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* subscribePaymentReserve
* Comment by GOSOMI
* @param subscribePaymentReserveRequest:SubscribePaymentReserveParameters
* @returns Promise<SubscribePaymentReserveResponse>
*/
subscribePaymentReserve(subscribePaymentReserveRequest) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.post('subscribe/payment/reserve', Object.assign({}, subscribePaymentReserveRequest));
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* SubscribeReserve Lookup
* Comment by GOSOMI
* @date: 2023-03-07
* @param reserveId: string
* @returns Promise<SubscribeLookupResponse>
*/
subscribePaymentReserveLookup(reserveId) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.get(`subscribe/payment/reserve/${reserveId}`);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* cancelSubscribeReserve
* Comment by GOSOMI
* @param reserveId:string
* @returns Promise<CancelSubscribeReserveResponse>
*/
cancelSubscribeReserve(reserveId) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.delete(`subscribe/payment/reserve/${reserveId}`);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* 배송시작 REST API 시작
* Comment by GOSOMI
* @date: 2022-06-14
*/
shippingStart(shippingRequest) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.put(`escrow/shipping/start/${shippingRequest.receipt_id}`, shippingRequest);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* 기존결제 현금영수증 발행 API
* Comment by GOSOMI
* @date: 2022-07-28
*/
cashReceiptPublishOnReceipt(cashReceiptPublishRequest) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.post('request/receipt/cash/publish', cashReceiptPublishRequest);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* 기존 결제 현금영수증 발행 취소 API
* Comment by GOSOMI
* @date: 2022-08-09
*/
cashReceiptCancelOnReceipt(cashReceiptCancelRequest) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.delete(`request/receipt/cash/cancel/${cashReceiptCancelRequest.receipt_id}`, {
params: cashReceiptCancelRequest
});
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* 별건 현금영수증 발행하기
* Comment by GOSOMI
* @date: 2022-08-09
*/
requestCashReceipt(cashReceiptRequest) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.post('request/cash/receipt', cashReceiptRequest);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* 별건 현금영수증 취소하기
* Comment by GOSOMI
* @date: 2022-08-09
*/
cancelCashReceipt(cancelCashReceiptRequest) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.delete(`request/cash/receipt/${cancelCashReceiptRequest.receipt_id}`, {
params: cancelCashReceiptRequest
});
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* 본인인증 REST API 요청
* Comment by GOSOMI
* @date: 2022-11-07
*/
requestAuthentication(authenticateRequest) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.post('request/authentication', authenticateRequest);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* 본인인증 승인하기
* Comment by GOSOMI
* @date: 2022-11-07
*/
confirmAuthentication(receipt_id_1) {
return __awaiter(this, arguments, void 0, function* (receipt_id, otp = null) {
try {
const response = yield this.post('authenticate/confirm', {
receipt_id,
otp
});
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* 본인인증 SMS 재전송
* Comment by GOSOMI
* @date: 2022-11-07
*/
realarmAuthentication(receipt_id) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.post('authenticate/realarm', {
receipt_id
});
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* 계좌 자동이체를 위한 빌링키 발급 요청
* Comment by ehowlsla
* @date: 2024-05-27
*/
requestSubscribeAutomaticTransferBillingKey(parameters) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.post('request/subscribe/automatic-transfer', parameters);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* 계좌 자동이체를 위한 출금 동의 확인 요청
* Comment by ehowlsla
* @date: 2024-05-27
*/
publishAutomaticTransferBillingKey(receipt_id) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.post('request/subscribe/automatic-transfer/publish', {
"receipt_id": receipt_id
});
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* 등록된 지갑 리스트 가져오기
* Comment by ehowlsla
* @date: 2025-03-16
*/
getUserWallets(user_id, sandbox) {
return __awaiter(this, void 0, void 0, function* () {
try {
const queryParams = new URLSearchParams({ user_id, sandbox: sandbox.toString() }).toString();
const response = yield this.get(`wallet?${queryParams}`);
return Promise.resolve(response);
}
catch (error) {
return Promise.reject(error);
}
});
}
// async getUserWallets(user_id: string, sandbox: boolean) {
// try {
// const response: WalletDataPart[] = await this.get<WalletDataPart[]>(`wallet?user_id=${user_id}&sandbox=${sandbox}`)
// return Promise.resolve(response)
// } catch (e) {
// return Promise.reject(e)
// }
// }
requestWalletPayment(walletRequest) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.post('wallet/payment', Object.assign({}, walletRequest));
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
}
const Bootpay = new BootpayBackendNodejs();
exports.Bootpay = Bootpay;
exports.default = Bootpay;
__exportStar(require("./lib/response"), exports);
__exportStar(require("./lib/resource"), exports);
import { AxiosInstance, AxiosRequestConfig } from 'axios';
export interface BootpayRestApiErrorResponse<T = any> {
error_code?: number;
pg_error_code?: number;
message?: string;
}
interface BootpayEntrypoints {
development: string;
stage: string;
production: string;
}
interface BootpayConfiguration {
application_id: string;
private_key: string;
mode?: 'development' | 'production' | 'stage';
}
export declare class BootpayBackendNodejsResource {
$http: AxiosInstance;
$token?: string;
mode: 'development' | 'production' | 'stage';
bootpayConfiguration: BootpayConfiguration;
API_ENTRYPOINTS: BootpayEntrypoints;
apiVersion: string;
sdkVersion: string;
constructor();
/**
* Environments
* Comment by GOSOMI
* @date: 2022-04-12
* @param configuration: BootpayConfiguration
* @returns void
*/
setConfiguration(configuration: BootpayConfiguration): void;
/**
* SET API Version
* Comment by GOSOMI
* @date: 2022-07-29
*/
setApiVersion(version: string): void;
/**
* Set Access Token
* Comment by GOSOMI
* @date: 2022-04-12
*/
setToken(token: string): void;
entrypoints(url: string): string;
get<T = any, D = any>(url: string, config?: AxiosRequestConfig<D>): Promise<T>;
post<T = any, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<T>;
put<T = any, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<T>;
delete<T = any, D = any>(url: string, config?: AxiosRequestConfig<D>): Promise<T>;
}
export {};
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.BootpayBackendNodejsResource = void 0;
const axios_1 = __importDefault(require("axios"));
class BootpayBackendNodejsResource {
constructor() {
this.apiVersion = '5.0.0';
this.sdkVersion = '2.3.0';
this.mode = 'production';
this.$http = axios_1.default.create({
timeout: 60000
});
this.$token = undefined;
this.bootpayConfiguration = {
application_id: '',
private_key: '',
mode: 'production'
};
this.API_ENTRYPOINTS = {
development: 'https://dev-api.bootpay.co.kr/v2',
stage: 'https://stage-api.bootpay.co.kr/v2',
production: 'https://api.bootpay.co.kr/v2'
};
this.$http.interceptors.response.use((response) => {
if (response.request !== undefined && response.headers !== undefined) {
return response.data;
}
else {
// 오류를 리턴
return response.data;
}
}, (error) => {
if (error.response !== undefined) {
return Promise.reject(error.response.data);
}
else {
return Promise.reject({
error_code: -100,
message: `Request Rest Api Failed to Bootpay Server, ${error.message}`
});
}
});
// @ts-expect-error
this.$http.interceptors.request.use((config) => {
if (config.headers !== undefined) {
if (this.$token !== undefined) {
config.headers.authorization = `Bearer ${this.$token}`;
}
config.headers['Content-Type'] = 'application/json';
config.headers['Accept'] = 'application/json';
config.headers['BOOTPAY-SDK-VERSION'] = this.sdkVersion;
config.headers['BOOTPAY-API-VERSION'] = this.apiVersion;
config.headers['BOOTPAY-SDK-TYPE'] = 301;
}
return config;
}, (error) => {
return Promise.reject(error);
});
}
/**
* Environments
* Comment by GOSOMI
* @date: 2022-04-12
* @param configuration: BootpayConfiguration
* @returns void
*/
setConfiguration(configuration) {
if (configuration.mode === undefined) {
configuration.mode = 'production';
}
this.bootpayConfiguration = configuration;
}
/**
* SET API Version
* Comment by GOSOMI
* @date: 2022-07-29
*/
setApiVersion(version) {
this.apiVersion = version;
}
/**
* Set Access Token
* Comment by GOSOMI
* @date: 2022-04-12
*/
setToken(token) {
this.$token = token;
}
entrypoints(url) {
return [this.API_ENTRYPOINTS[this.bootpayConfiguration.mode === undefined ? 'production' : this.bootpayConfiguration.mode], url].join('/');
}
get(url, config) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.$http.get(this.entrypoints(url), config);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
post(url, data, config) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.$http.post(this.entrypoints(url), data, config);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
put(url, data, config) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.$http.put(this.entrypoints(url), data, config);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
delete(url, config) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.$http.delete(this.entrypoints(url), config);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
}
exports.BootpayBackendNodejsResource = BootpayBackendNodejsResource;
export interface AccessTokenResponseParameters {
expire_in: number;
access_token: string;
}
export interface ReceiptResponseParameters {
receipt_id: string;
order_id: string;
price: number;
tax_free: number;
cancelled_price: number;
cancelled_tax_free: number;
order_name: string;
company_name: string;
gateway_url: string;
metadata: string;
sandbox: boolean;
pg: string;
method: string;
method_symbol: string;
method_origin: string;
method_origin_symbol: string;
purchased_at?: Date;
requested_at: Date;
cancelled_at?: Date;
status: number;
status_locale: string;
receipt_url?: string;
card_data?: CardData;
phone_data?: PhoneData;
bank_data?: BankData;
vbank_data?: BankData;
escrow_data?: EscrowData;
cash_receipt_data?: CashReceiptData;
naver_point_data?: NaverPointData;
kakao_moneny_data?: KakaoMoneyData;
payco_point_data?: PaycoPointData;
toss_point_data?: TossPointData;
currency?: string;
}
export interface ExtraModel {
subscribe_test_payment: boolean;
}
export interface UserModel {
id?: string;
username?: string;
phone?: string;
email?: string;
}
export interface CompanyModel {
name?: string;
phone?: string;
zipcode?: string;
addr1?: string;
addr2?: string;
}
export interface ItemModel {
id?: string;
name?: string;
qty?: number;
price?: number;
}
export interface BillingData {
card_no: string;
card_company: string;
card_company_code: string;
card_type: number;
card_hash?: string;
rtn_key_info?: string;
}
export interface CardData {
tid: string;
card_approve_no: string;
card_no: string;
card_quota: string;
card_company_code: string;
card_company: string;
card_interest: string;
receipt_url?: string;
card_type?: string;
card_owner_type?: string;
point?: number;
}
export interface PhoneData {
tid: string;
auth_no?: string;
phone?: string;
receipt_url?: string;
}
export interface BankData {
tid: string;
bank_code: string;
bank_name: string;
bank_username: string;
bank_account?: string;
sender_name?: string;
expired_at?: Date;
cash_receipt_tid?: string;
cash_receipt_type?: string;
cash_receipt_no?: string;
receipt_url?: string;
}
export interface EscrowData {
status: number;
status_locale: string;
shipping_started_at: Date;
receipt_confirmed_at: Date | null;
}
export interface CashReceiptData {
tid?: string;
cash_receipt_type?: number;
cash_receipt_no?: string;
receipt_url?: string;
}
export interface KakaoMoneyData {
tid?: string;
}
export interface NaverPointData {
tid?: string;
}
export interface PaycoPointData {
tid?: string;
}
export interface TossPointData {
tid?: string;
}
export interface CancelPaymentParameters {
receipt_id: string;
cancel_price?: number;
cancel_tax_free?: number;
cancel_id?: string;
cancel_username?: string;
cancel_message?: string;
refund?: Refund;
}
export interface Refund {
bank_account: string;
bank_username: string;
bank_code: string;
}
export interface CertificateResponseParameters {
receipt_id: string;
authenticate_id: string;
pg: string;
method: string;
method_origin: string;
method_origin_symbol: string;
authenticated_at: Date;
requested_at: Date;
status: number;
status_locale: string;
authenticate_data: AuthenticateData;
}
export interface AuthenticateData {
name?: string;
phone?: string;
unique?: string;
birth?: Date;
gender?: number;
foreigner?: number;
carrier?: string;
number_of_realarms?: number;
tid: string;
}
export interface SubscriptionBillingRequestParameters {
pg: string;
method?: string;
order_name: string;
subscription_id: string;
card_no: string;
card_pw: string;
card_identity_no: string;
card_expire_year: string;
card_expire_month: string;
price?: number;
tax_free?: number;
extra: ExtraModel;
user: UserModel;
metadata?: object;
}
export interface SubscriptionBillingTransferRequestParameters {
pg: string;
method?: string;
order_name: string;
subscription_id: string;
auth_type: 'ARS' | '간편인증';
username: string;
bank_name: string;
bank_account: string;
identity_no: string;
cash_receipt_type?: '소득공제' | '지출증빙';
cash_receipt_identity_no?: string;
phone?: string;
price?: number;
tax_free?: number;
extra: ExtraModel;
user: UserModel;
metadata?: object;
}
export interface SubscriptionBillingResponseParameters {
billing_key: string;
billing_data: BillingData;
receipt_id: string;
subscription_id: string;
gateway_url?: string;
metadata: object;
pg: string;
method: string;
method_origin?: string;
method_origin_symbol?: string;
method_symbol?: string;
published_at: Date;
requested_at: Date;
receipt_data: ReceiptResponseParameters;
billing_expire_at: Date;
status: number;
status_locale?: string;
}
export interface SubscriptionCardPaymentRequestParameters {
billing_key: string;
order_name: string;
price: number;
tax_free?: number;
card_quota?: string;
card_interest?: string;
order_id: string;
feedback_url?: string;
content_type?: string;
metadata?: any;
items?: Array<ItemModel>;
user?: UserModel;
extra?: ExtraModel;
}
export interface SubscriptionPaymentRequestParameters {
billing_key: string;
order_name: string;
price: number;
tax_free?: number;
card_quota?: string;
card_interest?: string;
order_id: string;
feedback_url?: string;
content_type?: string;
metadata?: any;
items?: Array<ItemModel>;
user?: UserModel;
extra?: ExtraModel;
}
export interface DestroySubscribeResponseParameters {
billing_key: string;
}
export interface UserTokenRequestParameters {
user_id: string;
email?: string;
username?: string;
gender?: number;
birth?: string;
phone?: string;
}
export interface UserTokenResponseParameters {
user_token: string;
expired_at: Date;
}
export interface SubscribePaymentReserveParameters {
billing_key: string;
order_name: string;
price: number;
tax_free?: number;
order_id: string;
reserve_execute_at: Date;
user?: UserModel;
items?: ItemModel;
metadata?: any;
feedback_url?: string;
content_type?: 'application/json' | 'application/x-www-form-urlencoded';
}
export interface ShippingRequestParameters {
receipt_id: string;
receipt_url: string;
tracking_number: string;
delivery_corp: string;
shipping_prepayment?: boolean;
shipping_day?: number;
user?: UserModel;
company?: CompanyModel;
}
export interface SubscribePaymentReserveResponse {
reserve_id: string;
reserve_execute_at: Date;
}
export interface CancelSubscribeReserveResponse {
reserve_id: string;
success: boolean;
}
export interface CashReceiptPublishOnReceiptParameters {
receipt_id: string;
username?: string;
email?: string;
phone?: string;
identity_no: string;
cash_receipt_type: '소득공제' | '지출증빙';
currency?: string;
}
export interface CashReceiptCancelOnReceiptParameters {
receipt_id: string;
cancel_username?: string;
cancel_message?: string;
}
export interface RequestCashReceiptParameters {
pg: string;
price: number;
tax_free?: number;
order_name: string;
cash_receipt_type: '소득공제' | '지출증빙';
identity_no: string;
purchased_at?: Date;
order_id: string;
user?: UserModel;
extra?: ExtraModel;
}
export interface CancelCashReceiptParameters {
receipt_id: string;
cancel_username?: string;
cancel_message?: string;
}
export interface RequestAuthenticateParameters {
authentication_id: string;
pg: string;
method: string;
username: string;
identity_no: string;
carrier: string;
phone: string;
site_url?: string;
authenticate_type?: 'sms' | 'pass';
order_name: string;
extra?: ExtraModel;
user?: UserModel;
metadata?: object;
}
export interface SubscribePaymentLookupResponse {
reserve_id: string;
receipt_id?: string;
order_id: string;
price: number;
tax_free: number;
order_name: string;
user: UserModel;
feedback_url: string;
metadata?: any;
content_type: 'application/json' | 'application/x-www-form-urlencoded';
version: number;
extra: ExtraModel;
reserve_requested_at: string;
reserve_execute_at: string;
reserve_started_at: string;
reserve_finished_at: string;
reserve_revoked_at: string;
status: number;
}
export interface WalletRequestParameters {
user_id: string;
order_name: string;
price: number;
tax_free?: number;
order_id: string;
webhook_url?: string;
content_type?: 'application/json' | 'application/x-www-form-urlencoded';
items?: ItemModel;
user?: UserModel;
extra?: ExtraModel;
metadata?: object;
sandbox: boolean;
}
export interface WalletPaymentResponseParameters {
cancelled_price: number;
wallet_data: WalletData;
metadata: Record<string, any>;
cancelled_tax_free: number;
method: string;
card_data: CardData;
sandbox: boolean;
receipt_id: string;
method_origin: string;
order_name: string;
method_origin_symbol: string;
receipt_url: string;
method_symbol: string;
purchased_at: string;
tax_free: number;
price: number;
company_name: string;
pg: string;
status_locale: string;
currency: string;
http_status: number;
order_id: number;
requested_at: string;
status: number;
}
export interface WalletData {
success: WalletDataPart;
failure: any[];
}
export interface WalletDataPart {
wallet_id: string;
type: number;
sandbox: number;
order: number;
payment_status: number;
batch_data: BatchData;
card_code: string;
expired_at: string;
latest_purchased_at: string;
}
export interface BatchData {
card_no: string;
card_company: string;
card_company_code: string;
card_type: number;
card_hash: string;
}
export interface CardData {
tid: string;
card_approve_no: string;
card_no: string;
card_quota: string;
card_company_code: string;
card_company: string;
card_type?: string;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
// public class WalletResponseData {
//
// List<WalletDataPart> data;
// int http_status;
// }
+1
-1
{
"name": "@bootpay/backend-js",
"version": "2.3.2",
"version": "2.3.3",
"description": "Bootpay Server Side Package for Node.js",

@@ -5,0 +5,0 @@ "types": "dist/bootpay.d.ts",

+106
-39

@@ -12,27 +12,30 @@ # Bootpay Server Side Package for Node.js [![alt text](https://cdn.bootpay.co.kr/icon/npm.svg)](https://www.npmjs.com/package/@bootpay/backend-js)

## 목차
- [사용하기](#사용하기)
- [1. 토큰 발급](#1-토큰-발급)
- [2. 결제 단건 조회](#2-결제-단건-조회)
- [3. 결제 취소 (전액 취소 / 부분 취소)](#3-결제-취소-전액-취소--부분-취소)
- [4. 자동/빌링/정기 결제](#4-자동빌링정기-결제)
- [4-1. 카드 빌링키 발급](#4-1-카드-빌링키-발급)
- [4-2. 계좌 빌링키 발급](#4-2-계좌-빌링키-발급)
- [4-3. 결제 요청하기](#4-3-결제-요청하기)
- [4-4. 결제 예약하기](#4-4-결제-예약하기)
- [4-5. 예약 조회하기](#4-5-예약-조회하기)
- [4-6. 예약 취소하기](#4-6-예약-취소하기)
- [4-7. 빌링키 삭제하기](#4-7-빌링키-삭제하기)
- [4-8. 빌링키 조회하기](#4-8-빌링키-조회하기)
- [5. 회원 토큰 발급요청](#5-회원-토큰-발급요청)
- [6. 서버 승인 요청](#6-서버-승인-요청)
- [7. 본인 인증 결과 조회](#7-본인-인증-결과-조회)
- [8. 에스크로 이용시 PG사로 배송정보 보내기](#8-에스크로-이용시-pg사로-배송정보-보내기)
- [9-1. 현금영수증 발행하기](#9-1-현금영수증-발행하기)
- [9-2. 현금영수증 발행 취소](#9-2-현금영수증-발행-취소)
- [9-3. 별건 현금영수증 발행](#9-3-별건-현금영수증-발행)
- [9-4. 별건 현금영수증 발행 취소](#9-4-별건-현금영수증-발행-취소)
- [Example 프로젝트](#example-프로젝트)
- [Documentation](#documentation)
- [기술문의](#기술문의)
- [License](#license)
## 기능
1. (부트페이 통신을 위한) 토큰 발급
2. 결제 단건 조회
3. 결제 취소 (전액 취소 / 부분 취소)
4. 신용카드 자동결제 (빌링결제)
4-1. 빌링키 발급
4-2. 발급된 빌링키로 결제 승인 요청
4-3. 발급된 빌링키로 결제 예약 요청
4-4. 발급된 빌링키로 결제 예약 - 취소 요청
4-5. 빌링키 삭제
4-6. 빌링키 조회
5. (생체인증, 비밀번호 결제를 위한) 구매자 토큰 발급
6. 서버 승인 요청
7. 본인 인증 결과 조회
8. (에스크로 이용시) PG사로 배송정보 보내기
## npm으로 설치하기

@@ -71,3 +74,3 @@

## 1. (부트페이 통신을 위한) 토큰 발급
## 1. 토큰 발급

@@ -144,3 +147,4 @@ 부트페이와 서버간 통신을 하기 위해서는 부트페이 서버로부터 토큰을 발급받아야 합니다.

## 4-1. 빌링키 발급
## 4. 자동/빌링/정기 결제
## 4-1. 카드 빌링키 발급
REST API 방식으로 고객으로부터 카드 정보를 전달하여, PG사에게 빌링키를 발급받을 수 있습니다.

@@ -177,4 +181,52 @@ 발급받은 빌링키를 저장하고 있다가, 원하는 시점, 원하는 금액에 결제 승인 요청하여 좀 더 자유로운 결제시나리오에 적용이 가능합니다.

```
## 4-2. 발급된 빌링키로 결제 승인 요청
## 4-2. 계좌 빌링키 발급
REST API 방식으로 고객의 계좌 정보를 전달하여, PG사에게 빌링키 발급을 요청합니다. 요청 후 빌링키가 바로 발급되진 않고, 출금동의 확인 절차까지 진행해야 빌링키가 발급됩니다.
먼저 빌링키를 요청합니다.
```javascript
(async () => {
Bootpay.setConfiguration({
application_id: '5b8f6a4d396fa665fdc2b5ea',
private_key: 'rm6EYECr6aroQVG2ntW0A6LpWnkTgP4uQ3H18sDDUYw='
})
try {
await Bootpay.getAccessToken()
const response = await Bootpay.requestSubscribeAutomaticTransferBillingKey({
pg: '나이스페이',
order_name: '테스트결제',
subscription_id: (new Date()).getTime(),
price: 1000,
username: '홍길동',
bank_name: '국민',
bank_account: '67561234123492472',
identity_no: '901014',
cash_receipt_identity_no: '01012341234',
phone: '01012341234',
user: {
username: '홍길동',
phone: '01012345678'
}
})
console.log(response)
} catch (e) {
console.log(e)
}
})()
```
이후 빌링키 발급 요청시 응답받은 receipt_id로, 출금 동의 확인을 요청합니다.
```javascript
try {
await Bootpay.getAccessToken()
const response = await Bootpay.publishAutomaticTransferBillingKey('6655069ca691573f1bb9c28a')
console.log(response)
} catch (e) {
console.log(e)
}
```
## 4-3. 결제 요청하기
발급된 빌링키로 원하는 시점에 원하는 금액으로 결제 승인 요청을 할 수 있습니다. 잔액이 부족하거나 도난 카드 등의 특별한 건이 아니면 PG사에서 결제를 바로 승인합니다.

@@ -203,4 +255,4 @@

```
## 4-3. 발급된 빌링키로 결제 예약 요청
원하는 시점에 4-1로 결제 승인 요청을 보내도 되지만, 빌링키 발급 이후에 바로 결제 예약 할 수 있습니다. (빌링키당 최대 10건)
## 4-4. 결제 예약하기
발급된 빌링키로 결제를 예약합니다. (빌링키당 최대 10건)
```javascript

@@ -229,5 +281,13 @@ (async () => {

## 4-4. 발급된 빌링키로 결제 예약 - 취소 요청
빌링키로 예약된 결제건을 취소합니다.
## 4-5. 예약 조회하기
예약시 응답받은 reserveId로 예약된 건을 조회합니다.
```javascript
const reserve_id = "5b8f6a4d396fa665fdc2b5ea"
await Bootpay.subscribePaymentReserveLookup(reserve_id)
```
## 4-6. 예약 취소하기
예약시 응답받은 reserveId로 예약된 건을 취소합니다.
```javascript
(async () => {

@@ -258,4 +318,4 @@ Bootpay.setConfiguration({

## 4-5. 빌링키 삭제
발급된 빌링키로 더 이상 사용되지 않도록, 삭제 요청합니다.
## 4-7. 빌링키 삭제하기
발급된 빌링키를 삭제합니다. 삭제하더라도 예약된 결제건은 취소되지 않습니다. 예약된 결제건 취소를 원하시면 예약 취소하기를 요청하셔야 합니다.
```javascript

@@ -277,4 +337,5 @@ (async () => {

## 4-6. 빌링키 조회
(빌링키 발급 완료시 리턴받았던 receipt_id에 한정) 어떤 빌링키였는지 조회합니다.
## 4-8. 빌링키 조회하기
클라이언트에서 빌링키 발급시, 보안상 클라이언트 이벤트에 빌링키를 전달해주지 않습니다. 그러므로 이 API를 통해 조회해야 합니다.
다음은 빌링키 발급 요청했던 receiptId 로 빌링키를 조회합니다.
```javascript

@@ -296,6 +357,12 @@ (async () => {

아래는 billingKey로 조회합니다.
```javascript
const response = await Bootpay.lookupBillingKey('66542dfb4d18d5fc7b43e1b6')
console.log(response)
```
## 5. 사용자 토큰 발급
(부트페이 단독) 부트페이에서 제공하는 간편결제창, 생체인증 기반의 결제 사용을 위해서는 개발사에서 회원 고유번호를 관리해야하며, 해당 회원에 대한 사용자 토큰을 발급합니다.
이 토큰값을 기반으로 클라이언트에서 결제요청 하시면 되겠습니다.
## 5. 회원 토큰 발급요청
ㅇㅇ페이 사용을 위해 가맹점 회원의 토큰을 발급합니다. 가맹점은 회원의 고유번호를 관리해야합니다.
이 토큰값을 기반으로 클라이언트에서 결제요청(payload.user_token) 하시면 되겠습니다.
```javascript

@@ -401,3 +468,3 @@ (async () => {

[부트페이 개발매뉴얼](https://docs.bootpay.co.kr/next/)을 참조해주세요
[부트페이 개발매뉴얼](https://developer.bootpay.co.kr/)을 참조해주세요

@@ -404,0 +471,0 @@ ## 기술문의

### 2.3.2
* 배송등록 api 필드 추가
### 2.3.1
* requestSubscribePayment 함수 추가
### 2.3.0
* 계좌 자동 결제 추가
### 2.1.11
* 필드명 back_username -> bank_username 으로 오타 수정
### 2.1.4
* 날짜 타입을 string -> Date 로 명시적으로 수정
### 2.1.3
* 정기결제요청시 feedback_url, metadata, content_type 파라미터 정의 추가
### 2.1.2
* 버전 재배포
### 2.1.1
* 정기결제 예약시 order_id 파라미터 정의 추가
### 2.1.0
* 결제취소 요청시 refund optional 로 수정
### 2.0.9 ( Stable )
* 네이버페이 포인트, 페이코포인트, 카카오머니, 토스포인트 결제시 리턴되는 포맷 interface 추가 정의
### 2.0.8
* 현금영수증 cash_receipt_data interface 정의
### 2.0.7
* inteface model 정의 parameters 누락 및 optional 체크
* 현금영수증 별건 발행 / 취소 API 추가
### 2.0.6
* SubscriptionBillingResponseParameters interface 누락된 값 추가 ( status, status_locale, gateway_url, method_symbol )
### 2.0.5
* typescript에서 TS7016 root에서 import가 되지 않는 문제 해결
### 2.0.4
* package.json import가 되지 않는 환경 예외처리
### 2.0.3
* 기존 결제 현금영수증 발행
* 별건 현금영수증 발행
* REST API 통신 요청시 Header에 버전 및 SDK 종류 명시 ( 부트페이 서버에서 CS용으로 수집 )
### 2.0.0
새로운 v2 API에 맞도록 수정
import { BootpayBackendNodejsResource } from './lib/resource';
import { AccessTokenResponseParameters, CancelPaymentParameters, CertificateResponseParameters, DestroySubscribeResponseParameters, ReceiptResponseParameters, SubscriptionBillingRequestParameters, SubscriptionBillingResponseParameters, SubscriptionCardPaymentRequestParameters, UserTokenRequestParameters, UserTokenResponseParameters, SubscribePaymentReserveParameters, SubscribePaymentReserveResponse, CancelSubscribeReserveResponse, ShippingRequestParameters, CashReceiptPublishOnReceiptParameters, CashReceiptCancelOnReceiptParameters, RequestCashReceiptParameters, CancelCashReceiptParameters, RequestAuthenticateParameters, SubscribePaymentLookupResponse, SubscriptionBillingTransferRequestParameters, SubscriptionPaymentRequestParameters } from './lib/response';
declare class BootpayBackendNodejs extends BootpayBackendNodejsResource {
constructor();
/**
* Get Access Token
* Comment by GOSOMI
* @returns Promise<AccessTokenResponseParameters>
*/
getAccessToken(): Promise<AccessTokenResponseParameters>;
/**
* Lookup Receipt
* Comment by GOSOMI
* @param receiptId: string
* @param lookupUserData: boolean
*/
receiptPayment(receiptId: string, lookupUserData?: boolean): Promise<ReceiptResponseParameters>;
/**
* Cancel Payment
* Comment by GOSOMI
* @param cancelPayment: CancelPaymentParameters
* @returns Promise<CancelPaymentParameters>
*/
cancelPayment(cancelPayment: CancelPaymentParameters): Promise<ReceiptResponseParameters>;
/**
* Lookup Certificate Data
* Comment by GOSOMI
* @param receiptId: string
* @returns Promise<CertificateResponseParameters>
*/
certificate(receiptId: string): Promise<CertificateResponseParameters>;
/**
* ConfirmPayment
* Comment by GOSOMI
* @param receiptId: string
* @returns Promise<ReceiptResponseParameters>
*/
confirmPayment(receiptId: string): Promise<ReceiptResponseParameters>;
/**
* lookupSubscribeBillingKey
* Comment by GOSOMI
* @param receiptId: string
* @returns Promise<SubscriptionBillingResponseParameters>
*/
lookupSubscribeBillingKey(receiptId: string): Promise<SubscriptionBillingResponseParameters>;
/**
* lookupBillingKey
* Comment by ehowlsla
* @param billingKey: string
* @returns Promise<SubscriptionBillingResponseParameters>
*/
lookupBillingKey(billingKey: string): Promise<SubscriptionBillingResponseParameters>;
/**
* requestSubscribeBillingKey
* Comment by GOSOMI
* @param subscriptionBillingRequest: SubscriptionBillingRequestParameters
* @returns Promise<SubscriptionBillingResponseParameters>
*/
requestSubscribeBillingKey(subscriptionBillingRequest: SubscriptionBillingRequestParameters): Promise<SubscriptionBillingResponseParameters>;
/**
* requestSubscribeCardPayment
* Comment by GOSOMI
* @param subscriptionCardRequest: SubscriptionCardPaymentRequestParameters
* @returns Promise<ReceiptResponseParameters>
*/
requestSubscribeCardPayment(subscriptionCardRequest: SubscriptionCardPaymentRequestParameters): Promise<ReceiptResponseParameters>;
/**
* requestSubscribePayment
* Comment by ehowlsla
* @param subscriptionRequest: SubscriptionPaymentRequestParameters
* @returns Promise<ReceiptResponseParameters>
*/
requestSubscribePayment(subscriptionRequest: SubscriptionPaymentRequestParameters): Promise<ReceiptResponseParameters>;
/**
* destroyBillingKey
* Comment by GOSOMI
* @param billingKey:string
* @returns Promise<DestroySubscribeResponseParameters>
*/
destroyBillingKey(billingKey: string): Promise<DestroySubscribeResponseParameters>;
/**
* requestUserToken
* Comment by GOSOMI
* @param userTokenRequest:UserTokenRequestParameters
* @returns Promise<UserTokenResponseParameters>
*/
requestUserToken(userTokenRequest: UserTokenRequestParameters): Promise<UserTokenResponseParameters>;
/**
* subscribePaymentReserve
* Comment by GOSOMI
* @param subscribePaymentReserveRequest:SubscribePaymentReserveParameters
* @returns Promise<SubscribePaymentReserveResponse>
*/
subscribePaymentReserve(subscribePaymentReserveRequest: SubscribePaymentReserveParameters): Promise<SubscribePaymentReserveResponse>;
/**
* SubscribeReserve Lookup
* Comment by GOSOMI
* @date: 2023-03-07
* @param reserveId: string
* @returns Promise<SubscribeLookupResponse>
*/
subscribePaymentReserveLookup(reserveId: string): Promise<SubscribePaymentLookupResponse>;
/**
* cancelSubscribeReserve
* Comment by GOSOMI
* @param reserveId:string
* @returns Promise<CancelSubscribeReserveResponse>
*/
cancelSubscribeReserve(reserveId: string): Promise<CancelSubscribeReserveResponse>;
/**
* 배송시작 REST API 시작
* Comment by GOSOMI
* @date: 2022-06-14
*/
shippingStart(shippingRequest: ShippingRequestParameters): Promise<ReceiptResponseParameters | any>;
/**
* 기존결제 현금영수증 발행 API
* Comment by GOSOMI
* @date: 2022-07-28
*/
cashReceiptPublishOnReceipt(cashReceiptPublishRequest: CashReceiptPublishOnReceiptParameters): Promise<ReceiptResponseParameters>;
/**
* 기존 결제 현금영수증 발행 취소 API
* Comment by GOSOMI
* @date: 2022-08-09
*/
cashReceiptCancelOnReceipt(cashReceiptCancelRequest: CashReceiptCancelOnReceiptParameters): Promise<null>;
/**
* 별건 현금영수증 발행하기
* Comment by GOSOMI
* @date: 2022-08-09
*/
requestCashReceipt(cashReceiptRequest: RequestCashReceiptParameters): Promise<ReceiptResponseParameters>;
/**
* 별건 현금영수증 취소하기
* Comment by GOSOMI
* @date: 2022-08-09
*/
cancelCashReceipt(cancelCashReceiptRequest: CancelCashReceiptParameters): Promise<ReceiptResponseParameters>;
/**
* 본인인증 REST API 요청
* Comment by GOSOMI
* @date: 2022-11-07
*/
requestAuthentication(authenticateRequest: RequestAuthenticateParameters): Promise<CertificateResponseParameters>;
/**
* 본인인증 승인하기
* Comment by GOSOMI
* @date: 2022-11-07
*/
confirmAuthentication(receipt_id: string, otp?: null | string): Promise<CertificateResponseParameters>;
/**
* 본인인증 SMS 재전송
* Comment by GOSOMI
* @date: 2022-11-07
*/
realarmAuthentication(receipt_id: string): Promise<CertificateResponseParameters>;
/**
* 계좌 자동이체를 위한 빌링키 발급 요청
* Comment by ehowlsla
* @date: 2024-05-27
*/
requestSubscribeAutomaticTransferBillingKey(parameters: SubscriptionBillingTransferRequestParameters): Promise<ReceiptResponseParameters>;
/**
* 계좌 자동이체를 위한 출금 동의 확인 요청
* Comment by ehowlsla
* @date: 2024-05-27
*/
publishAutomaticTransferBillingKey(receipt_id: string): Promise<SubscriptionBillingResponseParameters>;
}
declare const Bootpay: BootpayBackendNodejs;
export { Bootpay };
export default Bootpay;
export * from './lib/response';
export * from './lib/resource';
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Bootpay = void 0;
const resource_1 = require("./lib/resource");
class BootpayBackendNodejs extends resource_1.BootpayBackendNodejsResource {
constructor() {
super();
}
/**
* Get Access Token
* Comment by GOSOMI
* @returns Promise<AccessTokenResponseParameters>
*/
getAccessToken() {
return __awaiter(this, void 0, void 0, function* () {
try {
const { application_id, private_key } = this.bootpayConfiguration;
const response = yield this.post('request/token', {
application_id,
private_key
});
// set Token
this.setToken(response.access_token);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* Lookup Receipt
* Comment by GOSOMI
* @param receiptId: string
* @param lookupUserData: boolean
*/
receiptPayment(receiptId_1) {
return __awaiter(this, arguments, void 0, function* (receiptId, lookupUserData = false) {
try {
const response = yield this.get(`receipt/${receiptId}?lookup_user_data=${lookupUserData ? 'true' : 'false'}`);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* Cancel Payment
* Comment by GOSOMI
* @param cancelPayment: CancelPaymentParameters
* @returns Promise<CancelPaymentParameters>
*/
cancelPayment(cancelPayment) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.post('cancel', Object.assign({}, cancelPayment));
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* Lookup Certificate Data
* Comment by GOSOMI
* @param receiptId: string
* @returns Promise<CertificateResponseParameters>
*/
certificate(receiptId) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.get(`certificate/${receiptId}`);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* ConfirmPayment
* Comment by GOSOMI
* @param receiptId: string
* @returns Promise<ReceiptResponseParameters>
*/
confirmPayment(receiptId) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.post('confirm', {
receipt_id: receiptId
});
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* lookupSubscribeBillingKey
* Comment by GOSOMI
* @param receiptId: string
* @returns Promise<SubscriptionBillingResponseParameters>
*/
lookupSubscribeBillingKey(receiptId) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.get(`subscribe/billing_key/${receiptId}`);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* lookupBillingKey
* Comment by ehowlsla
* @param billingKey: string
* @returns Promise<SubscriptionBillingResponseParameters>
*/
lookupBillingKey(billingKey) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.get(`billing_key/${billingKey}`);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* requestSubscribeBillingKey
* Comment by GOSOMI
* @param subscriptionBillingRequest: SubscriptionBillingRequestParameters
* @returns Promise<SubscriptionBillingResponseParameters>
*/
requestSubscribeBillingKey(subscriptionBillingRequest) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.post('request/subscribe', Object.assign({}, subscriptionBillingRequest));
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* requestSubscribeCardPayment
* Comment by GOSOMI
* @param subscriptionCardRequest: SubscriptionCardPaymentRequestParameters
* @returns Promise<ReceiptResponseParameters>
*/
requestSubscribeCardPayment(subscriptionCardRequest) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.post('subscribe/payment', Object.assign({}, subscriptionCardRequest));
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* requestSubscribePayment
* Comment by ehowlsla
* @param subscriptionRequest: SubscriptionPaymentRequestParameters
* @returns Promise<ReceiptResponseParameters>
*/
requestSubscribePayment(subscriptionRequest) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.post('subscribe/payment', Object.assign({}, subscriptionRequest));
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* destroyBillingKey
* Comment by GOSOMI
* @param billingKey:string
* @returns Promise<DestroySubscribeResponseParameters>
*/
destroyBillingKey(billingKey) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.delete(`subscribe/billing_key/${billingKey}`);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* requestUserToken
* Comment by GOSOMI
* @param userTokenRequest:UserTokenRequestParameters
* @returns Promise<UserTokenResponseParameters>
*/
requestUserToken(userTokenRequest) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.post('request/user/token', Object.assign({}, userTokenRequest));
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* subscribePaymentReserve
* Comment by GOSOMI
* @param subscribePaymentReserveRequest:SubscribePaymentReserveParameters
* @returns Promise<SubscribePaymentReserveResponse>
*/
subscribePaymentReserve(subscribePaymentReserveRequest) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.post('subscribe/payment/reserve', Object.assign({}, subscribePaymentReserveRequest));
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* SubscribeReserve Lookup
* Comment by GOSOMI
* @date: 2023-03-07
* @param reserveId: string
* @returns Promise<SubscribeLookupResponse>
*/
subscribePaymentReserveLookup(reserveId) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.get(`subscribe/payment/reserve/${reserveId}`);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* cancelSubscribeReserve
* Comment by GOSOMI
* @param reserveId:string
* @returns Promise<CancelSubscribeReserveResponse>
*/
cancelSubscribeReserve(reserveId) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.delete(`subscribe/payment/reserve/${reserveId}`);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* 배송시작 REST API 시작
* Comment by GOSOMI
* @date: 2022-06-14
*/
shippingStart(shippingRequest) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.put(`escrow/shipping/start/${shippingRequest.receipt_id}`, shippingRequest);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* 기존결제 현금영수증 발행 API
* Comment by GOSOMI
* @date: 2022-07-28
*/
cashReceiptPublishOnReceipt(cashReceiptPublishRequest) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.post('request/receipt/cash/publish', cashReceiptPublishRequest);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* 기존 결제 현금영수증 발행 취소 API
* Comment by GOSOMI
* @date: 2022-08-09
*/
cashReceiptCancelOnReceipt(cashReceiptCancelRequest) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.delete(`request/receipt/cash/cancel/${cashReceiptCancelRequest.receipt_id}`, {
params: cashReceiptCancelRequest
});
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* 별건 현금영수증 발행하기
* Comment by GOSOMI
* @date: 2022-08-09
*/
requestCashReceipt(cashReceiptRequest) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.post('request/cash/receipt', cashReceiptRequest);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* 별건 현금영수증 취소하기
* Comment by GOSOMI
* @date: 2022-08-09
*/
cancelCashReceipt(cancelCashReceiptRequest) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.delete(`request/cash/receipt/${cancelCashReceiptRequest.receipt_id}`, {
params: cancelCashReceiptRequest
});
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* 본인인증 REST API 요청
* Comment by GOSOMI
* @date: 2022-11-07
*/
requestAuthentication(authenticateRequest) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.post('request/authentication', authenticateRequest);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* 본인인증 승인하기
* Comment by GOSOMI
* @date: 2022-11-07
*/
confirmAuthentication(receipt_id_1) {
return __awaiter(this, arguments, void 0, function* (receipt_id, otp = null) {
try {
const response = yield this.post('authenticate/confirm', {
receipt_id,
otp
});
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* 본인인증 SMS 재전송
* Comment by GOSOMI
* @date: 2022-11-07
*/
realarmAuthentication(receipt_id) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.post('authenticate/realarm', {
receipt_id
});
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* 계좌 자동이체를 위한 빌링키 발급 요청
* Comment by ehowlsla
* @date: 2024-05-27
*/
requestSubscribeAutomaticTransferBillingKey(parameters) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.post('request/subscribe/automatic-transfer', parameters);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
/**
* 계좌 자동이체를 위한 출금 동의 확인 요청
* Comment by ehowlsla
* @date: 2024-05-27
*/
publishAutomaticTransferBillingKey(receipt_id) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.post('request/subscribe/automatic-transfer/publish', {
"receipt_id": receipt_id
});
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
}
const Bootpay = new BootpayBackendNodejs();
exports.Bootpay = Bootpay;
exports.default = Bootpay;
__exportStar(require("./lib/response"), exports);
__exportStar(require("./lib/resource"), exports);
import { AxiosInstance, AxiosRequestConfig } from 'axios';
export interface BootpayRestApiErrorResponse<T = any> {
error_code?: number;
pg_error_code?: number;
message?: string;
}
interface BootpayEntrypoints {
development: string;
stage: string;
production: string;
}
interface BootpayConfiguration {
application_id: string;
private_key: string;
mode?: 'development' | 'production' | 'stage';
}
export declare class BootpayBackendNodejsResource {
$http: AxiosInstance;
$token?: string;
mode: 'development' | 'production' | 'stage';
bootpayConfiguration: BootpayConfiguration;
API_ENTRYPOINTS: BootpayEntrypoints;
apiVersion: string;
sdkVersion: string;
constructor();
/**
* Environments
* Comment by GOSOMI
* @date: 2022-04-12
* @param configuration: BootpayConfiguration
* @returns void
*/
setConfiguration(configuration: BootpayConfiguration): void;
/**
* SET API Version
* Comment by GOSOMI
* @date: 2022-07-29
*/
setApiVersion(version: string): void;
/**
* Set Access Token
* Comment by GOSOMI
* @date: 2022-04-12
*/
setToken(token: string): void;
entrypoints(url: string): string;
get<T = any, D = any>(url: string, config?: AxiosRequestConfig<D>): Promise<T>;
post<T = any, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<T>;
put<T = any, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<T>;
delete<T = any, D = any>(url: string, config?: AxiosRequestConfig<D>): Promise<T>;
}
export {};
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.BootpayBackendNodejsResource = void 0;
const axios_1 = __importDefault(require("axios"));
class BootpayBackendNodejsResource {
constructor() {
this.apiVersion = '5.0.0';
this.sdkVersion = '2.3.0';
this.mode = 'production';
this.$http = axios_1.default.create({
timeout: 60000
});
this.$token = undefined;
this.bootpayConfiguration = {
application_id: '',
private_key: '',
mode: 'production'
};
this.API_ENTRYPOINTS = {
development: 'https://dev-api.bootpay.co.kr/v2',
stage: 'https://stage-api.bootpay.co.kr/v2',
production: 'https://api.bootpay.co.kr/v2'
};
this.$http.interceptors.response.use((response) => {
if (response.request !== undefined && response.headers !== undefined) {
return response.data;
}
else {
// 오류를 리턴
return response.data;
}
}, (error) => {
if (error.response !== undefined) {
return Promise.reject(error.response.data);
}
else {
return Promise.reject({
error_code: -100,
message: `Request Rest Api Failed to Bootpay Server, ${error.message}`
});
}
});
// @ts-expect-error
this.$http.interceptors.request.use((config) => {
if (config.headers !== undefined) {
if (this.$token !== undefined) {
config.headers.authorization = `Bearer ${this.$token}`;
}
config.headers['Content-Type'] = 'application/json';
config.headers['Accept'] = 'application/json';
config.headers['BOOTPAY-SDK-VERSION'] = this.sdkVersion;
config.headers['BOOTPAY-API-VERSION'] = this.apiVersion;
config.headers['BOOTPAY-SDK-TYPE'] = 301;
}
return config;
}, (error) => {
return Promise.reject(error);
});
}
/**
* Environments
* Comment by GOSOMI
* @date: 2022-04-12
* @param configuration: BootpayConfiguration
* @returns void
*/
setConfiguration(configuration) {
if (configuration.mode === undefined) {
configuration.mode = 'production';
}
this.bootpayConfiguration = configuration;
}
/**
* SET API Version
* Comment by GOSOMI
* @date: 2022-07-29
*/
setApiVersion(version) {
this.apiVersion = version;
}
/**
* Set Access Token
* Comment by GOSOMI
* @date: 2022-04-12
*/
setToken(token) {
this.$token = token;
}
entrypoints(url) {
return [this.API_ENTRYPOINTS[this.bootpayConfiguration.mode === undefined ? 'production' : this.bootpayConfiguration.mode], url].join('/');
}
get(url, config) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.$http.get(this.entrypoints(url), config);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
post(url, data, config) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.$http.post(this.entrypoints(url), data, config);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
put(url, data, config) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.$http.put(this.entrypoints(url), data, config);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
delete(url, config) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield this.$http.delete(this.entrypoints(url), config);
return Promise.resolve(response);
}
catch (e) {
return Promise.reject(e);
}
});
}
}
exports.BootpayBackendNodejsResource = BootpayBackendNodejsResource;
export interface AccessTokenResponseParameters {
expire_in: number;
access_token: string;
}
export interface ReceiptResponseParameters {
receipt_id: string;
order_id: string;
price: number;
tax_free: number;
cancelled_price: number;
cancelled_tax_free: number;
order_name: string;
company_name: string;
gateway_url: string;
metadata: string;
sandbox: boolean;
pg: string;
method: string;
method_symbol: string;
method_origin: string;
method_origin_symbol: string;
purchased_at?: Date;
requested_at: Date;
cancelled_at?: Date;
status: number;
status_locale: string;
receipt_url?: string;
card_data?: CardData;
phone_data?: PhoneData;
bank_data?: BankData;
vbank_data?: BankData;
escrow_data?: EscrowData;
cash_receipt_data?: CashReceiptData;
naver_point_data?: NaverPointData;
kakao_moneny_data?: KakaoMoneyData;
payco_point_data?: PaycoPointData;
toss_point_data?: TossPointData;
currency?: string;
}
export interface ExtraModel {
subscribe_test_payment: boolean;
}
export interface UserModel {
id?: string;
username?: string;
phone?: string;
email?: string;
}
export interface CompanyModel {
name?: string;
phone?: string;
zipcode?: string;
addr1?: string;
addr2?: string;
}
export interface ItemModel {
id?: string;
name?: string;
qty?: number;
price?: number;
}
export interface BillingData {
card_no: string;
card_company: string;
card_company_code: string;
card_type: number;
card_hash?: string;
rtn_key_info?: string;
}
export interface CardData {
tid: string;
card_approve_no: string;
card_no: string;
card_quota: string;
card_company_code: string;
card_company: string;
card_interest: string;
receipt_url?: string;
card_type?: string;
card_owner_type?: string;
point?: number;
}
export interface PhoneData {
tid: string;
auth_no?: string;
phone?: string;
receipt_url?: string;
}
export interface BankData {
tid: string;
bank_code: string;
bank_name: string;
bank_username: string;
bank_account?: string;
sender_name?: string;
expired_at?: Date;
cash_receipt_tid?: string;
cash_receipt_type?: string;
cash_receipt_no?: string;
receipt_url?: string;
}
export interface EscrowData {
status: number;
status_locale: string;
shipping_started_at: Date;
receipt_confirmed_at: Date | null;
}
export interface CashReceiptData {
tid?: string;
cash_receipt_type?: number;
cash_receipt_no?: string;
receipt_url?: string;
}
export interface KakaoMoneyData {
tid?: string;
}
export interface NaverPointData {
tid?: string;
}
export interface PaycoPointData {
tid?: string;
}
export interface TossPointData {
tid?: string;
}
export interface CancelPaymentParameters {
receipt_id: string;
cancel_price?: number;
cancel_tax_free?: number;
cancel_id?: string;
cancel_username?: string;
cancel_message?: string;
refund?: Refund;
}
export interface Refund {
bank_account: string;
bank_username: string;
bank_code: string;
}
export interface CertificateResponseParameters {
receipt_id: string;
authenticate_id: string;
pg: string;
method: string;
method_origin: string;
method_origin_symbol: string;
authenticated_at: Date;
requested_at: Date;
status: number;
status_locale: string;
authenticate_data: AuthenticateData;
}
export interface AuthenticateData {
name?: string;
phone?: string;
unique?: string;
birth?: Date;
gender?: number;
foreigner?: number;
carrier?: string;
number_of_realarms?: number;
tid: string;
}
export interface SubscriptionBillingRequestParameters {
pg: string;
method?: string;
order_name: string;
subscription_id: string;
card_no: string;
card_pw: string;
card_identity_no: string;
card_expire_year: string;
card_expire_month: string;
price?: number;
tax_free?: number;
extra: ExtraModel;
user: UserModel;
metadata?: object;
}
export interface SubscriptionBillingTransferRequestParameters {
pg: string;
method?: string;
order_name: string;
subscription_id: string;
auth_type: 'ARS' | '간편인증';
username: string;
bank_name: string;
bank_account: string;
identity_no: string;
cash_receipt_type?: '소득공제' | '지출증빙';
cash_receipt_identity_no?: string;
phone?: string;
price?: number;
tax_free?: number;
extra: ExtraModel;
user: UserModel;
metadata?: object;
}
export interface SubscriptionBillingResponseParameters {
billing_key: string;
billing_data: BillingData;
receipt_id: string;
subscription_id: string;
gateway_url?: string;
metadata: object;
pg: string;
method: string;
method_origin?: string;
method_origin_symbol?: string;
method_symbol?: string;
published_at: Date;
requested_at: Date;
receipt_data: ReceiptResponseParameters;
billing_expire_at: Date;
status: number;
status_locale?: string;
}
export interface SubscriptionCardPaymentRequestParameters {
billing_key: string;
order_name: string;
price: number;
tax_free?: number;
card_quota?: string;
card_interest?: string;
order_id: string;
feedback_url?: string;
content_type?: string;
metadata?: any;
items?: Array<ItemModel>;
user?: UserModel;
extra?: ExtraModel;
}
export interface SubscriptionPaymentRequestParameters {
billing_key: string;
order_name: string;
price: number;
tax_free?: number;
card_quota?: string;
card_interest?: string;
order_id: string;
feedback_url?: string;
content_type?: string;
metadata?: any;
items?: Array<ItemModel>;
user?: UserModel;
extra?: ExtraModel;
}
export interface DestroySubscribeResponseParameters {
billing_key: string;
}
export interface UserTokenRequestParameters {
user_id: string;
email?: string;
username?: string;
gender?: number;
birth?: string;
phone?: string;
}
export interface UserTokenResponseParameters {
user_token: string;
expired_at: Date;
}
export interface SubscribePaymentReserveParameters {
billing_key: string;
order_name: string;
price: number;
tax_free?: number;
order_id: string;
reserve_execute_at: Date;
user?: UserModel;
items?: ItemModel;
metadata?: any;
feedback_url?: string;
content_type?: 'application/json' | 'application/x-www-form-urlencoded';
}
export interface ShippingRequestParameters {
receipt_id: string;
receipt_url: string;
tracking_number: string;
delivery_corp: string;
shipping_prepayment?: boolean;
shipping_day?: number;
user?: UserModel;
company?: CompanyModel;
}
export interface SubscribePaymentReserveResponse {
reserve_id: string;
reserve_execute_at: Date;
}
export interface CancelSubscribeReserveResponse {
reserve_id: string;
success: boolean;
}
export interface CashReceiptPublishOnReceiptParameters {
receipt_id: string;
username?: string;
email?: string;
phone?: string;
identity_no: string;
cash_receipt_type: '소득공제' | '지출증빙';
currency?: string;
}
export interface CashReceiptCancelOnReceiptParameters {
receipt_id: string;
cancel_username?: string;
cancel_message?: string;
}
export interface RequestCashReceiptParameters {
pg: string;
price: number;
tax_free?: number;
order_name: string;
cash_receipt_type: '소득공제' | '지출증빙';
identity_no: string;
purchased_at?: Date;
order_id: string;
user?: UserModel;
extra?: ExtraModel;
}
export interface CancelCashReceiptParameters {
receipt_id: string;
cancel_username?: string;
cancel_message?: string;
}
export interface RequestAuthenticateParameters {
authentication_id: string;
pg: string;
method: string;
username: string;
identity_no: string;
carrier: string;
phone: string;
site_url?: string;
authenticate_type?: 'sms' | 'pass';
order_name: string;
extra?: ExtraModel;
user?: UserModel;
metadata?: object;
}
export interface SubscribePaymentLookupResponse {
reserve_id: string;
receipt_id?: string;
order_id: string;
price: number;
tax_free: number;
order_name: string;
user: UserModel;
feedback_url: string;
metadata?: any;
content_type: 'application/json' | 'application/x-www-form-urlencoded';
version: number;
extra: ExtraModel;
reserve_requested_at: string;
reserve_execute_at: string;
reserve_started_at: string;
reserve_finished_at: string;
reserve_revoked_at: string;
status: number;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
# Bootpay Server Side Package for Node.js [![alt text](https://cdn.bootpay.co.kr/icon/npm.svg)](https://www.npmjs.com/package/@bootpay/backend-js)
## Bootpay Node.js Server Side Library
부트페이 공식 Node.js 라이브러리 입니다 (서버사이드 용)
node환경에서 작성된 어플리케이션, 프레임워크 등에서 사용가능합니다.
* PG 결제창 연동은 클라이언트 라이브러리에서 수행됩니다. (Javascript, Android, iOS, React Native, Flutter 등)
* 결제 검증 및 취소, 빌링키 발급, 본인인증 등의 수행은 서버사이드에서 진행됩니다. (Java, PHP, Python, Ruby, Node.js, Go, ASP.NET 등)
## 기능
1. (부트페이 통신을 위한) 토큰 발급
2. 결제 단건 조회
3. 결제 취소 (전액 취소 / 부분 취소)
4. 신용카드 자동결제 (빌링결제)
4-1. 빌링키 발급
4-2. 발급된 빌링키로 결제 승인 요청
4-3. 발급된 빌링키로 결제 예약 요청
4-4. 발급된 빌링키로 결제 예약 - 취소 요청
4-5. 빌링키 삭제
4-6. 빌링키 조회
5. (생체인증, 비밀번호 결제를 위한) 구매자 토큰 발급
6. 서버 승인 요청
7. 본인 인증 결과 조회
8. (에스크로 이용시) PG사로 배송정보 보내기
## npm으로 설치하기
```
npm install --save @bootpay/backend-js
```
# 사용하기
```javascript
import { Bootpay } from "@bootpay/backend-js";
(async () => {
Bootpay.setConfiguration({
application_id: '5b8f6a4d396fa665fdc2b5ea',
private_key: 'rm6EYECr6aroQVG2ntW0A6LpWnkTgP4uQ3H18sDDUYw='
})
try {
await Bootpay.getAccessToken()
const response = await Bootpay.cancelPayment({
receipt_id: '628b2206d01c7e00209b6087',
cancel_price: 1000,
cancel_username: '테스트 사용자',
cancel_message: '테스트 취소입니다.'
})
console.log(response)
} catch (e) {
console.log(e)
}
})()
```
## 1. (부트페이 통신을 위한) 토큰 발급
부트페이와 서버간 통신을 하기 위해서는 부트페이 서버로부터 토큰을 발급받아야 합니다.
발급된 토큰은 30분간 유효하며, 최초 발급일로부터 30분이 지날 경우 토큰 발급 함수를 재호출 해주셔야 합니다.
```javascript
(async () => {
Bootpay.setConfiguration({
application_id: '59b731f084382614ebf72215',
private_key: 'WwDv0UjfwFa04wYG0LJZZv1xwraQnlhnHE375n52X0U='
})
try {
let response = await Bootpay.getAccessToken()
console.log(response)
} catch (e) {
console.log(e)
}
})()
```
## 2. 결제 단건 조회
결제창 및 정기결제에서 승인/취소된 결제건에 대하여 올바른 결제건인지 서버간 통신으로 결제검증을 합니다.
```javascript
(async () => {
const Bootpay = require('@bootpay/backend-js').Bootpay
Bootpay.setConfiguration({
application_id: '5b8f6a4d396fa665fdc2b5ea',
private_key: 'rm6EYECr6aroQVG2ntW0A6LpWnkTgP4uQ3H18sDDUYw='
})
try {
await Bootpay.getAccessToken()
const response = await Bootpay.receiptPayment('62b12f4b6262500007629fec')
console.log(response)
} catch (e) {
console.log(e)
}
})()
```
## 3. 결제 취소 (전액 취소 / 부분 취소)
price를 지정하지 않으면 전액취소 됩니다.
* 휴대폰 결제의 경우 이월될 경우 이통사 정책상 취소되지 않습니다
* 정산받으실 금액보다 취소금액이 클 경우 PG사 정책상 취소되지 않을 수 있습니다. 이때 PG사에 문의하시면 되겠습니다.
* 가상계좌의 경우 CMS 특약이 되어있지 않으면 취소되지 않습니다. 그러므로 결제 테스트시에는 가상계좌로 테스트 하지 않길 추천합니다.
부분취는 카드로 결제된 건만 가능하며, 일부 PG사만 지원합니다. 요청시 price에 금액을 지정하시면 되겠습니다.
* (지원가능 PG사: 이니시스, kcp, 다날, 페이레터, 나이스페이, 카카오페이, 페이코)
간혹 개발사에서 실수로 여러번 부분취소를 보내서 여러번 취소되는 경우가 있기때문에, 부트페이에서는 부분취소 중복 요청을 막기 위해 cancel_id 라는 필드를 추가했습니다. cancel_id를 지정하시면, 해당 건에 대해 중복 요청방지가 가능합니다.
```javascript
(async () => {
Bootpay.setConfiguration({
application_id: '5b8f6a4d396fa665fdc2b5ea',
private_key: 'rm6EYECr6aroQVG2ntW0A6LpWnkTgP4uQ3H18sDDUYw='
})
try {
await Bootpay.getAccessToken()
const response = await Bootpay.cancelPayment({
receipt_id: '628b2206d01c7e00209b6087',
cancel_price: 1000,
cancel_username: '테스트 사용자',
cancel_message: '테스트 취소입니다.'
})
console.log(response)
} catch (e) {
console.log(e)
}
})()
```
## 4-1. 빌링키 발급
REST API 방식으로 고객으로부터 카드 정보를 전달하여, PG사에게 빌링키를 발급받을 수 있습니다.
발급받은 빌링키를 저장하고 있다가, 원하는 시점, 원하는 금액에 결제 승인 요청하여 좀 더 자유로운 결제시나리오에 적용이 가능합니다.
* 비인증 정기결제(REST API) 방식을 지원하는 PG사만 사용 가능합니다.
```javascript
(async () => {
Bootpay.setConfiguration({
application_id: '5b8f6a4d396fa665fdc2b5ea',
private_key: 'rm6EYECr6aroQVG2ntW0A6LpWnkTgP4uQ3H18sDDUYw='
})
try {
await Bootpay.getAccessToken()
const response = await Bootpay.requestSubscribeBillingKey({
pg: '나이스페이',
order_name: '테스트결제',
subscription_id: (new Date()).getTime(),
card_no: '5570********1074', //카드번호
card_pw: '**', //카드 비밀번호 2자리
card_identity_no: '******', //카드 소유주 생년월일 6자리
card_expire_year: '**', //카드 유효기간 년 2자리
card_expire_month: '**', //카드 유효기간 월 2자리
user: {
username: '홍길동',
phone: '01012345678'
}
})
console.log(response)
} catch (e) {
console.log(e)
}
})()
```
## 4-2. 발급된 빌링키로 결제 승인 요청
발급된 빌링키로 원하는 시점에 원하는 금액으로 결제 승인 요청을 할 수 있습니다. 잔액이 부족하거나 도난 카드 등의 특별한 건이 아니면 PG사에서 결제를 바로 승인합니다.
```javascript
(async () => {
Bootpay.setConfiguration({
application_id: '5b8f6a4d396fa665fdc2b5ea',
private_key: 'rm6EYECr6aroQVG2ntW0A6LpWnkTgP4uQ3H18sDDUYw='
})
try {
await Bootpay.getAccessToken()
const response = await Bootpay.requestSubscribeCardPayment({
billing_key: '62b3d166cf9f6d001bd20d59',
order_name: '테스트 결제',
order_id: (new Date()).getTime(),
price: 100,
tax_free: 0
})
console.log(response)
} catch (e) {
console.log(e)
}
})()
```
## 4-3. 발급된 빌링키로 결제 예약 요청
원하는 시점에 4-1로 결제 승인 요청을 보내도 되지만, 빌링키 발급 이후에 바로 결제 예약 할 수 있습니다. (빌링키당 최대 10건)
```javascript
(async () => {
Bootpay.setConfiguration({
application_id: '5b8f6a4d396fa665fdc2b5ea',
private_key: 'rm6EYECr6aroQVG2ntW0A6LpWnkTgP4uQ3H18sDDUYw='
})
try {
// console.log(new Date((new Date()).getTime() + 5000))
await Bootpay.getAccessToken()
const response = await Bootpay.subscribePaymentReserve({
billing_key: '62b3d166cf9f6d001bd20d59',
order_name: '테스트 결제',
order_id: (new Date()).getTime(),
price: 1000,
reserve_execute_at: new Date((new Date()).getTime() + 5000)
})
console.log(response)
} catch (e) {
console.log(e)
}
})()
```
## 4-4. 발급된 빌링키로 결제 예약 - 취소 요청
빌링키로 예약된 결제건을 취소합니다.
```javascript
(async () => {
Bootpay.setConfiguration({
application_id: '5b8f6a4d396fa665fdc2b5ea',
private_key: 'rm6EYECr6aroQVG2ntW0A6LpWnkTgP4uQ3H18sDDUYw='
})
try {
// console.log(new Date((new Date()).getTime() + 5000))
await Bootpay.getAccessToken()
const response = await Bootpay.subscribePaymentReserve({
billing_key: '62b3d166cf9f6d001bd20d59',
order_name: '테스트 결제',
order_id: (new Date()).getTime(),
price: 1000,
reserve_execute_at: new Date((new Date()).getTime() + 5000)
})
if (response.reserve_id !== undefined) {
const cancel = await Bootpay.cancelSubscribeReserve(response.reserve_id)
console.log(cancel)
}
} catch (e) {
console.log(e)
}
})()
```
## 4-5. 빌링키 삭제
발급된 빌링키로 더 이상 사용되지 않도록, 삭제 요청합니다.
```javascript
(async () => {
Bootpay.setConfiguration({
application_id: '5b8f6a4d396fa665fdc2b5ea',
private_key: 'rm6EYECr6aroQVG2ntW0A6LpWnkTgP4uQ3H18sDDUYw='
})
try {
await Bootpay.getAccessToken()
const response = await Bootpay.destroyBillingKey('62b3d166cf9f6d001bd20d59')
console.log(response)
} catch (e) {
console.log(e)
}
})()
```
## 4-6. 빌링키 조회
(빌링키 발급 완료시 리턴받았던 receipt_id에 한정) 어떤 빌링키였는지 조회합니다.
```javascript
(async () => {
Bootpay.setConfiguration({
application_id: '5b8f6a4d396fa665fdc2b5ea',
private_key: 'rm6EYECr6aroQVG2ntW0A6LpWnkTgP4uQ3H18sDDUYw='
})
try {
await Bootpay.getAccessToken()
const response = await Bootpay.lookupSubscribeBillingKey('62b3cbbecf9f6d001bd20ce8')
console.log(response)
} catch (e) {
console.log(e)
}
})()
```
## 5. 사용자 토큰 발급
(부트페이 단독) 부트페이에서 제공하는 간편결제창, 생체인증 기반의 결제 사용을 위해서는 개발사에서 회원 고유번호를 관리해야하며, 해당 회원에 대한 사용자 토큰을 발급합니다.
이 토큰값을 기반으로 클라이언트에서 결제요청 하시면 되겠습니다.
```javascript
(async () => {
Bootpay.setConfiguration({
application_id: '5b8f6a4d396fa665fdc2b5ea',
private_key: 'rm6EYECr6aroQVG2ntW0A6LpWnkTgP4uQ3H18sDDUYw='
})
try {
await Bootpay.getAccessToken()
const response = await Bootpay.requestUserToken({
user_id: 'gosomi1',
phone:'01012345678'
})
console.log(response)
} catch (e) {
console.log(e)
}
})()
```
## 6. 서버 승인 요청
결제승인 방식은 클라이언트 승인 방식과, 서버 승인 방식으로 총 2가지가 있습니다.
클라이언트 승인 방식은 웹, 앱에서 진행하는 일반적인 방법입니다만, 경우에 따라 서버 승인 방식이 필요할 수 있습니다.
필요한 이유
1. 100% 안정적인 결제 후 고객 안내를 위해 - 클라이언트에서 PG결제 진행 후 승인 완료될 때 onDone이 수행되지 않아 (인터넷 환경 등), 결제 이후 고객에게 안내하지 못할 수 있습니다
2. 단일 트랜잭션의 개념이 필요할 경우 - 재고파악이 중요한 커머스를 운영할 경우 트랜잭션 개념이 필요할 수 있겠으며, 이를 위해서는 서버 승인을 사용해야 합니다.
```javascript
(async () => {
Bootpay.setConfiguration({
application_id: '5b8f6a4d396fa665fdc2b5ea',
private_key: 'rm6EYECr6aroQVG2ntW0A6LpWnkTgP4uQ3H18sDDUYw='
})
try {
await Bootpay.getAccessToken()
const response = await Bootpay.confirmPayment('62876963d01c7e00209b6028')
console.log(response)
} catch (e) {
console.log(e)
}
})()
```
## 7. 본인 인증 결과 조회
다날 본인인증 후 결과값을 조회합니다.
다날 본인인증에서 통신사, 외국인여부, 전화번호 이 3가지 정보는 다날에 추가로 요청하셔야 받으실 수 있습니다.
```javascript
(async () => {
Bootpay.setConfiguration({
application_id: '59b731f084382614ebf72215',
private_key: 'WwDv0UjfwFa04wYG0LJZZv1xwraQnlhnHE375n52X0U='
})
try {
await Bootpay.getAccessToken()
const response = await Bootpay.certificate('625783a6cf9f6d001d0aed19')
console.log(response)
} catch (e) {
console.log(e)
}
})()
```
8. (에스크로 이용시) PG사로 배송정보 보내기
현금 거래에 한해 구매자의 안전거래를 보장하는 방법으로, 판매자와 구매자의 온라인 전자상거래가 원활하게 이루어질 수 있도록 중계해주는 매매보호서비스입니다. 국내법에 따라 전자상거래에서 반드시 적용이 되어 있어야합니다. PG에서도 에스크로 결제를 지원하며, 에스크로 결제 사용을 원하시면 PG사 가맹시에 에스크로결제를 미리 얘기하고나서 진행을 하시는 것이 수월합니다.
PG사로 배송정보( 이니시스, KCP만 지원 )를 보내서 에스크로 상태를 변경하는 API 입니다.
```javascript
(async () => {
Bootpay.setConfiguration({
application_id: '59b731f084382614ebf72215',
private_key: 'WwDv0UjfwFa04wYG0LJZZv1xwraQnlhnHE375n52X0U='
})
try {
await Bootpay.getAccessToken()
const response = await Bootpay.shippingStart({
receipt_id: "62a9379ad01c7e001f7dc1f3",
tracking_number: '123456',
delivery_corp: 'CJ대한통운',
user: {
username: '테스트',
phone: '01000000000',
address: '서울특별시 종로구',
zipcode: '08490'
}
})
console.log(response)
} catch (e) {
console.log(e)
}
})()
```
## Example 프로젝트
[적용한 샘플 프로젝트](https://github.com/bootpay/backend-python-example)을 참조해주세요
## Documentation
[부트페이 개발매뉴얼](https://docs.bootpay.co.kr/next/)을 참조해주세요
## 기술문의
[부트페이 홈페이지](https://www.bootpay.co.kr) 우측 하단 채팅을 통해 기술문의 주세요!
## License
[MIT License](https://opensource.org/licenses/MIT).
MIT License
Copyright (c) 2017 bootpay
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.