취소할 수 있는 결제
- 결과가
done(승인)인 결제 시도만 취소할 수 있습니다. 결과 확인 중(pending)이거나 실패한 시도는 취소할 수 없습니다. - 남은 결제 금액은 시도 금액에서 이미 취소를 마친(
done) 금액을 뺀 값입니다. 그보다 큰 금액은 취소할 수 없습니다. - 한 결제 시도에 결과 확인 중인 취소가 있는 동안에는 새 취소를 요청할 수 없습니다.
- 취소는 그 결제를 요청할 때 쓴 토스페이먼츠 키로 요청됩니다. API 키의 모드가 그 결제의 결제 모드와 다르면 거절됩니다.
콘솔에서 취소하기
1
수납 상세로 들어간다
‘수납과 취소’ 화면에서 달을 고르고 고객 이름을 누릅니다.
2
취소할 승인 결제를 찾는다
승인된 결제마다 ‘승인 결제 취소’ 구역이 있고, 승인액, 취소 완료, 잔액과 취소 내역이 나옵니다.
3
취소 방식을 고른다
남은 금액 전부를 돌려주려면 ‘잔액 전액 취소’를, 일부만 돌려주려면 ‘일부 금액 취소’를 누릅니다. ‘일부 금액 취소’에서는 ‘취소 금액 (원)‘에 잔액보다 작은 금액을 넣습니다. 잔액 전부는 ‘잔액 전액 취소’로만 취소합니다.
4
사유를 적고 요청한다
‘취소 사유’를 적고 요청 버튼을 누릅니다. 일부 취소는 ‘입력한 금액 취소 요청’, 전액 취소는 잔액이 앞에 붙은 ‘전액 취소 요청’ 버튼입니다. 사유는 토스페이먼츠에 그대로 전달됩니다.
API로 취소하기
1
승인된 결제 시도의 id를 찾는다
GET /v1/invoices/{id}/payment-attempts로 인보이스의 결제 시도를 조회하고 status가 done인 시도의 id를 고릅니다.cURL
2
멱등 키를 만들어 저장한다
취소 요청마다 UUID를 하나 만들어 도입사 쪽에 저장합니다. 응답을 받지 못해 다시 보낼 때 같은 값을 씁니다.
3
취소를 요청한다
POST /v1/payment-attempts/{id}/cancellations에 사유와 금액을 보냅니다. amount를 빼면 남은 결제 금액 전부를 취소합니다.4
결과를 확인한다
응답은 결과와 관계없이 201이고
status로 결과를 구분합니다.응답 201
결과 확인 중인 취소는 MeterEngine이 토스페이먼츠에 다시 물어
done이나 failed로 정합니다. 요청하고 10분이 지나도 토스페이먼츠에 맞는 취소 거래가 없으면 failed와 NOT_FOUND_CANCELLATION으로 끝납니다. 확인 작업의 주기는 시간 규칙에 있습니다.
failure_code에는 토스페이먼츠의 취소 거절 코드(예: NOT_CANCELABLE_AMOUNT)가 그대로 들어가고, 아래 값은 MeterEngine이 정한 것입니다.
취소 내역은
GET /v1/payment-attempts/{id}/cancellations로 조회합니다. 요청 시각이 늦은 것부터 payment_cancellations 배열로 나옵니다.
멱등 키
Idempotency-Key는 선택이지만 보내기를 권합니다. 키 없이 보낸 요청이 응답 없이 끊긴 뒤 다시 보내면, 첫 요청이 이미 취소됐을 때 남은 금액에서 한 번 더 취소될 수 있습니다. 키 형식(UUID만)과 충돌 code, 다른 API와 다른 점은 멱등 규칙에 있습니다. 취소에서 따로 챙길 것은 아래와 같습니다.
- 같은 키로 다시 보내면 처음 만든 취소를 지금 상태 그대로 돌려줍니다. 처음 것이
failed였으면failed가 그대로 돌아오니, 다시 취소하려면 새 키를 씁니다. amount를 뺀 요청과 같은 금액을 적은 요청은 다른 요청으로 봅니다. 다시 보낼 때는 처음 본문을 그대로 보냅니다.
오류
오류 응답 형식은 오류 응답과 X-Request-ID에 있습니다.
취소 뒤 상태
취소를 마치면 인보이스별 결제 상태(GET /v1/invoice-payments)의 canceled_amount가 늘고 status가 일부 취소면 partially_canceled(부분 취소), 전액 취소면 canceled(전액 취소)가 됩니다. 수납 상태 값 전체는 수납 상태와 대사 확인에 있습니다.
취소가 done이 되면 payment_canceled 웹훅이 갑니다. amount에는 이번 취소 금액이 실립니다. 형식은 웹훅 이벤트 유형과 data에 있습니다.
고객 조회 링크 화면에 취소가 어떻게 보이는지는 고객에게 인보이스 보여 주기에 있습니다.