개발가이드

1. 서비스를 선택하여 주세요.

2. 사용하시는 개발언어를 선택하여 주세요.

kakaocert Java 튜토리얼

Java - SpringMVC/JSP 개발환경에서 kakaocert Java SDK를 추가하여 전자서명 요청 기능을 구현하는 예시입니다.

1. Maven을 이용한 kakaocert SDK 추가JDK v1.6Tomcat v9.0Spring v3.1.1

① kakaocert Java SDK를 추가하기 위해 Spring 프로젝트 "pom.xml" 파일에 kakaocert Java SDK dependency 정보를 추가하고 Maven 업데이트합니다.

<dependency>
    <groupId>kr.co.linkhub</groupId>
    <artifactId>kakaocert-sdk</artifactId>
    <version>1.1.0</version>
</dependency>

② 아래의 코드를 참고하여 "servlet-context.xml" 파일을 수정합니다. KakaocertService 클래스를 Spring 빈으로 추가하고 연동신청하여 발급 받은 링크아이디(LinkID)와 비밀키(SecretKey)을 입력해주시기 바랍니다.

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:beans="http://www.springframework.org/schema/beans"
  xmlns:context="http://www.springframework.org/schema/context"
  xmlns:util="http://www.springframework.org/schema/util"
  xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">

  <!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
  
  <!-- Enables the Spring MVC @Controller programming model -->
  <annotation-driven />

  <!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
  <resources mapping="/resources/**" location="/resources/" />

  <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
  <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <beans:property name="prefix" value="/WEB-INF/views/" />
    <beans:property name="suffix" value=".jsp" />
  </beans:bean>
  
  <context:component-scan base-package="com.kakaocert.example" />
  
  <!--
      LinkID : 링크허브에서 발급받은 파트너 링크아이디.
      SecretKey : 링크허브에서 발급받는 비밀키.
      ClientCode : 이용기관코드, 파트너가 등록한 이용기관의 코드, (파트너 사이트에서 확인가능)
      IPRestrictOnOff : 인증토큰 발급 IP 제한 On/Off, ture-제한기능 사용(기본값-권장),  false-제한기능 미사용
  -->
  <util:properties id="EXAMPLE_CONFIG">
    <beans:prop key="LinkID">TESTER</beans:prop>
    <beans:prop key="SecretKey">SwWxqU+0TErBXy/9TVjIPEnI0VTUMMSQZtJf3Ed8q3I=</beans:prop>
    <beans:prop key="ClientCode">020040000001</beans:prop>
    <beans:prop key="IsIPRestrictOnOff">true</beans:prop>
  </util:properties>

  <beans:beans>
    <!-- kakaocert Service Implementation Bean registration.  -->
    <beans:bean id="kakaocertService" class="com.kakaocert.api.KakaocertServiceImp">
      <beans:property name="linkID" value="#{EXAMPLE_CONFIG.LinkID}"/>
      <beans:property name="secretKey" value="#{EXAMPLE_CONFIG.SecretKey}"/>
      <beans:property name="IPRestrictOnOff" value="#{EXAMPLE_CONFIG.IsIPRestrictOnOff}"/>
    </beans:bean>
  </beans:beans>
  
</beans:beans>

2. 전자서명 요청 기능 구현

① 서비스 클래스 빈 객체 추가를 위해 @Autowired 어노테이션과 RequestESign 함수 코드를 추가합니다.

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.kakaocert.api.KakaocertException;
import com.kakaocert.api.KakaocertService;
import com.kakaocert.api.esign.RequestESign;

@Controller
public class KakaocertController {
  @Autowired
  private KakaocertService kakaocertService;
  
  // 이용기관코드
  // 파트너가 등록한 이용기관의 코드, (파트너 사이트에서 확인가능)
  @Value("#{EXAMPLE_CONFIG.ClientCode}")
  private String ClientCode;
  
