본문 바로가기

Web Application/Spring boot

[spring] 간편결제 - 카카오페이(kakao pay) 결제 api (1) - 결제취소 기능 구현

728x90
반응형
SMALL

이전 포스팅에서는 카카오페이 api를 이용하여 단건결제 기능을 구현하는 방법을 살펴봤다.

 

2023.03.18 - [Web Application/Spring boot] - [spring] 간편결제 - 네이버페이(naver pay) 결제 api (1) 결제 기능 구현

 

[spring] 간편결제 - 네이버페이(naver pay) 결제 api (1) 결제 기능 구현

1. 네이버페이 API 결제 프로세스 * 네이버페이는 javascripts SDK와 api요청 방식이 있는데, 여기서는 api요청 방식을 사용한다. 네이버페이 결제를 이용하기 위해서는 크게 "결제예약" / "결제승인" 단

lims-dev.tistory.com

 

이번 포스팅에서는 결제 취소 api를 사용하여 결제 취소하는 방법을 살펴본다.

 


 

카카오페이 결제 취소 API

 

카카오페이 결제 취소 API를 호출하기 위해서는 결제 고유번호인 tid에 해당하는 결제 건에 대해서,

지정한 금액만큼 결제 취소를 요청할 수 있다.

 

사용자가 결제한 건에 대해서 취소할 상품을 선택하면

취소할 상품에 대한 상품번호로 결제고유번호를 조회하는 로직을 추가한 후에 아래 서비스를 호출한다.

 

결제 건에 대해서는,

부분취소도 가능하고 전체 취소도 가능하다.

 

Service

 

public KakaoPayCancelVO KakaoPayCancel(int cancelWn, String tid){
    HttpHeaders headers = new HttpHeaders();
    headers.set("Authorization", "KakaoAK adminkey"); //발급받은 adminkey
    headers.set("Content-type", "application/x-www-form-urlencoded;charset=utf-8");

    MultiValueMap<String, Object> payParams = new LinkedMultiValueMap<String, Object>();

    payParams.add("cid", "TC0ONETIME");                     //가맹점코드
    payParams.add("tid", tid         );                     //결제고유번호
    payParams.add("cancel_amount", cancelWn);               //취소금액
    payParams.add("cancel_tax_free_amount", 0);             //취소비과세금액

    //카카오페이 결제요청 api 요청
    HttpEntity<Map> request = new HttpEntity<Map>(payParams, headers);

    RestTemplate template = new RestTemplate();
    String url = "https://kapi.kakao.com/v1/payment/cancel";

    //요청결과
    KakaoPayCancelVO res = template.postForObject(url, request, KakaoPayCancelVO.class);

    log.debug("{}", res.toString());
    return res;
}

 

Model

 

  • amout 
    • 결제 금액 정보
  • approved_cancel_amount
    • 이번 요청으로 취소된 금액
  • canceled_amount
    • 누계 취소 금액
  • cancel_available_amount
    • 남은 취소 가능 금액

 


@Getter
@Setter
public class KakaoPayCancelVO {
    public String aid;
    public String tid;
    public String status;
    public String partner_order_id;
    public String partner_user_id;
    public String payment_method_type;

    public Amount amount;
    public Amount approved_cancel_amount;
    public Amount canceled_amount;
    public Amount cancel_available_amount;

    @Getter
    @Setter
    public class Amount{
        public int total;
        public int tax_free;
        public int vat;
        public int point;
    }

}

 

결제 취소 로직에 전체 취소만 있는 경우는 상관이 없지만,

부분 취소가 되는 경우에는 남은 취소 가능 금액을 통해 취소 가능 금액을 비교하는 로직을 더 추가해야 된다.

 

 

https://developers.kakao.com/docs/latest/ko/kakaopay/cancellation#%EA%B2%B0%EC%A0%9C-%EC%B7%A8%EC%86%8C%ED%95%98%EA%B8%B0

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

 

728x90
반응형
LIST