평범한 연구소

[Spring] 카카오페이 API 연동 본문

Spring Framework

[Spring] 카카오페이 API 연동

soyeonisgood 2023. 1. 5. 13:28

유료 결제 기능 구현을 위해 카카오페이 API를 사용했다. 아래 공식 문서를 참고하며 작업했다!

아임포트 공식 문서: https://chai-iamport.gitbook.io/iamport/ 

카카오페이 공식 문서: https://developers.kakao.com/docs/latest/ko/kakaopay/common

 

준비 사항

아임포트 > 결제 연동 > 테스트/실연동 관리 페이지에서 테스트 연동을 만든다.

https://admin.iamport.kr/auth/signin  

 

 

 

javascript

  • 본인의 가맹점 식별코드를 넣어준다.
  • 카카오페이를 사용한다면, pg에 kakao 또는 kakaopay 로 작성한다. 
  • 주문번호인 merchant_uid고유한 값이어야 하므로 구독권번호+현재시분초밀리초 로 넣어주었다.
  • request_pay의 반환값은 JSON형식이다. (데이터는 공식문서 참고) 
  • 나는 DB에 결제정보를 저장해야하므로 결제 성공 시 동작하는 로직 안에 DB로 데이터를 넣어줄 AJAX를 작성했다.
// 카카오페이 결제 API 진행하기
function execKakaoPay() {
	var IMP = window.IMP;
	IMP.init("가맹점식별코드");
	
	let selectSub = $("input[name=selectSub]").val(); // 구독권 
	let email = $("input[name=email]").val();
	let name = $("input[name=name]").val();
	let price = $("input[name=totalPrice]").val();
	let memberNo = $("input[name=memberNo]").val();
	let dateSubStart = $("input[name=dateSubStart]").val();
	let dateSubEnd = $("input[name=dateSubEnd]").val();
	let dateFirstMail = $("input[name=dateFirstMail]").val();
	let selectNum; // subType
	
	var today = new Date();
	var h = today.getHours().toString();
	var min = today.getMinutes().toString();
	var s = today.getSeconds().toString();
	var m = today.getMilliseconds().toString();
	var makeMerchantUid = h + min + s + m;
	
	if(email === "") {
		$(".email").focus();
		return;
	}
	if(selectSub === "") {
		$(".selectSub").focus();
		return;
	}
	if(price === "") {
		$(".price").focus();
		return;
	}
	
	if(selectSub === "monthSub"){
		selectSub = "1개월구독권";
		selectNum = "1";
	} else if(selectSub === "yearSub") {
		selectSub = "12개월구독권";
		selectNum = "12";
	}
	
	IMP.request_pay({
	    pg : 'kakaopay',
	    merchant_uid: selectNum + makeMerchantUid, 
        name : selectSub,
        item_name: selectSub,
        amount : price,
        buyer_email : email,
        buyer_name : name
	}, function(rsp) { // callback 로직 
		console.log(rsp);
		if(rsp.success) {
			alert("success");
			console.log(rsp);
 			console.log(rsp.imp_uid);	
 			console.log(rsp.merchant_uid);  
 			console.log(rsp.buyer_email);
 			console.log(rsp.buyer_name);
 			console.log(rsp.paid_at);		
 			console.log(rsp.paid_amount);	
 			console.log(rsp.pg_tid);	
 			
 			let url = "${pageContext.request.contextPath}/sub/paySuccess";
 			
 			const fn = function(data) {
 	    		console.log(data.msg);
 	    		// 결제 내역 페이지로 이동 코드
                ...
 	        }
 	        
            // 사용자 정의 ajax 함수 실행
 	        ajaxFun(url, "post", "", "json", fn);
 		
		} else {
			console.log(rsp);
			if(rsp.error_msg) {
				console.log(rsp.error_msg);
			}
			return;
		}
	});

}