세금 처리하기

면세 금액을 설정해서 결제하거나 취소하는 방법, 부가가치세 계산 등 세금 처리와 관련한 내용을 알아봅니다.

면세 처리

고객이 결제한 상품이 면세 상품이거나, 여러 물건을 결제했는데 면세 상품과 일반 과세 상품이 섞여있는 결제일 때 면세 금액을 따로 적용해야 합니다. 결제, 결제 취소, 현금영수증 발급 시 면세 금액 파라미터 taxFreeAmount를 추가해서 면세 금액을 적용할 수 있습니다.

상품 가격은 아래와 같이 정의할 수 있습니다. 면세 상품은 상품 가격에 포함되어 있는 부가가치세가 면제되는 상품입니다.

* 면세 상품 가격 = 공급가액 (부가가치세 0)

* 과세 상품 가격 = 공급가액 + 부가가치세(전체 금액 * 0.1)

* 면세 + 과세 상품 가격 = 공급가액 + 부가가치세 + 면세 금액

상점 타입 알아보기

토스페이먼츠에서는 아래와 같이 과세 상점과 면세 상점, 복합 과세 상점을 구분하고 있습니다.

면세 금액 파라미터는 상점 타입에 따라 다르게 적용됩니다. 복합 과세 상점일 때만 파라미터로 전달받은 값을 사용합니다.

상점 타입정의판매하는 상품 종류면세 금액
면세 상점면세 상품만 판매하는 상점입니다.면세 상품결제 금액 전체 면세(vat = 0)
과세 상점과세 상품만 판매하는 상점입니다.면세 상품 외 모든 상품항상 0
*복합 과세 상점과세, 면세 상품을 모두 판매하는 상점입니다. 토스페이먼츠 계약 시 기본적으로 설정되는 값입니다.과세 상품, 면세 상품taxFreeAmount 파라미터로 전달받은 면세 금액
영세율 상점판매 상품의 과세/면세 여부와 상관없이 부가가치세가 0원인 상점수출, 외화 획득을 위한 상품결제 금액 전체 면세(vat = 0)

면세 상점인 경우 결제 금액 전체가 taxFreeAmount이고, 과세 상점인 경우 면세 금액이 포함된 상품이 없기 때문에 taxFreeAmount 값을 넘길 필요가 없습니다.

상점 설정은 복합 과세 상점이 기본입니다. 상점 타입을 변경하고 싶다면 토스페이먼츠 고객센터(1544-7772, support@tosspayments.com)로 문의해주세요.

면세 금액 설정한 뒤 결제하기

결제창 연동을 하거나 카드 번호 결제 API가상계좌 발급 요청 API를 사용할 때 면세 금액 파라미터 taxFreeAmount를 추가할 수 있습니다. 아래 예시를 통해 면세 상품인 도서, 과세 상품인 북마크를 함께 결제하는 경우를 살펴보세요.

결제창에서 면세 금액을 설정하려면 requestPaymenttaxFreeAmount를 추가하면 됩니다.

요청
tossPayments.requestPayment('카드', {
amount: 10000,
taxFreeAmount: 3000,
orderId: 'e3vrHEukThcviaUZsXEsg',
orderName: '책, 북마크',
customerName: '박토스',
successUrl: 'http://localhost:8080/success',
failUrl: 'http://localhost:8080/fail',
})
JavaScript

API를 요청할 때도 마찬가지로 taxFreeAmount를 추가해서 전체 결제 금액 중 면세 금액을 설정할 수 있습니다.

요청
curl --request POST \
  --url https://api.tosspayments.com/v1/payments/key-in \
  --header 'Authorization: Basic dGVzdF9za196WExrS0V5cE5BcldtbzUwblgzbG1lYXhZRzVSOg==' \
  --header 'Content-Type: application/json' \
  --data '{"amount":"10000","taxFreeAmount":"3000","cardExpirationMonth":"05","cardExpirationYear":"28","cardNumber":"1234567812345678","customerIdentityNumber":"900101","orderId":"eNeysMV4MGgW0WQhpMcDp"}'

응답으로 돌아온 공급가액(suppliedAmount), 부가가치세(vat), 면세 금액(taxFreeAmount)을 확인하세요.

