현금영수증

현금영수증 취소

발행 방식에 맞춰 현금영수증을 취소해요.

발행한 현금영수증은 취소할 수 있어요. 결제 건에 발행​​한 영수증과 별건 발행​​한 영수증은 취소 엔드포인트가 달라요. 발행 시 사용한 방식에 맞춰 호출해요.

모두 서버에서 Basic Auth로 호출해요.

발행 방식 취소 엔드포인트
결제 건에 발행 (/request/receipt/cash/publish) DELETE /v2/request/receipt/cash/cancel/{receipt_id}
별건 발행 (/request/cash/receipt) DELETE /v2/request/cash/receipt/{receipt_id}

1결제 건 발행분 취소

결제 건에 발행한 현금영수증을 취소해요. 취소 대상은 결제의 receipt_id예요.

DELETEhttps://api.bootpay.co.kr/v2/request/receipt/cash/cancel/{receipt_id}Basic Auth
파라미터 위치 필수 설명
receipt_id Path 필수 현금영수증을 발행했던 결제의 영수증 ID
취소자명·취소 사유는 받지 않아요

결제 건 발행분 취소는 cancel_username·cancel_message를 본문에 담아 보내도 사용하지 않아요​. 서버가 받아들이기만 하고 PG로 전달하거나 저장하지 않으니, 취소 사유를 남겨야 한다면 가맹점 쪽에 별도로 기록해요.

curl -X DELETE "https://api.bootpay.co.kr/v2/request/receipt/cash/cancel/RECEIPT_ID" \
  -H "Authorization: Basic $(printf '%s' 'CLIENT_KEY:SECRET_KEY' | base64)"bash
응답 본문

결제 건 발행분 취소는 성공 시 HTTP 200​​에 본문 null(JSON 리터럴)을 돌려줘요. 빈 문자열이 아니라 null이므로 JSON 파서가 null을 반환해도 정상이에요. 에러가 없으면 취소된 것으로 처리하고, 필요하면 결제 조회로 현금영수증 발행 여부를 확인해요.


2별건 발행분 취소

별건 발행한 현금영수증을 취소해요. 취소 대상은 별건 발행 응답에서 받은 receipt_id예요.

DELETEhttps://api.bootpay.co.kr/v2/request/cash/receipt/{receipt_id}Basic Auth
파라미터 위치 필수 설명
receipt_id Path 필수 별건 발행 시 받은 현금영수증 영수증 ID
cancel_username Body 선택 취소자명
cancel_message Body 선택 취소 사유
curl -X DELETE "https://api.bootpay.co.kr/v2/request/cash/receipt/RECEIPT_ID" \
  -H "Authorization: Basic $(printf '%s' 'CLIENT_KEY:SECRET_KEY' | base64)" \
  -H "Content-Type: application/json" \
  -d '{ "cancel_username": "홍길동", "cancel_message": "오발행 취소" }'bash

응답 예시

{
  "receipt_id": "62f356871fc192036f9f4ae2",
  "order_id": "cash_1700000000",
  "price": 10000,
  "tax_free": 0,
  "cancelled_price": 10000,
  "cancelled_tax_free": 0,
  "order_name": "현장 수령 현금결제",
  "company_name": "테스트상점",
  "gateway_url": "https://api.bootpay.co.kr",
  "metadata": {},
  "sandbox": false,
  "pg": "나이스페이먼츠",
  "method": "현금영수증",
  "method_symbol": "cash_receipt",
  "method_origin": "현금영수증",
  "method_origin_symbol": "cash_receipt",
  "purchased_at": "2026-04-10T15:56:08+09:00",
  "cancelled_at": "2026-04-10T17:27:20+09:00",
  "requested_at": "2026-04-10T15:56:02+09:00",
  "status_locale": "현금영수증발행취소",
  "currency": "KRW",
  "status": 61,
  "cash_receipt_data": {
    "tid": "Ae75jWNka9lpP2YxJ4K87RXb62PYLrRGZwXLObgyB0vMDm1d",
    "cash_receipt_type": 1,
    "cash_receipt_no": "158190158",
    "receipt_url": "https://.../receipts/cash-receipt/..."
  }
}json
cancel_tid 자리

cash_receipt_data에는 취소 거래 ID를 담는 cancel_tid 키 자리가 있지만, 현금영수증 취소 흐름에서는 이 값이 채워지지 않아 응답에서 빠져요. 취소 여부는 status(61)와 cancelled_at으로 판단해요.


에러 코드

공통 에러

인증·권한 관련 에러는 에러 코드표를 참고해요.

코드 의미 대처 방법
RC_NOT_FOUND 영수증 정보를 찾지 못했습니다 receipt_id가 올바른지 확인해요
RC_CASH_RECEIPT_CANCEL_NOT_ABLE (2816) 별건으로 현금영수증 발행이 된 결제가 아닙니다 — 실제로는 "이 결제 건에 현금영수증이 발행되어 있지 않다"는 뜻이에요 (결제 건 발행분 취소) 발행 여부를 먼저 조회해요
RC_NOT_CASH_RECEIPT (2805) 별건 현금영수증이 아닙니다 (별건 발행분 취소) 결제 건 발행분은 /request/receipt/cash/cancel/{receipt_id}로 취소해요
RC_CASH_RECEIPT_ALREADY_CANCELLED (2804) 이미 취소된 현금영수증입니다 상태(status: 61)를 먼저 조회해요
RC_CASH_RECEIPT_NOT_SUCCESS (2806) 발행 완료 상태(status: 60)가 아닙니다 발행 결과를 먼저 확인해요
RC_CASH_RECEIPT_CANCEL_FAILED (2047) 현금영수증 취소에 실패했습니다 PG가 취소 실패로 응답했거나 취소 처리 중 예외가 난 경우예요. pg_error_codemessage로 PG 응답을 확인해요. 발행 방식과 취소 엔드포인트가 어긋난 경우는 2805·2816으로 따로 내려와요
RC_CASH_RECEIPT_CANCEL_ERROR (2807) 취소 처리 중 서버 오류가 발생했습니다 message를 확인하고 재시도해요
2047·2807은 message가 비어 보일 수 있어요

이 두 코드는 한국어 메시지가 정의돼 있지 않아서, PG 응답 메시지가 없으면 messageTranslation missing: ko.error.code.2047 같은 문자열로 내려와요. 분기 처리는 message가 아니라 error_code 기준으로 작성해요.