현금영수증은 계좌이체·가상계좌·현금 같은 현금성 결제에 대해 발행하는 증빙이에요. 소비자는 연말정산 소득공제를, 사업자는 비용 지출 증빙을 받을 수 있어요. Bootpay는 결제 건에 현금영수증을 붙이거나, 결제와 무관하게 현금영수증만 단독으로 발행할 수 있어요.
발행 유형
발행 시 cash_receipt_type으로 용도를 지정해요.
| 유형 | 값 | 용도 | 식별번호(identity_no) |
|---|---|---|---|
| 소득공제 | 소득공제 |
개인 소비자의 연말정산 소득공제 | 휴대폰번호 또는 주민등록번호 |
| 지출증빙 | 지출증빙 |
사업자의 비용 지출 증빙 | 사업자등록번호 |
서버는 cash_receipt_type이 정확히 문자열 지출증빙일 때만 지출증빙으로 처리하고,
그 외의 모든 값(오타·영문·빈 값 포함)은 소득공제로 발행해요. 오타가 나도 오류가 나지 않으니 주의해요.
identity_no는 현금영수증을 귀속시킬 대상을 식별하는 번호예요. 소득공제는 보통 휴대폰번호, 지출증빙은 사업자등록번호를 사용해요.
세 가지 발행 방식
| 방식 | 언제 쓰나 | API |
|---|---|---|
| 결제 시 자동 발행 | 결제창에서 사용자가 현금영수증 정보를 입력하도록 둘 때. extra.display_cash_receipt는 기본값이 true라 아무것도 넣지 않아도 PG 입력창이 표시됨 |
결제 요청 파라미터 |
| 결제 건에 발행 | 이미 완료된 결제(receipt_id)에 현금영수증을 나중에 붙일 때 |
발행 — 결제 건에 발행 |
| 별건 발행 | 결제와 무관하게 현금영수증만 단독으로 발행할 때 (오프라인 현금 수령 등) | 발행 — 별건 발행 |
가상계좌·계좌이체 결제 시 PG의 현금영수증 입력창은 기본으로 표시돼요. extra.display_cash_receipt의 기본값이 true라 값을 넣지 않아도 입력창이 뜨고, 표시하지 않으려면 extra.display_cash_receipt: false 를 보내요. 사용자가 입력창에서 정보를 넣으면 입금/결제 완료 시 PG가 자동으로 현금영수증을 발행하고, 이 경우 별도 발행 API 호출이 필요 없어요. 이 문서의 발행 API는 자동 발행을 쓰지 않거나, 결제 후/결제와 별개로 직접 발행해야 할 때 사용해요.
지원 PG
현금영수증 단독 발행은 PG사 지원 여부에 따라 달라요. 대표적으로 이니시스, 토스페이먼츠, 페이앱, 나이스페이먼츠에서 지원해요.
별건 발행 시 user(이름·전화번호·이메일)는 이니시스·페이앱·나이스페이먼츠에서 그대로 PG로 전달돼요. 서버가 user를 검증하지는 않기 때문에 빠뜨려도 부트페이 단계에서는 오류가 나지 않고, PG 응답 오류(RC_CASH_RECEIPT_FAILED)로 나타나요. 토스는 user를 사용하지 않아요.
상태값
| status | 의미 |
|---|---|
60 |
현금영수증발행완료 |
61 |
현금영수증발행취소 |
-60 |
현금영수증발행실패 |
-61 |
현금영수증취소실패 |
위 상태값은 별건 발행으로 새로 만들어진 영수증에만 붙어요. 결제 건에 발행하거나 그 발행분을 취소하는 경우에는 원 결제의 status가 그대로 유지돼요(결제완료면 계속 1).
그래서 결제 건의 현금영수증 발행 여부는 status가 아니라 bank_data(계좌이체)·vbank_data(가상계좌) 안의 cash_receipt_no 존재 여부로 판단해요. 취소되면 이 값이 지워져요.
