💸결제취소(환불) 연동하기
포트원 결제취소 API를 이용한 결제취소 방법을 안내합니다.
STEP 01. 취소 요청하기
필요한 취소 정보를 서버로 전달하여 취소 요청을 진행합니다. 가상계좌 환불의 경우 환불수령 계좌 정보를 추가 파라미터로 전달해야 합니다. 다음은 환불요청을 하기 위해 서버로 해당 정보를 전달하는 예제입니다.
<button onclick="cancelPay()">환불하기</button>
<script
src="https://code.jquery.com/jquery-3.3.1.min.js"
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
crossorigin="anonymous"></script>
<script>
function cancelPay() {
jQuery.ajax({
// 예: http://www.myservice.com/payments/cancel
"url": "{환불정보를 수신할 가맹점 서비스 URL}",
"type": "POST",
"contentType": "application/json",
"data": JSON.stringify({
"merchant_uid": "{결제건의 주문번호}", // 예: ORD20180131-0000011
"cancel_request_amount": 2000, // 환불금액
"reason": "테스트 결제 환불" // 환불사유
// [가상계좌 환불시 필수입력] 환불 수령계좌 예금주
"refund_holder": "홍길동",
// [가상계좌 환불시 필수입력] 환불 수령계좌 은행코드(예: KG이니시스의 경우 신한은행은 88번)
"refund_bank": "88"
// [가상계좌 환불시 필수입력] 환불 수령계좌 번호
"refund_account": "56211105948400"
}),
"dataType": "json"
});
}
</script>STEP 02. 결제정보 조회하기
아래와 같이 결제정보를 저장하는 **Payments**라는 테이블을 생성했다고 가정합니다.
클라이언트에서 받은 주문번호(merchant_uid)를 사용해서 해당 주문의 결제정보를 Payments 테이블에서 조회합니다.
STEP 03. 아임포트 서버에 취소 요청하기
취소 요청을 하기 위해서 먼저 REST API access token 을 발급받습니다. 발급받은 액세스 토큰(access token)을 이용하여 아임포트 취소 API 를 호출하여 결제 취소를 요청합니다.
아래는 환불요청 시 유의해야 하는 파라미터들입니다.
환불
unique key환불 대상 거래를 특정하기 위해서
imp_uid또는merchant_uid를 환불unique key로 설정합니다.imp_uid의 값이 우선순위를 갖게되며 유효하지 않는imp_uid값을 입력하면merchant_uid값과 무관하게 환불요청이 실패합니다.
환불 금액(
amount)미입력시 전액이 환불됩니다.
환불 가능 금액(
checksum)환불이 가능한 금액을 입력합니다. 예를 들어, 10**,**000원짜리 제품의
checksum은 10,000입니다. 만약 10,000원짜리 제품이 과거 1,000원 부분환불 되었다면, 이후 환불시checksum은 9,000입니다.입력된checksum을 사용해서 서버와 포트원 서버간에 환불 가능 금액이 일치하는지 확인합니다. 만약 일치하지 않으면 환불 요청은 실패하며 미 입력시 검증은 실행되지 않습니다.
checksum을 입력해야 하는 이유
checksum은 필수입력은 아니지만 서버와 포트원 서버간에 환불 가능 금액을 검증하기 위해서 입력을 권장합니다.
예를 들어, 10**,**000원짜리 제품에 대한 1,000원 부분환불 요청이 포트원 서버에서 완료하였으나 가맹점이 서버 혹은 DB오류로 이를 반영하지 못했다면? 포트원 서버의 checksum은 9,000이 되고, 가맹점 서버의 checksum은 그대로 10,000이 됩니다.
이후 남은 금액을 환불하려고 할때 checksum(10,000)을 입력하면, 해당 값이 포트원 서버의 checksum(9,000)과 일치하지 않으므로 요청은 실패합니다.
아래는 환불 요청을 하는 예제입니다.
STEP 04. 환불 결과 저장하기
결제 취소가 완료되면 그 결과를 데이터베이스에 다음과 같이 저장합니다.
취소 시 유의할 점
REST API(POST https://api.iamport.kr/payments/cancel) 요청에 대한 응답 코드가 200이라도 응답 body의 code가 0이 아니면 환불에 실패했다는 의미입니다. 실패 사유는 body의 message를 통해 확인하셔야 합니다.
STEP 04. 환불 응답 처리하기
취소요청에 대한 응답을 클라이언트에게 처리하는 로직을 아래와 같이 작성합니다.
Last updated
Was this helpful?
