연동매뉴얼

PHP API

(PHP / Laravel)

kakaoCert Laravel 튜토리얼

Laravel 프레임워크를 사용하는 환경에서 kakaoCert PHP7 SDK를 적용하여 자동이체 출금동의 요청 기능을 구현하는 예시입니다.

1. kakaoCert SDK 추가PHP v7.2.31Laravel v7.12.0Windows 10

① kakaoCert SDK를 추가하기 위해, 웹 프로젝트의 composer.json 파일에 아래 코드를 참고하여 require 부분을 수정합니다.

② composer update 명령어로 kakaoCert SDK를 다운 받습니다.

{
    "name": "laravel/laravel",
    "type": "project",
    "description": "The Laravel Framework.",
    "keywords": [
        "framework",
        "laravel"
    ],
    "license": "MIT",
    "require": {
        "php": "^7.2.5",
        "fideloper/proxy": "^4.2",
        "fruitcake/laravel-cors": "^1.0",
        "guzzlehttp/guzzle": "^6.3",
        "laravel/framework": "^7.0",
        "laravel/tinker": "^2.0",
        "linkhub/kakaocert": "2.0.0"
    },
    // 생략..

③ kakaoCert SDK 환경 설정을 위해, 아래 코드를 참고하여 웹 프로젝트 config 폴더에 kakaocert.php를 추가합니다. 이 때, 연동신청하여 발급 받은 링크아이디(LinkID)와 비밀키(SecretKey)를 입력해주시기 바랍니다.

※ PHP curl 모듈을 사용할 수 없을 경우 또는 PHP curl 모듈 관련 오류가 발생할 경우 LINKHUB_COMM_MODE 상수의 값을 "STREAM"으로 변경하고, php.ini의 allow_url_fopen 설정을 on으로 변경해주시기 바랍니다. 보안적인 이유로 개발환경이 아니라 실제 운용환경에서는 권장 하지 않습니다.

<?php

return [

    // 파트너 신청시 발급받은 링크아이디
    'LinkID' => 'TESTER',

    // 파트너 신청시 발급받은 비밀키
    'SecretKey' => 'SwWxqU+0TErBXy/9TVjIPEnI0VTUMMSQZtJf3Ed8q3I=',

    // 통신방식 기본은 CURL , PHP curl 모듈 사용에 문제가 있을 경우 STREAM 기재가능.
    // STREAM 사용시에는 php.ini의 allow_url_fopen = on 으로 설정해야함.
    'LINKHUB_COMM_MODE' => 'CURL',

    // 인증토큰의 IP제한기능 사용여부, 권장(true)
    'IPRestrictOnOff' => true,
];

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

① 프로젝트의 app/Http/Controllers에 CMSController.php를 생성하고, 아래의 코드를 참조하여 자동이체 출금동의 함수 호출을 처리하는 코드를 입력합니다.

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;

use Linkhub\LinkhubException;
use Linkhub\Kakaocert\KakaocertException;
use Linkhub\Kakaocert\KakaocertService;
use Linkhub\Kakaocert\RequestCMS;

class CMSController extends Controller
{
  public function __construct() {

    // 통신방식 설정
    define('LINKHUB_COMM_MODE', config('kakaocert.LINKHUB_COMM_MODE'));

    // kakaoCert 서비스 클래스 초기화
    $this->KakaocertService = new KakaocertService(config('kakaocert.LinkID'), config('kakaocert.SecretKey'));

    // 인증토큰의 IP제한기능 사용여부, 권장(true)
    $this->KakaocertService->IPRestrictOnOff(config('kakaocert.IPRestrictOnOff'));
  } 
  /*
  * 자동이체 출금동의 인증을 요청합니다.
  * - 해당 서비스는 전자서명을 하는 당사자와 출금계좌의 예금주가 동일한 경우에만 사용이 가능합니다.
  * - 전자서명 당사자와 출금계좌의 예금주가 동일인임을 체크하는 의무는 이용기관에 있습니다.
  * - 금융결제원에 증빙자료(전자서명 데이터) 제출은 이용기관 측 에서 진행해야 합니다.
  */
  public function RequestCMS(){

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

    // 자동이체 출금동의 요청정보 객체
    $RequestCMS = new RequestCMS();

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

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

    // 수신자 생년월일, 형식 : YYYYMMDD
    $RequestCMS->ReceiverBirthDay = '19700101';

    // 수신자 휴대폰번호
    $RequestCMS->ReceiverHP = '01012341234';

    // 수신자 성명
    $RequestCMS->ReceiverName = '테스트';

    // 예금주명
    $RequestCMS->BankAccountName = '예금주명';

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

    // 은행코드
    $RequestCMS->BankCode = '004';

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

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

    // 인증요청 메시지 부가내용, 카카오톡 인증메시지 중 상단에 표시
    $RequestCMS->TMSMessage = 'TMSMessage';

    // 인증요청 메시지 제목, 카카오톡 인증메시지 중 "요청구분" 항목에 표시
    $RequestCMS->TMSTitle = 'TMSTitle';

    // 전자서명할 토큰 원문
    $RequestCMS->Token = "TMS Token";

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

    // 수신자 실명확인 여부
    // true : 카카오페이가 본인인증을 통해 확보한 사용자 실명과 ReceiverName 값을 비교
    // false : 카카오페이가 본인인증을 통해 확보한 사용자 실명과 RecevierName 값을 비교하지 않음.
    $RequestCMS->isVerifyNameYN = true;

    // PayLoad, 이용기관이 생성한 payload(메모) 값
    $RequestCMS->PayLoad = 'memo Info';

    try {
        $receiptID = $this->KakaocertService->requestCMS($clientCode, $RequestCMS);
    }
    catch(KakaocertException $ke) {
      $code = $ke->getCode();
      $message = $ke->getMessage();
      return view('RequestCMS', ['code' => $code, 'message' => $message, 'value' => 'error']);
    }
    return view('RequestCMS', ['value' => $receiptID]);
  }
}

② 자동이체 출금동의 요청 결과를 출력하기 위해 "RequestCMS.blade.php"를 resources/views/에 추가합니다.

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

③ 아래 코드를 참고하여 routes/web.php 파일에 route 부분을 입력합니다 .

<?php
// 생략..

Route::get('/RequestCMS', 'CMSController@RequestCMS');

// 생략..

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

requestCMS 응답 결과 예시 화면

기술지원센터

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