Spring boot kim's Shop/결제 시스템

Springboot 결제시스템!(8) 환불하기 카카오페이/아임포트

디비드킴 2021. 9. 10. 15:20

환불을 해보자 

 

restcontroller

restcontroller.java

예약상품이든 /일반상품이든 여기로 요청한다

 

paymentService

paymentService.java

어떤 종류 안지 받는다

String kind=aboutPayEnums.valueOf(tryCanclePayDto.getKind()).getString();

다중 선택이 가능하므로 list에 넣어준다

 List<IntegeridArray=tryCanclePayDto.getId();

예약상품이라면 예약 서비스로 간다

if(kind.equals(aboutPayEnums.reservation.getString()))

(일반상 품 아직 미구현)

 

tryCanclePayDto

tryCanclePayDto.java

 

reservationService

reservationService.java

예약 내용+가격을 조인해서 가져온다

reservationAndPriceInters.add(reservationDao.findByPaymentidJoinPriceNative(i).orElseThrow(()->new RuntimeException("품목 조회 실패")));

예약 취소가 가능한지 검증한다

confrimCancle(r.getDate_and_time(), r.getEmail());

예약 삭제

reservationDao.deleteById(r.getId());

입금 전/입금완료인지 분류

if(status.equals(aboutPayEnums.statusReady.getString()))

입금 전이라면 가격 수정을 위해 

(입금 후라면 뺄 가격을 줘야 한다)

int newPrice=paymentService.updateVbank(paymentid,price);

요청

paymentService.requestUpdateVbankBeforePaid(paymentidnewPrice,vBankDto.getEndDateUnixTime());

입금 후라면 db수정

paymentService.updatePaidProductForCancle(paymentid,price);

카카오페이인지 확인 후 카페 요청

 paymentService.requestCancleToKakaoPay(paidDto.getPaymentId(),price);

아임 포트라면 가상계좌인지/일반 결제인지 확인

if(paidDto.getPayMethod().equals("vbank"))

상황에 따라 맞는 파라미터 전달

 

현재 vbank/paid인지 판별하고 

나눠져서  db에 한 번씩 더 가는데 

join문에 if를 할 수 있는 거 같던데

그 방법을 쓰면 더 좋을 거 같다 

근데 봤는데 너무 어려워서 일단 이렇게 했다

 

confrimCancle

paymentService.java

updatePaidProduct/updateVbank

paymentService.java

상당히 흡사하다 

즉 인터페이스로 묶을 수 있을 거 같다

 

이제 카카오/아임 포트요청 하는 쪽으로 가보자

 

카카오페이

requestCancleToKakaoPay

 

paymentService.java

파라미터를 만들고 카카오에게 요청한다

cancleKakaopay

kakaoPayService.java

requestToKakaoPay

kakaoPayService.java

아임포트 입금 전 금액 수정

requestUpdateVbankBeforePaid

paymentService.java

requestUpdateVbank

iamportService.java

아임 포트 입금 후 부분 환불/환불

 

canclePay

paymentService.java

cancleBuy

iamportService.java

아임 포트는 테스트 모드 제약이 있어서 

통신 부분을 하나로 못 묶었다

 

 

테스트

카카오페이 후 환불 시도

http://localhost:3030/showReservationPage.html

현재시간 15:06분 그래서 현재 282번은 disabled 가되어있다

프런트에서 disabled 풀고 요청해보겠다

vscode
http://localhost:3030/showReservationPage.html

좋았어!

 

정상적 시도

http://localhost:3030/showReservationPage.html
http://localhost:3030/showReservationPage.html

좋았어!

 

가상계좌 미입금 환불 테스트

http://localhost:3030/showReservationPage.html
vscode
vscode

음 아쉬운 건 같은 요청인데 

각각 요청하는 시스템이 어서 아쉽긴 한데

어찌어찌 테스 계정으로 최대한 만들었다!

 

이제 게시판으로 가자!

(그전에 이전 말도 안 되는 enum들/기타 코드들을 정리할 것이다)

 

학원에서 스프링까지 오기 전에 

완성하고 싶다