  @RequestMapping(value = "/RequestESign", method = RequestMethod.GET)
  public String RequestESign(Model m) {
    try {
      // 전자서명 요청 정보 Object
      RequestESign request = new RequestESign();
      
      // 고객센터 전화번호  , 카카오톡 인증메시지 중 "고객센터" 항목에 표시
      request.setCallCenterNum("1600-9999");
    
      // 인증요청 만료시간(초), 최대값 : 1000  인증요청 만료시간(초) 내에 미인증시, 만료 상태로 처리됨 (권장 : 300)
      request.setExpires_in(300);
    
      // 수신자 생년월일, 형식 : YYYYMMDD
      request.setReceiverBirthDay("19700101");
    
      // 수신자 휴대폰번호  
      request.setReceiverHP("01012345117");
    
      // 수신자 성명 
      request.setReceiverName("테스트");
    
      // 인증요청 메시지 부가내용, 카카오톡 인증메시지 중 상단에 표시
      request.setTMSMessage("부가메시지 내용");
    
      // 별칭코드, 이용기관이 생성한 별칭코드 (파트너 사이트에서 확인가능)
      // 카카오톡 인증메시지 중 "요청기관" 항목에 표시
      // 별칭코드 미 기재시 이용기관의 이용기관명이 "요청기관" 항목에 표시
      request.setSubClientID("");
    
      // 인증요청 메시지 제목, 카카오톡 인증메시지 중 "요청구분" 항목에 표시
      request.setTMSTitle("TMS Title");
    
      // 전자서명 원문
      request.setToken("token value");
    
      /*
      * 인증서 발급유형 선택
      * true : 휴대폰 본인인증만을 이용해 인증서 발급
        * false : 본인계좌 점유 인증을 이용해 인증서 발급
        * 
      * - 인증메시지를 수신한 사용자가 카카오인증 비회원일 경우,
      *   카카오인증 회원등록 절차를 거쳐 은행계좌 실명확인 절차이후 전자서명 가능
      */
      request.setAllowSimpleRegistYN(false);
    
      /*
      * 수신자 실명확인 여부  
      * true : 카카오페이가 본인인증을 통해 확보한 사용자 실명과 ReceiverName 값을 비교
      * false : 카카오페이가 본인인증을 통해 확보한 사용자 실명과 RecevierName 값을 비교하지 않음. 
      */
      request.setVerifyNameYN(true);
    
      // PayLoad, 이용기관이 API 요청마다 생성한 payload(메모) 값
      request.setPayLoad("memo Info");
      String receiptID = kakaocertService.requestESign(ClientCode, request);
      m.addAttribute("receiptID", receiptID);
    } catch(KakaocertException ke) {
      System.out.println(ke.getCode());
      System.out.println(ke.getMessage());
      m.addAttribute("receiptID", "오류코드와 오류메시지를 확인하세요");
    }
    return "RequestESign";
  }
}

② 함수 호출결과 코드와 메시지를 매핑하는 "src/main/webapp/WEB-INF/views/RequestESign.jsp" 페이지를 추가합니다.

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
  <head>
    <title>Kakaocert Spring Example</title>
  </head>
  <body>
    <div>
      <p>Response</p>
      <br>
      <fieldset>
        <legend>전자서명 요청</legend>
        <ul>
          <li>receiptID(접수아이디) : ${receiptID}</li>
        </ul>
      </fieldset>
    </div>
  </body>
</html>

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

requestESign 응답 결과 예시 화면

1. kakaocert SDK 추가JDK v1.6Tomcat v9.0Eclipse 4.13.0

① 좌측 메뉴 JSP 예제 다운 버튼을 통하여 kakaocert.example.jsp.zip 다운받고 압축을 해제합니다. 다운 받은 JSP 예제에서 /WEB-INF/lib 폴더 하위에 있는 jar 파일 3개를 복사합니다.

/kakaocert.example.jsp/WEB-INF/lib/gson-version.jarjavaObject ↔ JSON 변환 구글 라이브러리

/kakaocert.example.jsp/WEB-INF/lib/linkhub-auth-version.jar링크허브 인증 라이브러리

/kakaocert.example.jsp/WEB-INF/lib/kakaocert-sdk-version.jarkakaocert API 및 통신 기능 라이브러리

② 구현할 프로젝트의 라이브러리 폴더에 복사한 3개의 jar 파일을 추가합니다.

③ 프로젝트에 kakaocert 서비스 연동환경 설정을 위한 "common.jsp" 파일을 생성 및 추가합니다. 아래의 코드를 참고하여 연동신청하여 발급 받은 링크아이디(LinkID)와 비밀키(SecretKey)를 수정합니다.

<%-- kakaocert 클래스 빈 생성 --%>
<jsp:useBean id="kakaocertService" scope="application" class="com.kakaocert.api.KakaocertServiceImp"/>

<%-- 링크아이디(LinkID) - 연동신청시 발급받은 정보로 수정 --%>
<jsp:setProperty name="kakaocertService" property="linkID" value="TESTER"/>

