본문으로 건너뛰기

결제 환불

결제 완료된 거래 전체 또는 부분 환불 처리를 하는 API 입니다.

참고
  • 에스크로 승인거래에 대한 취소는 에스크로 상태변경 참조 바랍니다.
  • 환불 서비스의 경우 지결환불과 즉시환불 두가지 서비스가 제공되고 있으니, 서비스 신청 시 영업담당자와 협의하여 주시기 바랍니다.

실시간 환불

환불 요청 즉시 고객의 환불계좌로 실시간 환불 처리되는 서비스 입니다.

지결 환불

환불 요청 D+1에 고객의 환불계좌로 환불 처리되는 서비스 입니다. 환불완료 시 노티(웹훅)을 통해 처리결과를 받을 수 있습니다. 반드시 노티(웹훅) URL을 등록해야 합니다.

요청

요청 URL
POST https://{API 도메인}/api/trades/revise
Content-type: application/json; charset=utf-8
참고

API 멱등성 지원 대상 (API 멱등성 참조)

주의사항

최종 결제 취소가 완료되기까지 시간이 걸리므로 timeout을 30초로 설정해야 합니다.

파라미터

필드명타입길이필수여부설명
mallIdString8ByteKICC에서 부여한 상점ID
shopTransactionIdString60Byte상점 거래고유번호 (API 멱등성 키)
pgCnoString20Byte원 거래 PG 거래고유번호
reviseTypeCodeString2Byte변경구분 (변경 구분 코드표 바로가기)
지결 전체환불: “60” 지결 부분환불: “62”
reviseSubTypeCodeString4Byte변경 세부구분 (변경 세부구분 코드표 바로가기)
amountNumber취소금액 부분환불 시 필수
remainAmountNumber환불가능금액(환불 시 가능잔액 검증용)
clientIpString20Byte요청자 IP
clientIdString32Byte요청자 ID 가맹점 관리자 로그인용 ID
cancelReqDateString8Byte취소 요청일자(yyyyMMdd)
msgAuthValueString200Byte요청값의 무결성을 검증 (메시지 인증값 바로가기)
reviseMessageString100Byte환불사유
refundQueryFlagString1Byte환불결과 조회플래그(‘Y’ : 조회) 즉시환불 타임아웃 발생 시 필수 환불응답이 “VTIM”, “VT00”일 경우 재요청 필요
refundInfoObject환불요청 정보 아래 refundInfo 참조
taxInfoObject복합과세 정보(복합과세 사용 시 필수) 아래 taxInfo 참조
basketUsedString1Byte다중정산 장바구니 결제여부(Y/N)
basketInfoObject장바구니 정보(다중정산 사용 시 필수) 아래 basketInfo 참조

refundInfo(환불요청 정보)

필드명타입길이필수여부설명
refundBankCodeString3Byte환불계좌 은행코드 (은행 코드 참고)
refundAccountNoString14Byte환불계좌 계좌번호
refundDepositNameString50Byte환불계좌 예금주명
depositPgCnoString20Byte입금거래번호(다회입금계좌 환불 시 필수)

taxInfo(복합과세 정보)

필드명타입길이필수여부설명
taxationAmountNumber취소 과세 금액
taxFreeAmountNumber취소 비과세 금액
vatAmountNumber취소 부가세 금액

basketInfo(장바구니 정보)

필드명타입길이필수여부설명
productPgCnoString20Byte개별상품 PG 거래고유번호
sellerIdString50Byte셀러ID
요청 예시
{
"mallId": "{상점ID}",
"shopTransactionId": "{API 멱등성 키}",
"pgCno": "{PG 거래고유번호}",
"reviseTypeCode": "40",
"cancelReqDate": "{요청 일자}",
"msgAuthValue": "{메시지 인증값}",
"reviseMessage": "고객 변심",
"refundInfo": {
"refundBankCode": "003",
"refundAccountNo": "{환불 계좌번호}",
"refundDepositName": "홍길동",
"depositPgCno": "{입금 거래번호}"
}
}

응답

파라미터

필드명타입길이설명
resCdString4Byte결과코드(정상 : “0000”)
resMsgString1000Byte결과 메시지
shopTransactionIdString60Byte취소요청 시 전송한 값 그대로 사용
mallIdString8ByteKICC에서 부여한 상점ID
oriPgCnoString20Byte원 거래 PG 거래고유번호
cancelPgCnoString20Byte환불 PG 거래고유번호
transactionDateString14Byte거래일시(yyyyMMddHHmmss)
cancelAmountNumber취소금액
remainAmountNumber취소 후 잔액(요청 시 remainAmount 항목이 있을 시 응답)
statusCodeString4Byte거래상태 코드 (거래상태 코드 참고)
statusMessageString50Byte거래상태 메시지
escrowUsedString1Byte에스크로 사용여부(Y/N)
reviseInfoObject환불 응답 정보
아래 reviseInfo 참조

reviseInfo(환불응답 정보)

필드명타입길이설명
payMethodTypeCodeString2Byte결제수단 코드 (결제수단 코드 참고)
approvalDateString14Byte환불일시(yyyyMMddHHmmss)
refundInfoObject환불 상세정보
아래 refundInfo 참조
cashReceiptInfoObject현금영수증 취소상세정보
아래 cashReceiptInfo 참조

reviseInfo > refundInfo(환불 상세정보)

필드명타입길이설명
refundDateString14Byte환불예정일시(yyMMddHHmmss)
depositPgCnoString20Byte가상계좌 입금 거래번호(가상계좌일 경우 응답)

reviseInfo > cashReceiptInfo(현금영수증 취소 상세정보)

필드명타입길이설명
resCdString4Byte결과코드
resMsgString1000Byte결과 메시지
approvalNoString50Byte현금영수증 취소 승인번호
cancelDateString14Byte현금영수증 취소일시(yyyyMMddHHmmss)
응답 예시
{
"resCd": "0000",
"resMsg": "정상취소",
"mallId": "{요청한 상점ID}",
"shopTransactionId": "{요청한 API 멱등성 키}",
"oriPgCno": "{PG 거래고유번호}",
"cancelPgCno": "{취소 PG 거래고유번호}",
"shopOrderNo": "{상점 주문번호}",
"cancelAmount": "51004",
"remainAmount": "0",
"transactionDate": "20210326090200",
"statusCode": "RF01",
"statusMessage": "환불요청",
"reviseInfo": {
"payMethodTypeCode": "21",
"approvalDate": "20210326090200",
"refundInfo": {
"refundDate": "20210326090200",
"depositPgCno": "{입금 거래번호}"
}
}
}

변경 구분 코드(reviseTypeCode)

코드서비스명설명
60지결 전체환불가상계좌, 휴대폰 거래 환불
62지결 부분환불가상계좌, 휴대폰 거래 환불
63실시간 환불가상계좌, 휴대폰 거래 환불
전체/부분 환불 구분은 변경 세부구분 코드로 처리

변경 세부구분 코드(reviseSubTypeCode)

구분코드서비스명설명
지결환불RF01환불요청전체 또는 부분환불 모두 동일한 코드 적용
실시간 환불10전체환불(계좌인증)KICC에서 계좌인증 후 환불
11부분환불(계좌인증)KICC에서 계좌인증 후 환불
20전체환불(계좌미인증)상점에서 계좌인증 후 환불
21부분환불(계좌미인증)상점에서 계좌인증 후 환불

메시지 인증값

메시지 인증값 구성은 아래와 같이 조합하고 해당값을 HmacSHA256으로 해시한다. 메시지 인증 참조

pgCno(PG 거래고유번호) + “|” + shopTransactionId (상점 거래고유번호)