UNPKG

@yuju/tosspayments-sdk

Version:

Toss Payments SDK for Node.js

80 lines (79 loc) 2.89 kB
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); }); } }