연동매뉴얼

Java API

(Spring / JSP)

kakaoCert Spring 튜토리얼

Java - SpringMVC 개발환경에서 kakaoCert Java SDK를 추가하여 전자서명 요청(Talk Message 방식) 기능을 구현하는 예시입니다.

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>2.0.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 응답 결과 예시 화면

기술지원센터

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