@yuju/tosspayments-sdk
Version:
Toss Payments SDK for Node.js
80 lines (79 loc) • 2.89 kB
JavaScript
import { filterUndefined } from '../utils/filterUndefined.js';
import { makeTossPaymentsResult } from '../utils/makeTossPaymentsResult.js';
import { validateCancelRequestBody, } from '../types/requestTypes.js';
/**
* 결제 API
*/
export class PaymentApi {
constructor(client) {
Object.defineProperty(this, "client", {
enumerable: true,
configurable: true,
writable: true,
value: client
});
}
/**
* 결제 승인
* @see https://docs.tosspayments.com/reference#%EA%B2%B0%EC%A0%9C-%EC%8A%B9%EC%9D%B8
* @param paymentConfirmRequest 결제 승인 요청
* @param idempotencyKey 멱등키
* @return 결제 정보
*/
async confirm(paymentConfirmRequest, idempotencyKey) {
return makeTossPaymentsResult(async () => {
return this.client.post(filterUndefined({
'Content-Type': 'application/json',
'Idempotency-Key': idempotencyKey,
}), '/v1/payments/confirm', paymentConfirmRequest);
});
}
/**
* 결제 조회
* @param paymentInquiryRequest 결제 조회 요청
* @return 결제 정보
*/
async inquiry(paymentInquiryRequest) {
if (paymentInquiryRequest.paymentKey) {
return makeTossPaymentsResult(async () => {
return this.client.get('/v1/payments/' + paymentInquiryRequest.paymentKey);
});
}
else if (paymentInquiryRequest.orderId) {
return makeTossPaymentsResult(async () => {
return this.client.get('/v1/payments/orders/' + paymentInquiryRequest.orderId);
});
}
throw new Error('paymentKey or orderId is required');
}
/**
* 결제 취소
* @param paymentKey 결제 키
* @param paymentCancelRequest 결제 취소 요청
* @param idempotencyKey 멱등키
* @return 결제 정보
*/
async cancel(paymentKey, paymentCancelRequest, idempotencyKey) {
validateCancelRequestBody(paymentCancelRequest);
return makeTossPaymentsResult(async () => {
return this.client.post(filterUndefined({
'Content-Type': 'application/json',
'Idempotency-Key': idempotencyKey,
}), `/v1/payments/${paymentKey}/cancel`, paymentCancelRequest);
});
}
/**
* 카드 번호로 결제
* @param paymentKeyInRequest 결제 요청
* @param idempotencyKey 멱등키
* @return 결제 정보
*/
async keyIn(paymentKeyInRequest, idempotencyKey) {
return makeTossPaymentsResult(async () => {
return this.client.post(filterUndefined({
'Content-Type': 'application/json',
'Idempotency-Key': idempotencyKey,
}), '/v1/payments/key-in', paymentKeyInRequest);
});
}
}