응답
{
"mId": "tvivarepublica4",
"version": "1.4",
"transactionKey": "",
"paymentKey": "",
"orderId": "",
"orderName": "책, 북마크",
"method": "카드",
"status": "DONE",
"requestedAt": "2021-01-01T10:01:30+09:00",
"approvedAt": "2021-01-01T10:05:40+09:00",
"useEscrow": false,
"cultureExpense": false,
"card": {
"company": "우리",
"number": "100212*****12",
"installmentPlanMonths": 0,
"isInterestFree": false,
"interestPayer": null,
"approveNo": "00000000",
"useCardPoint": false,
"cardType": "신용",
"ownerType": "개인",
"acquireStatus": "READY",
"receiptUrl": "https://dashboard.tosspayments.com/sales-slip?transactionId=bGqvzDSq5OoimabqhwIGRNk5Ks4A%2B2pzVwKxOP0WsjnZ6FZiUqVa4RbnVeqVlxsd&ref=PX"
},
"virtualAccount": null,
"transfer": null,
"mobilePhone": null,
"giftCertificate": null,
"cashReceipt": null,
"discount": null,
"cancels": null,
"secret": null,
"type": "NORMAL",
"easyPay": null,
"country": "KR",
"failure": null,
"isPartialCancelable": true,
"currency": "KRW",
"totalAmount": 10000,
"balanceAmount": 10000,
"suppliedAmount": 6364,
"vat": 636,
"taxFreeAmount": 3000
}
JSON

면세 금액을 포함한 상품의 결제에서

  • 공급가액은 총 결제 금액에서 면세 금액과 부가가치세를 빼서 계산한 결과인 6,364원입니다.

    • 전체 금액 10,000원 - 면세 금액 3,000원 - 부가가치세 636원 = 6,364원
  • 부가가치세는 총 결제 금액에서 면세 금액을 뺀 값을 11로 나눈 후 소수점 첫째 자리를 반올림해서 계산한 결과인 636원입니다.

    • (전체 금액 10,000원 - 면세 금액 3,000원) / 11 후 소수점 첫째 자리 반올림 = 636원

부분 취소하기

면세 금액이 포함된 결제를 부분 취소하는 방법을 알아봅니다.

Case 1. 면세 금액에서만 부분 취소를 하고 싶을 때

부분 취소를 할 때 면세 금액에서만 차감하고 싶다면 취소할 금액과 면세 금액을 함께 넘겨야 면세 금액에서 차감됩니다. 취소할 면세 금액은 taxFreeAmount를 통해 전달하세요. 면세 금액을 넘기지 않으면 공급가액(suppliedAmount)에서만 취소가 발생합니다.

전체 결제 금액 10,000원 중 면세 금액 3,000원에서만 결제를 취소하려면 아래와 같이 취소할 금액과 취소할 면세 금액을 똑같이 설정합니다.

요청
curl --request POST \
  --url https://api.tosspayments.com/v1/payments/auNTSRSfw3z9el-gtoLiX/cancel \
  --header 'Authorization: Basic dGVzdF9za196WExrS0V5cE5BcldtbzUwblgzbG1lYXhZRzVSOg==' \
  --header 'Content-Type: application/json' \
  --data '{"cancelReason":"고객 변심","cancelAmount":3000,"taxFreeAmount":3000}'

면세 금액에서만 취소가 발생했기 때문에 suppliedAmountvat가 처음 결제가 일어났을 때와 동일합니다.

응답
{
"mId": "tosspayments",
"version": "1.4",
"transactionKey": "",
"paymentKey": "",
"orderId": "",
"orderName": "책, 북마크",
"method": "카드",
"status": "CANCELED",
"requestedAt": "2022-01-01T11:31:29+09:00",
"approvedAt": "2022-01-01T11:31:51+09:00",
"useEscrow": false,
"cultureExpense": false,
"card": {
"company": "우리",
"number": "100212*****12",
"installmentPlanMonths": 0,
"isInterestFree": false,
"interestPayer": null,
"approveNo": "00000000",
"useCardPoint": false,
"cardType": "신용",
"ownerType": "개인",
"acquireStatus": "READY",
"receiptUrl": "https://dashboard.tosspayments.com/sales-slip?transactionId=bGqvzDSq5OoimabqhwIGRNk5Ks4A%2B2pzVwKxOP0WsjnZ6FZiUqVa4RbnVeqVlxsd&ref=PX"
},
"virtualAccount": null,
"transfer": null,
"mobilePhone": null,
"giftCertificate": null,
"foreignEasyPay": null,
"cashReceipt": null,
"discount": null,
"cancels": [
{
"cancelReason": "테스트",
"canceledAt": "2022-04-12T21:00:30+09:00",
"cancelAmount": 3000,
"taxFreeAmount": 3000,
"taxAmount": null,
"refundableAmount": 0,
"easyPayDiscountAmount": 0,
"transactionKey": "45330506F30C4B3FF3249C3EAC1523FA"
}
],
"secret": null,
"type": "NORMAL",
"easyPay": null,
"country": "KR",
"failure": null,
"isPartialCancelable": true,
"currency": "KRW",
"totalAmount": 10000,
"balanceAmount": 7000,
"suppliedAmount": 6364,
"vat": 636,
"taxFreeAmount": 3000
}
JSON

Case 2. 취소할 금액의 일부만 면세 금액일 때

취소하려는 금액 중 일부 금액이 면세 금액인 경우에 대해 알아봅니다.