<%-- 비밀키(SecretKey) - 연동신청시 발급받은 정보로 수정, 사용자 인증에 사용되는 정보이므로 유출에 주의 --%>
<jsp:setProperty name="kakaocertService" property="secretKey" value="SwWxqU+0TExEXy/9TVjKPExI2VTUMMSLZtJf3Ed8q3I="/>

<%-- 인증토큰 발급 IP 제한 On/Off, ture-제한기능 사용(기본값-권장),  false-제한기능 미사용 --%>
<jsp:setProperty name="kakaocertService" property="IPRestrictOnOff" value="true"/>

2. 전자서명 요청 기능 구현

① 프로젝트에 "ReguestESign.jsp" 파일을 생성하고, 아래의 코드를 참조하여 함수 호출 코드를 추가합니다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Kakaocert SDK jsp Example.</title>
  </head>

<%@ include file="common.jsp" %>

<%@page import="com.kakaocert.api.esign.RequestESign"%>
<%@page import="com.kakaocert.api.KakaocertException"%>

<%
  /*
   * 카카오톡 사용자에게 전자서명을 요청합니다.
   */
  // 이용기관코드, 파트너가 등록한 이용기관의 코드, (파트너 사이트에서 확인가능)
  String ClientCode = "020040000001";
  
  // 전자서명 요청 정보 Object
  RequestESign eSignRequest = new RequestESign();
  
  // 고객센터 전화번호, 카카오톡 인증메시지 중 "고객센터" 항목에 표시
  eSignRequest.setCallCenterNum("1600-9999");
  
  // 인증요청 만료시간(초), 최대값 : 1000  인증요청 만료시간(초) 내에 미인증시, 만료 상태로 처리됨 (권장 : 300)
  eSignRequest.setExpires_in(300);
  
  // 수신자 생년월일, 형식 : YYYYMMDD
  eSignRequest.setReceiverBirthDay("19700101");
  
  // 수신자 휴대폰번호
  eSignRequest.setReceiverHP("01012345117");
  
  // 수신자 성명
  eSignRequest.setReceiverName("테스트");
  
  // 인증요청 메시지 부가내용, 카카오톡 인증메시지 중 상단에 표시
  eSignRequest.setTMSMessage("부가메시지 내용");
  
  // 별칭코드, 이용기관이 생성한 별칭코드 (파트너 사이트에서 확인가능)
  // 카카오톡 인증메시지 중 "요청기관" 항목에 표시
  // 별칭코드 미 기재시 이용기관의 이용기관명이 "요청기관" 항목에 표시
  eSignRequest.setSubClientID("");
  
  // 인증요청 메시지 제목, 카카오톡 인증메시지 중 "요청구분" 항목에 표시
  eSignRequest.setTMSTitle("TMS Title");
  
  // Token 원문
  eSignRequest.setToken("token value");
  
  /*
  * 인증서 발급유형 선택
  * true : 휴대폰 본인인증만을 이용해 인증서 발급
  * false : 본인계좌 점유 인증을 이용해 인증서 발급
  *
  * - 인증메시지를 수신한 사용자가 카카오인증 비회원일 경우,
  *   카카오인증 회원등록 절차를 거쳐 은행계좌 실명확인 절차이후 전자서명 가능
  */
  eSignRequest.setAllowSimpleRegistYN(false);
  
  /*
  * 수신자 실명확인 여부
  * true : 카카오페이가 본인인증을 통해 확보한 사용자 실명과 ReceiverName 값을 비교
  * false : 카카오페이가 본인인증을 통해 확보한 사용자 실명과 RecevierName 값을 비교하지 않음.
  */
  eSignRequest.setVerifyNameYN(true);
  
  // PayLoad, 이용기관이 API 요청마다 생성한 payload(메모) 값
  eSignRequest.setPayLoad("memo Info");
  
  // 접수아이디 - 전자서명 요청시 반환 받는 값
  String receiptID = null;
  
  try {
    receiptID = kakaocertService.requestESign(ClientCode, eSignRequest);
  } catch(KakaocertException ke) {
    System.out.println(ke.getCode());
    System.out.println(ke.getMessage());
    throw ke;
  }
%>
  <body>
    <div>
      <p>Response</p>
      <fieldset>
        <legend>전자서명 요청</legend>
        <ul>
          <li>접수아이디 : <%=receiptID%></li>
        </ul>
      </fieldset>
     </div>
  </body>
</html>

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

requestESign 응답 결과 예시 화면

기술지원센터

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