2023년 8월 23일 ・ 읽는 시간 7분
거래는 결제와 어떻게 다르고, 어떻게 구분해야 할까요? 거래에는 결제 거래, 부분 취소 거래, 취소 거래가 있어요. 즉 모든 결제는 거래이고, 모든 취소도 거래죠.
최초의 결제 거래 이후에 생기는 거래는 결제 상태 변화로 이해할 수도 있어요. '결제 승인' 상태였던 거래가 '부분 취소' 혹은 '취소' 상태가 된 것으로요. 이렇게 결제와 거래는 각각 Payment 객체와 Transaction 객체로 표현돼요. Payment 객체는 결제 거래에 대한 자세한 정보를 가지고 있어요. Transaction 객체는 결제 거래, 취소 거래 각각에 대한 정보를 담고 있어요.
결제와 취소 예제를 통해 더 자세히 이해해 볼게요. 이 가이드는 최신 API 버전 2022-11-16을 기반으로 합니다.
최초 결제 거래가 일어나면 결제 상태를 나타내는 status
값은 Payment 객체, Transaction 객체 둘 다 결제 승인을 나타내는 DONE
이에요.
결제가 요청되는 순간 Payment 객체가 생겨요. 이 결제를 특정하기 위해 토스페이먼츠에서 paymentKey
를 만들어요.
요청된 결제가 승인되면 Transaction 객체도 생기고 이 거래를 특정하는 transactionKey
도 만들어져요. 이 값은 Payment 객체의 lastTransactionKey
에 할당되죠.
이후 일부 금액만 취소하는 '부분 취소 거래'가 일어나면 Payment.cancels
에 취소된 거래 객체가 배열로 추가됩니다.
이때 '결제 거래'를 특정하던 lastTransactionKey
가 '부분 취소 거래'를 특정하는 transactionKey
로 대체됩니다.
결제 승인 거래 객체에 더해 취소 거래 객체가 하나 더 추가됩니다.
마지막으로 한 번 더 '부분 취소 거래'가 일어나면, Payment.cancels
에 취소 객체가 하나 더 추가됩니다.
마찬가지로 '부분 취소 거래'를 특정하는 새로운 transactionKey
가 lastTransactionKey
에 할당됩니다.
한 번의 결제 거래와 두 번의 부분 취소 거래로 Transaction 객체는 총 세 개가 됩니다. 즉, 하나의 결제에 대해 세 개의 거래가 생긴 것이죠.
즉, Payment 객체의 paymentKey
는 변하지 않고, lastTransactionKey
는 매 거래마다 새로 만들어진 transactionKey
로 대체돼요.
거래 조회 API를 사용하는 여러 방법을 알아봅니다.
하루 동안의 거래 기록을 조회하려면 startDate
와 endDate
에 초 단위까지 시간 정보에 포함해서 요청해야 합니다.
예를 들어 2022년 1월 1일 하루 동안의 기록 전체를 조회하려면 아래와 같이 startDate
를 2022-01-01T00:00:00
로, endDate
를 2022-01-01T23:59:59
로 설정해야 합니다.
응답으로 2022-01-01T00:00:00
부터 2022-01-02T00:00:00
전까지의 기록이 돌아옵니다.
만약 거래 기록 조회의 Query 파라미터에 날짜 정보만 있다면 시간은 자동으로 00:00:00
으로 설정된다는 점을 유의하세요.
위와 같이 startDate
와 endDate
가 시간 정보 없이 같은 날짜로 설정되어 있다면 자동 시간 설정으로 인해 동일한 날짜와 시간을 가리키게 됩니다. 따라서 위 2022년 1월 1일 0시 0분 0초 정각에 난 거래만 조회됩니다.
특정 거래 기록 이후부터 조회하고 싶다면 startingAfter
에 특정하고 싶은 거래의 transactionKey
값을 넣어주면 됩니다.
예를 들어 아래 요청은 2022년 1월 1일부터 1월 10일 사이의 거래 기록 중 paymentKey
가 5OhJr1hOealGAknFDLN16
인 기록 다음 건부터 거래 기록을 조회합니다.
거래 조회 응답에서 paymentKey
가 같고 transactionKey
는 다른 여러 개의 거래 기록이 배열로 들어올 수 있습니다. 하나의 결제 건에서 금액 지불, 결제 취소, 결제 부분 취소와 같이 여러 번의 거래가 일어날 수 있기 때문입니다.
응답으로 돌아온 객체의 status
값을 보면 어떤 거래가 이루어졌는지 알 수 있습니다.
Writer 한주연 Graphic 이은호, 이나눔
📍 함께 읽으면 좋을 콘텐츠