PG란?
Payment Gateway의 준말로 '결제를 위한 관문'을 뜻해요. 국내 온라인 쇼핑몰 수가 전국 치킨집 수(9만여 곳)의 3배 가까이 된다고 해요. 이 많은 쇼핑몰들이 10여 개의 신용카드사, 간편결제 제공사와 직접 거래 계약을 맺는 건 현실적으로 어려워요. PG사는 신용카드사와 직접 계약하기 어려운 온라인 쇼핑몰을 대신해 결제와 정산 업무를 대행해 주는 회사를 말해요. PG사와 계약을 하게 되면 카드결제, 휴대폰 결제, 계좌이체, 무통장입금 등 다양한 결제 수단을 쇼핑몰 방문 고객에게 제공할 수 있어요. 결제를 대신해 준다고 해서 ‘결제대행사'라고 부르기도 해요.
출처 : 토스페이먼츠
사용자가 어떠한 서비스를 이용하고 그에 대한 값을 치루려면 결제에 관한 시스템을 구축해놔야한다.
이번 프로젝트 또한 결제가 필요하므로, 관련 내용에 대해 알아보다 다양한 PG사를 한번에 사용할 수 있느 아임포트라는 서비스를 찾게 되었다.
PG사 결제모듈에 대한 연동 개발을 진행할 때, 다양한 개발환경에서 보다 쉽고 빠르게 개발할 수 있도록 제공되는 결제 플랫폼 혹은 결제 호스팅 서비스 입니다. 아임포트 서버가 가맹점의 서버를 대신해 결제를 위한 통신과정을 모두 마친 후 그 결과를 기술적인 방법으로 알려줄 뿐입니다.
출처: 아임포트
즉 아임포트 서비스를 통해 여러 PG사의 결제모듈을 사용할 수 있다. 또한 테스트용은 무료로 사용할 수 있기 때문에 이번 프로젝트를 준비하기전에 한번 사용하며 정리해 보았다.
1. 관리자 로그인 해당 사이트로 가서 회원가입 진행 후 로그인을 진행한다.
2. 사용할 PG사를 선택 후 모듈을 등록한다.(나는 카카오, KG 이니시스를 선택했다.)
3. 테스트용으로 만들어야하기 때문에 카카오페이 -> 정보 수정 -> 가맹점코드(CID)에 일반결제테스트 코드를 입력한다.
4. [아임포트 일반결제 연동하기](https://docs.iamport.kr/implementation/payment) 해당 링크를 참조해서 html을 작성하면 된다.
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<!-- jQuery -->
<script type="text/javascript" src="https://code.jquery.com/jquery-1.12.4.min.js" ></script>
<script type="text/javascript" src="https://cdn.iamport.kr/js/iamport.payment-1.1.8.js"></script>
</head>
<body>
<button onclick="requestPay()">결제하기</button>
<script>
IMP.init('imp12345678');
function requestPay() {
// IMP.request_pay(param, callback) 결제창 호출
IMP.request_pay({ // param
pg: "kakaopay", // kg 이니시스라면 html5_inicis
pay_method: "card",
merchant_uid: "abc-1",//이걸로 구분함
name: "이니시스 테스트용",
amount: 1,
buyer_email: "kws3363@gmail.com",
buyer_name: "김수보",
buyer_tel: "010-4242-4242",
buyer_addr: "서울특별시 강남구 신사동",
buyer_postcode: "01181"
}, function (rsp) { // callback
if (rsp.success) { // 결제 성공 시: 결제 승인 또는 가상계좌 발급에 성공한 경우
// jQuery로 HTTP 요청
alert("성공");
<!-- jQuery.ajax({-->
<!-- url: "http://localhost:8080/payments", // 예: https://www.myservice.com/payments/complete-->
<!-- method: "POST",-->
<!-- headers: { "Content-Type": "application/json" },-->
<!-- data: {-->
<!-- imp_uid: rsp.imp_uid,-->
<!-- merchant_uid: rsp.merchant_uid-->
<!-- }-->
<!-- }).done(function (data) {-->
<!-- // 가맹점 서버 결제 API 성공시 로직-->
<!-- })-->
} else {
alert("결제에 실패하였습니다. 에러 내용: " + rsp.error_msg);
}
});
}
</script>
</body>
</html>
5. 테스트하기
프론트단에서 어떻게 처리할지만 테스트 해보았다. 추후에 이를 통해 데이터를 넘겨주면, db에 넣고 결제내역을 보여주는 식으로 프로젝트를 구성해나갈거 같다. 다른 서비스를 빨리 완성 시키고 결제관련 서비스도 보여줄 수 있게 끔 만들어야겠다.
참조 : https://todakandco.tistory.com/10
아임포트 가이드 : https://guide.iamport.kr/418a8dd5-6b84-419d-8d1b-ffd311b36404
아임포트 docs : https://docs.iamport.kr/sdk/javascript-sdk#request_pay