아임포트 연동 : tyrannocoding.tistory.com/43
아임포트 연동 이후 게시글입니다.
아임포트 검증이란?
아임포트에서 검증하기를 해야 하는 이유는 개발자들이 사용하기 쉽게 자바스크립트 형태로 제공하고 있어, 결제 금액 및 결제 상태에 대한 변조가 가능하다고 합니다. 그러므로 처음 요청했던 금액과 결제가 올바르게 이루어졌는지에 대해 아임 포트 서버로 아임포트 거래 고유번호(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
'Language > Spring' 카테고리의 다른 글
[JAVA, SPRING, Iamport] 아임포트 페이팔 연동(WEB,APP) (395) | 2021.03.18 |
---|---|
[JAVA, SPRING, Iamport] 아임포트 모바일 웹뷰 콜백함수 해결책 및 자바 예제(WEB,APP) (254) | 2021.03.17 |
[JAVA, SPRING, Iamport] 아임포트 연동(WEB,APP) (397) | 2021.03.17 |
Maven 과 Gradle의 차이 [JAVA, SPRING, GRADLE, ECLIPSE] (1095) | 2020.12.11 |
[JAVA, SPRING, BOOTPAY] 부트페이 정기결제(자동결제) (1313) | 2020.12.03 |
댓글