연동매뉴얼

Python API

(Django)

kakaoCert Django 튜토리얼

Django 프레임워크를 사용하는 환경에서 pip를 이용해 kakaoCert Python SDK를 추가한 후 자동이체 출금동의 요청 기능을 구현하는 예시입니다.

1. kakaoCert SDK 추가Python v2.7.5Django 1.11.28CentOS v7.7

① kakaoCert Python SDK를 추가하기 위해 pip install 명령어를 사용하여 패키지를 설치합니다.

$ pip install kakaocert

② 프로젝트의 settings.py 파일에 python 프로젝트 문자열 설정 변경 코드와 연동환경 설정 코드를 입력합니다. 연동신청하여 발급 받은 링크아이디(LinkID)와 비밀키(SecretKey) 값을 입력해야 합니다.

# -*- coding: utf-8 -*-
import os
# python 프로젝트 문자열 설정 변경 부분
import sys
import imp
imp.reload(sys)

try:
    sys.setdefaultencoding('UTF8')
except Exception as E:
    pass
    
# 생략..

# 연동환경 설정값
# 링크아이디
LinkID = "TESTER"

# 발급받은 비밀키, 유출에 주의하시기 바랍니다.
SecretKey = "SwWxqU+0TErBXy/9TVjIPEnI0VTUMMSQZtJf3Ed8q3I="

# 인증토큰 IP제한기능 사용여부, 권장(True)
IPRestrictOnOff = True

2. 자동이체 출금동의 요청 기능 구현

① 프로젝트에 App을 생성하고, App의 views.py 파일에 kakaocert 클래스 객체 생성과 자동이체 출금동의 요청(reqeustCMS) 함수 호출 코드를 입력합니다.

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.shortcuts import render
from kakaocertDjango import settings
from kakaocert import KakaocertService, KakaocertException, RequestCMS

# kakaocertDjango(Django 프로젝트 이름)/settings.py 인증정보(LinkID, SecretKey)를 이용해
# KakaocertService 객체 인스턴스 생성
kakaocertService = KakaocertService(settings.LinkID, settings.SecretKey)

# 인증토큰 IP제한기능 사용여부, 권장(True)
kakaocertService.IPRestrictOnOff = settings.IPRestrictOnOff

def reqeustCMS(request):
    """
    자동이체 출금동의 전자서명을 요청합니다.
    - 해당 서비스는 전자서명을 하는 당사자와 출금계좌의 예금주가 동일한 경우에만 사용이 가능합니다.
    - 전자서명 당사자와 출금계좌의 예금주가 동일인임을 체크하는 의무는 이용기관에 있습니다.
    - 금융결제원에 증빙자료(전자서명 데이터) 제출은 이용기관 측 에서 진행해야 합니다.
    """
    try:

        # kakaoCert 이용기관코드, kakaoCert 파트너 사이트에서 확인
        clientCode = '020040000001';

        # 자동이체 출금동의 요청정보 객체
        requestObj = RequestCMS(

            # 고객센터 전화번호, 카카오톡 인증메시지 중 "고객센터" 항목에 표시
            CallCenterNum = '1600-9999',

            # 인증요청 만료시간(초), 최대값 : 1000  인증요청 만료시간(초) 내에 미인증시, 만료 상태로 처리됨 (권장 : 300)
            Expires_in = 300,

            # 수신자 생년월일, 형식 : YYYYMMDD
            ReceiverBirthDay = '19700101',

            # 수신자 휴대폰번호
            ReceiverHP = '01012341234',

            # 수신자 성명
            ReceiverName = '이정혁',

            # 예금주명
            BankAccountName = '예금주명',

            # 계좌번호, 이용기관은 사용자가 식별가능한 범위내에서 계좌번호의 일부를 마스킹 처리할 수 있음 (예시) 371-02-6***85
            BankAccountNum = '9-4324-5**7-58',

            # 참가기관 코드
            BankCode = '004',

            # 납부자번호, 이용기관에서 부여한 고객식별번호
            ClientUserID = 'clientUserID-0423-01',

            # 별칭코드, 이용기관이 생성한 별칭코드 (파트너 사이트에서 확인가능)
            # 카카오톡 인증메시지 중 "요청기관" 항목에 표시
            # 별칭코드 미 기재시 이용기관의 이용기관명이 "요청기관" 항목에 표시
            SubClientID = '020040000001',

            # 인증요청 메시지 부가내용, 카카오톡 인증메시지 중 상단에 표시
            TMSMessage = 'TMSMessage',

            # 인증요청 메시지 제목, 카카오톡 인증메시지 중 "요청구분" 항목에 표시
            TMSTitle = '자동이체 출금동의 요청',

            # 인증서 발급유형 선택
            # True : 휴대폰 본인인증만을 이용해 인증서 발급
            # False : 본인계좌 점유 인증을 이용해 인증서 발급
            # 카카오톡 인증메시지를 수신한 사용자가 카카오인증 비회원일 경우, 카카오인증 회원등록 절차를 거쳐 은행계좌 실명확인 절차를 밟은 다음 전자서명 가능
            isAllowSimpleRegistYN = False,

            # 수신자 실명확인 여부
            # True : 카카오페이가 본인인증을 통해 확보한 사용자 실명과 ReceiverName 값을 비교
            # False : 카카오페이가 본인인증을 통해 확보한 사용자 실명과 RecevierName 값을 비교하지 않음.
            isVerifyNameYN = True,

            # PayLoad, 이용기관이 생성한 payload(메모) 값
            PayLoad = 'memo info'
        )

        result = kakaocertService.requestCMS(clientCode, requestObj)

        return render(request, 'requestCMS.html', {'receiptId': result.receiptId})
    except KakaocertException as KE:
        return render(request, 'requestCMS.html', {'code': KE.code, 'message': KE.message})

② 프로젝트의 templates 폴더 하위에 함수 호출결과 코드와 메시지를 출력하는 "requestCMS.html" 파일을 추가합니다.

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  <title>kakaocert Django Example</title>
</head>
<body>
  <div>
    <p>Response.</p>
    <fieldset>
      <legend>자동이체 출금동의 요청</legend>
      <ul>
        {% if code is None %}
        <li> receiptId (접수아이디) : {{ receiptId }} </li>
        {% else %}
        <li> 오류 코드(code) : {{ code }} </li>
        <li> 오류 메시지(message) : {{ message }} </li>
        {% endif %}
      </ul>
    </fieldset>
  </div>
</body>
</html>

③ templates 설정을 위해 프로젝트의 setting.py를 수정합니다. TEMPLATES의 'DIRS'에 [os.path.join(BASE_DIR, 'templates')]를 입력합니다.

# 생략..
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
# 생략 ..

④ 프로젝트의 urls.py에 app의 urls를 추가합니다.

# 생략..
urlpatterns = [
    # app 이름에 따라 달라질 수 있습니다.
    url(r'', include('service.urls')),
]
# 생략 ..

⑤ 프로젝트 app의 urls.py를 수정합니다.

from django.conf.urls import url
from . import views

urlpatterns = [    
    url('RequestCMS', views.reqeustCMS, name='RequestCMS'),
]

⑥ 웹브라우저 페이지를 호출하여 함수호출 결과를 확인합니다.

requestCMS 응답 결과 예시 화면

기술지원센터

kakaoCert 기술지원은 유선, 메일, 원격지원 등 다양한 채널을 통해 제공됩니다.
T. 1600-9854E. code@linkhubcorp.com