수학과의 좌충우돌 프로그래밍

[Django] 아임포트를 이용한 결제모듈 만들기 본문

웹프로그래밍/Django

[Django] 아임포트를 이용한 결제모듈 만들기

ssung.k 2019. 5. 20. 22:13

개발을 하다보면 쇼핑몰, 배달의 민족과 같이 결제 시스템이 필요한 경우가 있습니다. 우리 주위에서 많이 찾아볼 수 있죠. 이번 시간에는 아임포트 를 이용해서 결제시스템을 만들어보도록 하겠습니다.

국내에서는 해외에 비해 결제 모듈 구축이 휠씬 어려운 편인데 이를 아임포트가 비교적 쉽게 만들어줍니다. 그럼 원리부터 알아보도록 하죠.

PG사? 아임포트?

크게 보면 값을 지불하고 재화를 얻는 User,User에게 돈을 받고 서비스를 제공해주는 판매자,이를 도와주는 PG 로 나눌 수 있을 겁니다. User가 값을 지불하는 과정에서 판매자를 대신해 금액을 정산해주는 업체를 Payment Gateway, PG 사라고 합니다. 하지만 우리가 아는 것만 해도 신한, 비씨, 국민. 현대. 삼성. 롯데. 외환. 하나. 농협, 이 밖에도 요즘 새로 생겨나고 있는 카카오, 티머니 등 결제 수단이 너무나 많습니다. 이를 코딩한다고 생각하면 다 다르게 처리를 해줘야하죠. 따라서 User 와 PG 사 사이에서 이 과정을 쉽게 만들어주는 역할을 아임포트 가 하게 됩니다.

서비스 비용

아임포트 는 다행히도 부분유료서비스 입니다. 실제 판매자로서 이용할 때는 돈을 지불해야겠지만 단순히 실습하고 연습하는데는 비용이 들지 않습니다. 또한 연습삼아 송금을 한다고 해도, 결제를 취소할 수 있고 일정 시간이 되면 모든 금액을 환급해주기 때문에 걱정하지 않아도 됩니다.

  • 무료

    • 1개 PG사 연동
    • 기본 관리자 대시보드
  • 유료

    • 2개 이상 PG사 연동 (최초 1회 10만원)
    • 결제 데이터 분석 ( 월 39000원)

결제의 원리

한국에서는 대부분 카드정보를 저장할 수 없도록 하기 때문에 아임포트는 카드 정보가 가게, PG사 서버를 거쳐가지 않도록 구성되어있습니다. 결제 시에는 아래 두 가지를 따르게 됩니다.

  1. 인증

    구매자가 카드사 웹페이지를 통해 카드의 유효성 확인

    카드사가 인증키를PG사에 제공

  2. 결제

    가맹점 서버 : 주문번호, 구매자 연락처 등을 PG 사에 전송

    PG 사 서버 : 가맹점 서버로 부터 받은 정보와 카드사의 인증키로 카드사에 승인 요청

아임포트

이제 본격적으로 아임포트에 대해서 알아보도록 하겠습니다. 아임포트는 js 코드를 통해 PG 결제 지원하게 됩니다. 또한 REST_API 를 통해 결제 관리 지원을 하게 됩니다. 결제 정보 찾기, 가격 확인, 결제 취소, 비인증 결제, 정기예약 결제 등 많은 기능을 해주죠.

https://admin.iamport.kr/

위 링크는 아임포트의 주소입니다. 결제 내역을 확인 할 수 있는 사이트로 로그인 --> 관리자 체험하기 에서 결제목록을 확인 및 취소할 수 있습니다.

아래는 전체 코드로서 이에 대해서 하나씩 알아보도록 하겠습니다.

<!doctype html>
<html>
<head>
    <meta charset="utf-8" />

    <script src="http://code.jquery.com/jquery-1.12.4.min.js" ></script>
    <script src="http://service.iamport.kr/js/iamport.payment-1.1.5.js"></script>
    <script>
    (function() {
        var IMP = window.IMP;
        var code = "iamport";  // FIXME: 가맹점 식별코드
        IMP.init(code);

        // 결제요청
        IMP.request_pay({
            // name과 amount만 있어도 결제 진행가능
            pg : 'html5_inicis', // pg 사 선택
            pay_method : 'card',
            merchant_uid : 'merchant_' + new Date().getTime(),
            name : '주문명:결제테스트',
            amount : 100,
            buyer_email : 'iamport@siot.do',
            buyer_name : '구매자이름',
            buyer_tel : '010-1234-5678',
            buyer_addr : '서울특별시 강남구 삼성동',
            buyer_postcode : '123-456',
            m_redirect_url : 'https://www.yourdomain.com/payments/complete'
        }, function(rsp) {
            if ( rsp.success ) {
                var msg = '결제가 완료되었습니다.';
                msg += '고유ID : ' + rsp.imp_uid;
                msg += '상점 거래ID : ' + rsp.merchant_uid;
                msg += '결제 금액 : ' + rsp.paid_amount;
                msg += '카드 승인번호 : ' + rsp.apply_num;
            }
            else {
                var msg = '결제에 실패하였습니다. 에러내용 : ' + rsp.error_msg
            }
            alert(msg);
        });
    })();
    </script>

</head>

    <body>
    </body>

</html>

먼저 script 를 활용해서 iamport .js 를 가져옵니다. 이는 jquery 기반이기 때문에 우선적으로 jquery 를 불러봐야합니다.

<script src="http://code.jquery.com/jquery-1.12.4.min.js" ></script>
<script src="http://service.iamport.kr/js/iamport.payment-1.1.5.js"></script>

IMP 는 사용자의 화면에 표시해주는 결제창, code 는 가맹점의 식별코드입니다. 가맹점 식별코드란 가맹점을 구분하기 위해, 관리자 페이지 가입과 동시에 자동 발급되는 고유한 문자로서 아임포트 홈페이지에서 확인 가능합니다.

(function() {
        var IMP = window.IMP;
        var code = "iamport";  // FIXME: 가맹점 식별코드
        IMP.init(code);

다음으로 결제 요청에 대한 내용입니다. 전부 다 필수적인 요소는 아니고 nameamount 만 있으면 결제가 가능합니다.

        IMP.request_pay({
            pg : 'html5_inicis', // pg 사 선택
            pay_method : 'card',
            merchant_uid : 'merchant_' + new Date().getTime(),
            name : '주문명:결제테스트',
            amount : 100,
            buyer_email : 'iamport@siot.do',
            buyer_name : '구매자이름',
            buyer_tel : '010-1234-5678',
            buyer_addr : '서울특별시 강남구 삼성동',
            buyer_postcode : '123-456',
            m_redirect_url : 'https://www.yourdomain.com/payments/complete'
        },
요소 설명
pg pg 사 선택 (아임포트 관리자 설정을 따를 시 미기재)
pay_method 결제 방식 선택
name 주문명
amount 주문수량
buyer_email 구매자 이메일
buyer_name 구매자 성명
buyer_tel 구매자 전화번호
buyer_addr 구매자 주소
buyer_postcode 구매자 우편번호
m_redirect_url 구매 완료 후 돌아갈 url

기타 등등 많은 요소가 있지만 이정도만 알아보도록 하겠습니다.

Comments