6. 일반결제와 환불(취소)
서비스에서 일어난 결제 내역을 확인하고, 일반결제(단건 결제)를 취소(환불) 하는 화면입니다. 구독 정기결제와 일반결제를 한 목록에서 함께 볼 수 있습니다.
🍎
6.1 결제 내역 보기
왼쪽 메뉴에서 결제를 누르면 결제 목록이 열립니다.
각 줄에는 주문번호, 서비스, 종류(구독 / 일반), 사용자, 유형(회차), 금액, 상태(완료 / 실패 / 대기 / 취소), 실패 코드, 요청 시각, 매출전표가 보입니다. 환불(취소)된 건은 금액 아래에 "환불 N원 · 수수료 M원"이 작게 함께 표시됩니다. 취소(환불) 이력이 있는 결제는 그 행 바로 아래에 회차별 취소 내역이 한 줄씩 하위 행으로 붙습니다 — 왼쪽에 "↳ 취소 N회차", 사유와 처리 주체(관리자/서비스/시스템), 금액 칸에 환불액(−표시)과 수수료, 시각 칸에 취소 시각이 본문 표의 칸에 맞춰 표시되어, 부분취소를 여러 번 한 결제도 언제 얼마씩 환불했는지 목록에서 바로 확인할 수 있습니다.
각 취소 하위 행 오른쪽 끝에는 메모 버튼이 있습니다. [메모 +]를 누르면 모달에서 회차별 메모를 입력할 수 있고(최대 150자, 입력 중 글자 수 표시), 모달 상단에는 어떤 취소에 메모를 다는지 대상 정보(주문번호·회차·취소 시각·환불액·수수료·처리 주체·사유)가 함께 표시됩니다. 이미 메모가 있으면 [메모 ✎]로 표시되며 같은 모달에서 수정합니다(빈 값으로 저장하면 메모 삭제). 메모가 있는 버튼에 마우스를 올리면 내용이 팝업으로 바로 보여, 모달을 열지 않고도 확인할 수 있습니다. 모달이 열려 있는 동안 뒤 화면은 클릭·키보드 입력·스크롤이 모두 잠기며, ESC 또는 [닫기]로 모달을 닫으면 원래대로 돌아옵니다.
(취소를 회차별로 기록하는 장부(원장)를 도입하기 전에 일어난 취소는 "도입 이전 취소분 합산" 1건으로 표시됩니다.) 단건(일반) 결제처럼 토스에 전달된 주문번호가 다른 건은 주문번호 아래에 "토스: t…" 형태로 토스 주문번호가 작게 병기됩니다 — 토스 상점 콘솔의 주문번호와 같은 값이라 콘솔과 1:1 대조에 쓰입니다.
💡참고: 시스템 관리자는 모든 서비스의 결제를 보고, 서비스 담당자는 자신이 담당하는 서비스의 결제만 보입니다. 목록의 서비스·요금제 드롭다운에도 담당 서비스만 나타납니다.
목록 맨 오른쪽 매출전표 칸은 그 결제의 카드 영수증으로 가는 링크입니다. → 자세한 사용법은 아래 6.1.2 매출전표(영수증) 보기를 참고하세요.
💡참고: "종류"가 구독이면 정기결제, 일반이면 단건(1회성) 결제입니다. 환불(취소) 버튼은 일반결제에만 이 화면에서 제공됩니다. 구독을 그만 쓰게 하려면(해지) 구독 관리에서 처리하세요.
검색·필터로 원하는 결제를 빠르게 찾을 수 있습니다.
| 필터 | 설명 |
|---|---|
| 검색어 | 주문번호·토스 주문번호 또는 사용자 ID(external_user_id — 고객 이메일)의 일부 — 토스 콘솔에서 복사한 주문번호로 바로 검색 가능 |
| 서비스 | 특정 서비스의 결제만 |
| 요금제 | 특정 요금제의 결제만 (구독 결제에만 적용 — 단건 결제는 요금제가 없어 자동 제외됨) |
| 종류 | 구독 / 일반 / 전체 |
| 상태 | 완료 / 실패 / 대기 / 취소 / 전체 |
| 날짜 범위 | 요청 시각 기준 시작일~종료일 |
주문번호·금액·상태·요청 시각 머리글을 누르면 정렬됩니다. 기본 정렬은 요청 시각 최신순입니다.
💡팁: 결제가 실패한 경우, 실패 코드에 마우스를 올리면 "한도 초과", "정지된 카드"처럼 한글 설명이 풍선으로 떠서 원인을 바로 알 수 있습니다.
목록 위쪽 [엑셀] 버튼으로 현재 필터가 적용된 전체 내역을 내려받을 수 있습니다(주문번호·토스 주문번호·서비스·종류·사용자·유형·금액·상태·실패코드·요청시각). 한 번에 내려받는 행 수에는 상한이 있어, 매우 많은 내역은 날짜 범위 등으로 나눠서 받는 것이 좋습니다.
6.1.1 결제 상태와 종류·유형 한눈에 보기
목록·상세에서 쓰이는 배지의 의미는 다음과 같습니다.
상태
| 배지 | 값 | 의미 |
|---|---|---|
| 대기 | PENDING | 결제 요청은 만들어졌지만 토스 승인 응답을 아직 못 받은 상태(통신 지연 등). 시간이 지나면 완료/실패로 바뀝니다. |
| 완료 | DONE | 토스 승인 완료(정상 결제). |
| 실패 | FAILED | 토스가 거절했거나 통신 오류. 실패 코드·메시지가 함께 기록됩니다. |
| 취소 | CANCELED | 승인 후 전액 환불 처리되어 종료된 상태. |
💡참고: 일반결제를 일부만 환불하면 상태는 완료를 유지한 채 부분취소 배지가 함께 표시됩니다. 남은 금액을 모두 환불해야 취소로 바뀝니다.
종류
| 값 | 의미 |
|---|---|
| 구독(SUBSCRIPTION) | 구독에 묶인 정기(자동) 결제 |
| 일반(ONE_OFF) | 구독과 무관한 단건 즉시 결제 |
유형(회차) — 구독 결제의 회차를 구분합니다(일반결제는 항상 ONE_OFF).
| 값 | 의미 |
|---|---|
| FIRST | 최초 결제(첫 구독 시 할인 적용 대상) |
| RENEWAL | 정기 자동 갱신 결제 |
| RETRY | 결제 실패(미납) 상태에서 재시도한 결제 |
| ONE_OFF | 단건(구독 무관) 결제 |
6.1.2 매출전표(영수증) 보기
결제 목록의 맨 오른쪽 열에는 각 결제의 매출전표(카드 영수증) 링크가 있습니다.
매출전표(파란 글씨) 링크를 누르면, 그 결제의 매출전표(카드 영수증)가 새 탭으로 열립니다. 토스페이먼츠가 호스팅하는 페이지이며, 결제 일시·카드사·승인번호·금액 등이 담겨 있어 인쇄하거나 PDF로 저장할 수 있습니다.
💡참고: 매출전표 화면의 주문번호에는 토스가 상점 구분용 접두어(예:
19e341_)를 붙여 표시합니다. 우리 시스템·토스 상점 콘솔의 주문번호에는 없는 값이니, 전표의 주문번호로 검색할 때는_뒤 부분(= 토스 주문번호)을 복사해 결제 목록 검색창에 붙여넣으세요.
언제 보이고 안 보이는지는 다음과 같습니다.
| 상태 | 매출전표 칸 | 이유 |
|---|---|---|
| 카드결제 완료(DONE) | 매출전표 링크 | 승인 시 토스 응답에 영수증 URL이 담겨 저장됨 |
| 실패(FAILED)·대기(PENDING) | - |
승인이 안 됐으므로 영수증이 없음 |
| 과거 일부 완료 건 | - |
영수증 URL이 저장되지 않았던 예전 결제 |
💡참고: 매출전표 링크는 승인 시점에 토스가 내려준 영수증 주소를 그대로 저장해 띄우는 것입니다(서버가 새로 만들지 않음). 따라서 카드 결제 완료 건에만 나타나고, 가상계좌 등 영수증이 없는 수단이나 미승인 건에는
-로 표시됩니다.주의: 토스 테스트 환경에서는 매출전표가 실제로 발행되지 않아 링크가
-로 보이거나 빈 페이지가 열릴 수 있습니다. 실제 매출전표는 운영(라이브) 결제에서 확인됩니다.
6.2 결제 상세 화면
목록에서 주문번호를 누르면 결제 1건의 상세가 열립니다. 다음 정보를 한눈에 볼 수 있습니다.
- 주문번호, 토스 주문번호(토스 상점 콘솔의 주문번호와 동일 — 구독 결제처럼 같은 값이면 "주문번호와 동일"로 표시), 상품명, 종류·유형
- 서비스, 사용자(external_user_id)
- 결제 카드 — 실제 결제에 쓰인 카드 번호를 우선 표시하고, 없으면 현재 보관함 카드로 대체합니다. 옆의 [카드 상세] 링크로 카드 화면으로 이동할 수 있습니다.
- 금액, 상태(부분취소 시 배지 함께 표시)
- 실패 코드·메시지(실패한 경우)
- 요청 시각, 승인 시각, 토스 결제키(paymentKey — 토스가 결제 1건마다 부여하는 고유 번호)
- 연결된 구독(구독 결제인 경우)
화면 아래에는 원본 응답 카드가 있어, 토스페이먼츠가 돌려준 응답(JSON)을 그대로 펼쳐 볼 수 있습니다. 카드 정보·영수증 URL 등 사후 확인·문의 대응에 쓰입니다.
일반결제이고 환불 가능한 금액이 남아 있으면, 이 화면 아래에 결제 취소 카드가 나타납니다. 취소·환불 내역 카드는 취소(환불) 이력이 있는 결제라면 종류와 무관하게 나타납니다(구독 결제의 요금제 변경 환불 포함).
💡참고: 결제 취소(환불) 버튼은 일반결제(단건)에만 나타납니다. 구독 결제 상세에는 취소 버튼이 없습니다.
6.3 결제 취소(환불)하기 — 관리자
일반결제의 상세 화면에서 전액 취소와 부분 취소를 모두 할 수 있습니다. 관리자 취소는 수수료가 붙지 않아, 입력한 금액이 그대로 고객에게 환불됩니다.
⚠️중요: 관리자 취소는 여러 번 나눠서(누적) 할 수 있습니다. 예를 들어 10,000원 결제에서 3,000원을 먼저 환불하고, 나중에 2,000원을 더 환불하는 식입니다. 남은 환불 가능 금액이 0이 될 때까지 계속 취소할 수 있습니다.
⚠️ 고객이 먼저 취소해 수수료가 떼인 결제라면, 그 수수료만큼은 관리자도 환불할 수 없습니다. 수수료는 고객에게 돌려주는 돈이 아니라 서비스가 보유하는 금액이기 때문입니다.
예) 10,000원 결제 · 취소 수수료 10%에서 고객이 5,000원을 취소한 경우 — 고객은 4,500원을 환불받고 수수료 500원은 서비스가 가집니다. 관리자의 남은 환불 가능액은 5,000원입니다(= 10,000 − 4,500(환불) − 500(수수료)). 5,500원이 아닙니다. 결제대행사(토스)에는 수수료 500원이 취소되지 않은 채 남아 서비스 매출로 정산됩니다.
이 계산 근거는 결제 취소 카드에 안내 문구로 함께 표시되므로, 화면에서 바로 확인할 수 있습니다.
🔒 관리자가 한 번 취소하면, 그 결제는 이후 고객(외부 서비스)이 직접 취소할 수 없습니다. 잔여 금액이 남아 있어도 마찬가지이며, 남은 금액은 관리자만 취소할 수 있습니다. 고객 응대나 수동 조정이 진행 중인 결제에 서비스의 자동 취소가 겹쳐 이중환불·정산 혼선이 생기는 것을 막기 위한 규칙입니다.
고객 화면에서는 취소 버튼이 비활성으로 표시되고 "고객센터로 문의해주세요" 안내가 뜹니다(연동 서비스가
cancel_blocked_reason값을 사용). 고객이 취소를 문의해 오면 이 화면에서 관리자가 대신 처리하면 됩니다.예) 고객이 3,000원 부분취소 → 관리자가 2,000원 부분취소 → 이후 고객은 남은 5,000원을 직접 취소할 수 없고, 관리자만 취소할 수 있습니다.
6.3.1 전액 취소
- 결제 상세에서 결제 취소 카드를 찾습니다.
- 금액·비율 칸을 모두 비워둔 채 [취소 실행]을 누릅니다. "전액 N원 환불"이라고 미리 보입니다.
- 확인 창에서 승인하면 남은 금액 전부가 환불됩니다.
6.3.2 부분 취소 (금액으로)
- 취소 금액(원) 칸에 환불할 금액을 적습니다(예: 3000).
- 아래 미리보기에 "3,000원 환불"이라고 표시됩니다.
- [취소 실행] → 확인하면 그 금액만 환불됩니다.
6.3.3 부분 취소 (비율로)
- 비율(%) 칸에 숫자를 적습니다(예: 30).
- 남은 금액의 30%가 자동으로 계산되어 취소 금액에 채워지고 미리보기에 표시됩니다.
- [취소 실행] → 확인하면 그 금액이 환불됩니다.
💡참고: 입력 금액이나 비율로 계산된 금액이 남은 환불 가능 금액을 넘을 수는 없습니다. 넘는 값을 넣으면 오류로 막힙니다. 금액 칸에도 잔여 금액이 상한으로 걸려 있습니다.
취소가 끝나면 상태와 내역이 이렇게 바뀝니다.
| 상황 | 결제 상태 표시 | 의미 |
|---|---|---|
| 일부만 환불 | 완료 + 부분취소 | 아직 환불 가능 잔액이 남아 있어 추가 취소 가능 |
| 남김없이 전부 환불 | 취소 | 더 이상 환불할 금액 없음 |
취소·환불 내역 카드에는 최초 결제금액, 누적 환불액(빨간색), 남은 환불 가능액, (외부 취소로 떼인) 취소 수수료, 최근 취소 시각이 표시됩니다. 관리자 취소는 수수료가 0이므로 수수료 줄은 외부(고객) 취소 건에서만 보입니다.
그 아래에는 회차별 취소 상세 표가 붙습니다 — 회차, 취소 시각, 환불액(−표시), 수수료, 처리 주체(관리자/서비스/시스템), 사유가 취소 1회마다 한 줄씩 기록되어, 부분취소를 여러 번 한 결제도 "언제 얼마씩 왜" 환불했는지 확인할 수 있습니다. 구독 결제도 요금제 변경 환불 등으로 취소 이력이 있으면 이 카드가 나타납니다. (원장 도입 이전의 취소는 "도입 이전 취소분 합산" 1건으로 표시됩니다.)
💡참고: 관리자 취소 내역은 누가 취소했는지(관리자 계정) 가 감사 로그에 함께 남습니다.
6.4 외부(고객) 취소와의 차이
같은 일반결제라도, 누가 취소하느냐에 따라 동작이 다릅니다.
| 구분 | 관리자 취소(이 화면) | 외부 서비스/고객 취소(API) |
|---|---|---|
| 수수료 | 없음 — 입력 금액 그대로 환불 | 수수료율 적용 — 취소하는 금액마다 서비스가 정한 비율만큼 떼고 환불 |
| 부분·누적 | 전액/부분, 여러 번 누적 가능 | 전액/부분(cancel_amount로 금액 지정) 모두 가능, 여러 번 누적 가능 |
| 취소 차단 설정 | 무시(관리자는 항상 가능) | 서비스가 "취소 불가"로 설정하면 막힘 |
| 관리자가 손댄 결제 | 계속 취소 가능 | 차단 — 관리자가 한 번이라도 취소한 결제는 외부 취소가 거부됨(아래 주의 참고) |
🍎쉽게 말하면 관리자 취소는 "운영자가 직접 손으로, 수수료 없이, 원하는 만큼" 돌려주는 것이고, 외부(고객) 취소는 "서비스가 정한 규칙(수수료·허용 여부)대로" 진행되는 것입니다.
예) 고객이 직접 취소 — 결제 10,000원, 서비스 취소 수수료 10% - 수수료 1,000원(= 취소 금액 × 10% 내림)을 떼고 9,000원이 환불됩니다. - 이때 떼인 1,000원은 취소 수수료(서비스 보유) 항목으로 내역에 표시됩니다. - 부분취소도 같은 방식입니다. 3,000원만 취소하면 수수료 300원을 떼고 2,700원이 환불되고, 남은 금액은 나중에 또 취소할 수 있습니다.
⚠️주의: 관리자가 한 번이라도 취소(전액·부분)를 실행한 결제는, 이후 고객(외부 API)의 취소 요청이 전액·부분 관계없이 거부됩니다("관리자가 취소 처리한 결제입니다. 고객센터로 문의해주세요"). 같은 돈을 두 번 환불하는 일을 막기 위한 안전장치입니다. 이런 건은 남은 환불도 관리자가 이 화면에서 이어서 처리하세요. (반대로, 고객이 스스로 부분취소한 결제는 남은 한도 안에서 고객이 계속 추가 취소할 수 있습니다.)
6.5 매출·환불에 반영되는 방식
취소(환불)는 대시보드의 매출과 환불 집계에 자동으로 반영됩니다.
- 부분취소를 하면 그만큼 매출에서 빠집니다(예: 10,000원 결제 중 3,000원 환불 → 매출 7,000원으로 인식).
- 전액취소든 부분취소든 환불한 금액은 환불 합계에 더해집니다.
- 외부 API로 결제 내역을 조회하는 고객사 화면에도 실제 환불액과 남은 실수령액이 그대로 전달됩니다.
- 부분취소를 여러 번 하면 회차마다 취소 이력이 따로 저장됩니다(언제·얼마·누가·왜). 감사 로그와 별개로 취소 전용 이력이 남아 나중에 회차별로 확인할 수 있습니다.
💡참고: 별도의 정산이나 집계를 손으로 맞출 필요가 없습니다. 취소 실행 즉시 반영됩니다.
중요(환불의 귀속 월): 정산 화면과 대시보드의 환불금액 카드는 "취소가 실행된 날"이 속한 기간에 환불을 잡습니다. 예를 들어 5월에 승인된 결제를 6월에 환불하면, 5월 정산의 매출은 그대로 유지되고 환불은 6월에 나타납니다 — 이미 마감한 지난달 숫자가 소급해서 바뀌지 않습니다. (대시보드의 서비스별 매출 요약 표는 "이번 달 승인된 결제" 기준 스냅샷이라 월이 다를 수 있습니다 — 10. 대시보드 참고.)
6.6 취소가 안 될 때 점검할 것
| 증상 | 원인·해결 |
|---|---|
| "결제 취소" 카드가 안 보임 | 일반결제가 아니거나(구독 결제), 이미 전액 환불되어 남은 금액이 없음 |
| 취소 실행 시 "취소할 수 없는 결제입니다" | 완료(DONE) 상태가 아닌 결제(대기·실패)는 취소 대상이 아님 — 카드가 보여도 실행 단계에서 거부됩니다 |
| 구독 결제를 취소하고 싶음 | 이 화면에서는 불가. 구독 관리에서 처리 |
| 입력 금액이 거부됨 | 남은 환불 가능 금액보다 큰 값을 넣었는지, 또는 0·음수·숫자가 아닌 값을 넣었는지 확인 |
| "취소 실행" 후 토스 키 관련 오류 안내로 돌아옴 | 해당 서비스의 토스 결제 키가 설정되지 않음. 서비스 관리에서 토스 키를 등록한 뒤 다시 시도하세요. |
| "취소 실패: …" 메시지 | 토스 측 거절(이미 취소됨 등). 상태·환불액은 그대로 보존되며 안전하게 다시 시도할 수 있습니다. |
🔗