안녕하세요. 카카오페이 결제 취소 관련해서 문의드립니다.
결제 완료 승인을 받고 결제한 해당 상품 tid로 결제를 취소하려고 합니다.
static final String cid = "TC0ONETIME";
public KakaoCancelResponse kakaoCancel(RefundDto refundDto) throws BaseException {
// 카카오페이 요청
/**
* todo: refundDto 받음
* refundDto: String tid, int cancel_amount
* pay 엔티티(이용자의 결제 내역): String tid, int quantity, int total, int rent, int deposit
*/
Optional<Pay> optional = payRepository.findByTid(refundDto.getTid());
if (optional.isEmpty()) {
throw new BaseException(BaseResponseStatus.NON_EXIST_PAYMENT);
}
Pay requestPay = optional.get();
MultiValueMap<String, String> parameters = new LinkedMultiValueMap<>();
parameters.add("cid", cid);
parameters.add("tid", requestPay.getTid()); // 결제 고유 번호
parameters.add("cancel_amount",String.valueOf(refundDto.getCancel_amount())); // 환불, 취소 금액
parameters.add("cancel_tax_free_amount", "0"); // 취소 비과세 금액
// parameters.add("cancel_vat_amount", "0"); // 환불 부가세 금액
// parameters.add("cancel_available_amount", "0");
HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(parameters, this.getHeaders());
// 외부에 보낼 url
RestTemplate restTemplate = new RestTemplate();
KakaoCancelResponse kakaoCancelResponse = null;
try {
kakaoCancelResponse = restTemplate.postForObject(
"https://kapi.kakao.com/v1/payment/cancel",
requestEntity,
KakaoCancelResponse.class
);
} catch (RestClientException e) {
throw e;
}
return kakaoCancelResponse;
}
다음과 같이 결제 취소 로직을 작성했는데 500에러가 발생합니다.
org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 Internal Server Error: "{"msg":"internal server error!","code":-1}"
at org.springframework.web.client.HttpServerErrorException.create(HttpServerErrorException.java:102) ~[spring-web-6.0.16.jar:6.0.16]
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:186) ~[spring-web-6.0.16.jar:6.0.16]
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:137) ~[spring-web-6.0.16.jar:6.0.16]
at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63) ~[spring-web-6.0.16.jar:6.0.16]
at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:915) ~[spring-web-6.0.16.jar:6.0.16]
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:864) ~[spring-web-6.0.16.jar:6.0.16]
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:764) ~[spring-web-6.0.16.jar:6.0.16]
at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:481) ~[spring-web-6.0.16.jar:6.0.16]
at com.example.BackendServer.kakaopay.KakaoPayService.kakaoCancel(KakaoPayService.java:152) ~[main/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
2024-03-09T14:10:37.529+09:00 INFO 38180 --- [nio-8080-exec-1] c.e.B.kakaopay.KakaoPayService : parameter: {cid=[TC0ONETIME], tid=[T5...], cancel_amount=[1], cancel_tax_free_amount=[0]}
2024-03-09T14:10:37.529+09:00 INFO 38180 --- [nio-8080-exec-1] c.e.B.kakaopay.KakaoPayService : requestEntity: <{cid=[TC0ONETIME], tid=[T5...], cancel_amount=[1], cancel_tax_free_amount=[0]},[Authorization:"KakaoAK (adminkey입니다)", Content-type:"application/x-www-form-urlencoded;charset=utf-8"]>
kakaoCancelResponse = restTemplate.postForObject(…) 이 부분에서 문제가 발생하는 거 같아 확인해 봤는데 문제점을 파악하기 어려워 문의드립니다.