Case 1과 동일하게 전체 결제 금액 10,000원 중 면세 금액이 3,000원이고 취소하려는 금액은 4,000원 입니다. 취소하려는 금액 중 면세 금액은 1,000원 일 때 아래와 같이 취소 금액과 취소할 면세 금액을 설정합니다.

요청
curl --request POST \
  --url https://api.tosspayments.com/v1/payments/auNTSRSfw3z9el-gtoLiX/cancel \
  --header 'Authorization: Basic dGVzdF9za196WExrS0V5cE5BcldtbzUwblgzbG1lYXhZRzVSOg==' \
  --header 'Content-Type: application/json' \
  --data '{"cancelReason":"고객 변심","cancelAmount":4000,"taxFreeAmount":1000}'

공급가액에서도 취소가 발생했기 때문에 suppliedAmountvat가 다시 계산된 값으로 응답이 내려갑니다.

응답
{
"mId": "tosspayments",
"version": "1.4",
"transactionKey": "",
"paymentKey": "",
"orderId": "",
"orderName": "책, 북마크",
"method": "카드",
"status": "CANCELED",
"requestedAt": "2022-01-01T11:31:29+09:00",
"approvedAt": "2022-01-01T11:31:51+09:00",
"useEscrow": false,
"cultureExpense": false,
"card": {
"company": "우리",
"number": "100212*****12",
"installmentPlanMonths": 0,
"isInterestFree": false,
"interestPayer": null,
"approveNo": "00000000",
"useCardPoint": false,
"cardType": "신용",
"ownerType": "개인",
"acquireStatus": "READY",
"receiptUrl": "https://dashboard.tosspayments.com/sales-slip?transactionId=bGqvzDSq5OoimabqhwIGRNk5Ks4A%2B2pzVwKxOP0WsjnZ6FZiUqVa4RbnVeqVlxsd&ref=PX"
},
"virtualAccount": null,
"transfer": null,
"mobilePhone": null,
"giftCertificate": null,
"foreignEasyPay": null,
"cashReceipt": null,
"discount": null,
"cancels": [
{
"cancelReason": "테스트",
"canceledAt": "2022-04-12T21:32:35+09:00",
"cancelAmount": 4000,
"taxFreeAmount": 1000,
"taxAmount": null,
"refundableAmount": 6000,
"easyPayDiscountAmount": 0,
"transactionKey": "98A6382330TF43F3EFBA333EAC152C24"
}
],
"secret": null,
"type": "NORMAL",
"easyPay": null,
"country": "KR",
"failure": null,
"isPartialCancelable": true,
"currency": "KRW",
"totalAmount": 10000,
"balanceAmount": 6000,
"suppliedAmount": 3636,
"vat": 364,
"taxFreeAmount": 3000
}
JSON

부분 취소 후 부가가치세는 최초 결제 시 부가가치세에서 취소 금액의 부가가치세를 뺀 364원이 됩니다.

  • [(총 결제 금액 10,000원 - 총 면세 금액 3,000원) / 11] - [(총 취소 금액 4,000원 - 취소 금액 중 면세 금액 1,000) / 11]

공급가액은 최초의 공급가액에서 부분 취소 후 남은 공급가액을 뺀 3,636원이 됩니다.

  • (총 결제 금액 10,000원 - 총 면세 금액 3,000원 - 총 부가가치세 636원) - (남은 전체 금액 6,000원 - 남은 면세 금액 2,000원 - 남은 부가가치세 364원)

부분 취소 후 남은 면세 금액을 계산하고 싶을 때

Payment.taxFreeAmount는 항상 최초 결제의 면세 금액으로 유지됩니다.

만약 결제 취소 후 남은 면세 금액을 알고 싶다면, 결제 취소 후 남은 금액(balanceAmount)에서 남은 공급가액(suppliedAmount)과 부가가치세(vat)를 빼면 됩니다.

위의 경우에는 남은 전체 금액 6,000원 - 공급가액 3,636원 - 부가가치세 364원의 결과인 2,000원이 남은 면세 금액입니다.

Case 3. 전체 취소 할 때

전체 취소를 할 때는 총 결제 금액에 포함된 공급가액이 함께 취소되므로 다른 처리를 하지 않아도 됩니다.

계산식

금액계산식설명
최초 결제 시 부가가치세(amount - taxFreeAmount) / 11 후 반올림(결제 금액 - 면세 금액) / 11 후 반올림
공급가액(과세 금액)amount - taxFreeAmount - vat결제 금액 - 면세 금액 - 부가가치세
결제 취소 후 남은 면세 금액balanceAmount - suppliedAmount - vat결제 취소 후 남은 금액 - 공급가액 - 부가가치세
내용이 도움 되셨나요?
  • 더 궁금한 내용이 있나요?
  • 코드 샘플을 참고하세요
  • 기술지원이 필요한가요?
    디스코드 채팅|이메일 보내기