본문 바로가기
Language/Spring

[JAVA, SPRING, Iamport] 아임포트 검증하기(WEB,APP)

by tyrannojung 2021. 3. 17.
반응형

아임포트 연동 : tyrannocoding.tistory.com/43

 

[JAVA, SPRING, Iamport] 아임포트 연동(WEB,APP)

아임 포트란? 아임 포트(Iamport)는 무료로 서비스되는 결제 연동 API입니다. 장점으로는 PG 계약과 관계없이 즉시 개발 가능하며, 웹, 앱 SDK 모두 지원합니다. 뿐만 아니라 국내외 여러 PG(복수 선택

tyrannocoding.tistory.com

아임포트 연동 이후 게시글입니다.

 

아임포트 검증이란?

아임포트에서 검증하기를 해야 하는 이유는 개발자들이 사용하기 쉽게 자바스크립트 형태로 제공하고 있어, 결제 금액 및 결제 상태에 대한 변조가 가능하다고 합니다. 그러므로 처음 요청했던 금액과 결제가 올바르게 이루어졌는지에 대해 아임 포트 서버로 아임포트 거래 고유번호(imp_uid)나 주문 고유번호(merchant_uid)를 보내 확인하는 과정을 반드시 거쳐야 합니다.

 

검증 절차 ① 관리자페이지 설정

Rest Api를 통해 결제 검증 및 취소가 이루어지는데, 그 선행 절차가 Token을 발급받아야 합니다. Token을 발급받기 위해 관리자 페이지의 시스템 설정에서 REST API키REST API secret을 복사해 놓습니다. 

 

검증 절차 ② JAVA SPRING 설정 (POM.XML)

 

스프링 프로젝트 pom.xml에 해당 코드를 추가합니다.

<repositories>
  <repository>
    <id>jitpack.io</id>
    <url>https://jitpack.io</url>
  </repository>
</repositories>

<!-- dependencies 안에 추가합니다 -->
<dependency>
  <groupId>com.github.iamport</groupId>
  <artifactId>iamport-rest-client-java</artifactId>
  <version>0.2.14</version>
</dependency>

 

검증 절차 ③ VIEW 화면 - 자바 스프링 javaspring
<script>
	function iamport(){
		//가맹점 식별코드
		IMP.init('imp30146952');
		IMP.request_pay({
		    pg : 'kcp',
		    pay_method : 'card',
		    merchant_uid : 'merchant_' + new Date().getTime(),
		    name : '상품1' , //결제창에서 보여질 이름
		    amount : 100, //실제 결제되는 가격
		    buyer_email : 'iamport@siot.do',
		    buyer_name : '구매자이름',
		    buyer_tel : '010-1234-5678',
		    buyer_addr : '서울 강남구 도곡동',
		    buyer_postcode : '123-456'
		}, function(rsp) {
			console.log(rsp);
			// 결제검증
			$.ajax({
	        	type : "POST",
	        	url : "/verifyIamport/" + rsp.imp_uid 
	        }).done(function(data) {
	        	
	        	console.log(data);
	        	
	        	// 위의 rsp.paid_amount 와 data.response.amount를 비교한후 로직 실행 (import 서버검증)
	        	if(rsp.paid_amount == data.response.amount){
		        	alert("결제 및 결제검증완료");
	        	} else {
	        		alert("결제 실패");
	        	}
	        });
		});
	}
</script>

 

콜백 함수가 실행되고 return 된 value(rsp) 속 객체에 실제 결제한 금액(rsp.paid.amount)이 return 됩니다.

콜백 함수가 실행되면, rsp.imp_uid(거래 고유번호)를 통해 AJAX로 검증을 실행합니다. 

 

검증절차④ JAVA SPRING (자바, 스프링) - verifyIamport함수
@Controller
public class HomeController {
	
	private IamportClient api;
	
	public HomeController() {
    	// REST API 키와 REST API secret 를 아래처럼 순서대로 입력한다.
		this.api = new IamportClient("3452420157053319","DXI0XVlgpUwS8B3Hj9cFxozTrGn6CXmfU4fS0B8pvFhDglkzvxe3VNXnukt7hPmcUC4UddkJSCn9XIJt");
	}
		
	@ResponseBody
	@RequestMapping(value="/verifyIamport/{imp_uid}")
	public IamportResponse<Payment> paymentByImpUid(
			Model model
			, Locale locale
			, HttpSession session
			, @PathVariable(value= "imp_uid") String imp_uid) throws IamportResponseException, IOException
	{	
			return api.paymentByImpUid(imp_uid);
	}
	
}

 

 

위 검증절차② 에서 pom.xml을 설정하셨다면, iamport에서 제공해주는 객체와 함수를 사용할 수 있게 됩니다. 검증에 필요한 자바 함수는 paymentByImpUid입니다. paymentByImpUid를 사용하기 위해서는 토큰 발급이 필요하고, 토큰 발급을 하기 위해서는 위에 복사해 두었던 REST API 키 와 REST API secret 가 필요합니다.

 

저는 생성자를 통해 주입하여 , 토큰발급을 용이하게 해 놨으며, 해당 객체를 통해 함수의 호출을 구현했습니다.

paymentByImpUid 함수는 아임포트서버에서 imp_uid(거래 고유번호)를 검사하여, 데이터를 보내줍니다.

 

결과

첫 번째 로그는 결제 완료 후 나온 로그이며, 두 번째 로그는 검증 완료된 로그입니다.

 

아임포트에서는 금액을 비교하라고 권장하고 있습니다. 그러므로 첫 번째의 paid_amount와 두 번째의 amount를 비교하고 검증을 마치시면 됩니다. 

 

마치며

 위 과정을 요약하자면 PG사를 통한 결제 승인 -> PG사 결괏값 서버로 보냄 -> 서버에서 아임포트 토큰 발행 -> 해당 토큰으로 아임포트 내 결과값 확인 -> PG사 결과값과 아임포트 결과값 비교 -> 참이면 TRUE입니다.

 

 이 정도 예제로 잘 가공해서 사용한다면 java spring DB에 CRUD는 문제없이 사용할 수 있을 겁니다. 혹시라도 구현 진행 중 안 되는 부분이 있으시면 댓글 남겨주시면 소스를 보내드리겠습니다.

 

 

아임포트 모바일 웹뷰 콜백 함수 해결책 및 자바 예제(다음 글) : tyrannocoding.tistory.com/45

 

[JAVA, SPRING, Iamport] 아임포트 모바일 웹뷰 콜백함수 해결책 및 자바 예제(WEB,APP)

아임포트 특이점  일부를 제외한 국내 대부분의 PG 사들은모바일 결제가 시작되면 페이지를 이동(redirect)시켜버리는 특징이 있습니다. 이 과정에서 기존 페이지가 unload 되고IMP.request_pay(param, call

tyrannocoding.tistory.com

 

 

반응형

댓글