[PHP - Laravel] 팝빌 현금영수증 SDK 튜토리얼

Laravel 프레임워크를 사용하는 환경에서 팝빌 PHP-Laravel SDK를 적용하여 현금영수증 즉시발행(RegistIssue) 함수를 구현하는 예시입니다.

1. Popbill SDK Composer 추가 팝빌 PHP SDK Laravel 예시 개발 환경 - CentOS v6.8 | PHP v7.1.16 | Laravel v5.7

① 팝빌 PHP SDK를 추가하기 위해 Laravel 프로젝트의 composer.json 파일의 require 필드 오브젝트에 Popbill SDK 정보를 추가합니다.

 {
   "name" : "laravel/laravel" ,
   "type" : "project" ,
   "description" : "The Laravel Framework." ,
   "keywords" : [
     "framework" ,
     "laravel"
   ],
   "license" : "MIT" ,
   "require" : {
     "php" : "^7.1.3" ,
     "fideloper/proxy" : "^4.0" ,
     "laravel/framework" : "5.7.*" ,
     "laravel/tinker" : "^1.0" ,
     "linkhub/popbill" : "^1.8.0"
   },
   // 생략..

② composer.json 파일 수정후 composer update 커멘드를 실행하여 popbill 패키지를 설치합니다.

③ 현금영수증 SDK의 환경설정을 위해 laravel 프로젝트 config 폴더에 popbill.php 파일을 추가합니다.

연동신청시 발급받은 인증정보로 링크아이디(LinkID)와 비밀키(SecretKey) 값을 변경이 필요합니다.
Window 계열 OS 환경에서 APM을 통해 개발환경을 구성한 경우 LINKHUB_COMM_MODE 상수의 값을 "STREAM"으로 변경합니다.

<?php
return [

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

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

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

    // 연동환경 설정값, 개발용(true), 상업용(false)
    'IsTest' => true,

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

2. 현금영수증 즉시발행(RegistIssue) 함수 구현

① Controller를 추가하고 클래스 생성자(__construct)에 팝빌 서비스 클래스 초기화 코드와 RegistIssue 함수를 추가합니다.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use Linkhub\LinkhubException;
use Linkhub\Popbill\JoinForm;
use Linkhub\Popbill\CorpInfo;
use Linkhub\Popbill\ContactInfo;
use Linkhub\Popbill\ChargeInfo;
use Linkhub\Popbill\PopbillException;

use Linkhub\Popbill\PopbillCashbill;
use Linkhub\Popbill\Cashbill;


class TaskController extends Controller
{
  public function __construct() {

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

    // 현금영수증 서비스 클래스 초기화
    $this->PopbillCashbill = new PopbillCashbill(config('popbill.LinkID'), config('popbill.SecretKey'));

    // 연동환경 설정값, 개발용(true), 상업용(false)
    $this->PopbillCashbill->IsTest(config('popbill.IsTest'));

    // 인증토큰의 IP제한기능 사용여부, 권장(true)
    $this->PopbillCashbill->IPRestrictOnOff(config('popbill.IPRestrictOnOff'));
  }

  public function RegistIssue(){

    // 팝빌 회원 사업자번호, '-' 제외 10자리
    $testCorpNum = '1234567890';

    // 문서번호, 사업자별로 중복없이 1~24자리 영문, 숫자, '-', '_' 조합으로 구성
    $mgtKey = '20190828-021';

    // 메모
    $memo = '현금영수증 즉시발행 메모';

    // 현금영수증 객체 생성
    $Cashbill = new Cashbill();

    // [필수] 현금영수증 문서번호,
    $Cashbill->mgtKey = $mgtKey;

    // [필수] 문서형태, (승인거래, 취소거래) 중 기재
    $Cashbill->tradeType = '승인거래';

    // [필수] 거래구분, (소득공제용, 지출증빙용) 중 기재
    $Cashbill->tradeUsage = '소득공제용';

    // [필수] 거래유형, (일반, 도서공연, 대중교통) 중 기재
    $Cashbill->tradeOpt = '일반';

    // [필수] 과세형태, (과세, 비과세) 중 기재
    $Cashbill->taxationType = '과세';

    // [필수] 거래금액, ','콤마 불가 숫자만 가능
    $Cashbill->totalAmount = '11000';

    // [필수] 공급가액, ','콤마 불가 숫자만 가능
    $Cashbill->supplyCost = '10000';

    // [필수] 부가세, ','콤마 불가 숫자만 가능
    $Cashbill->tax = '1000';

    // [필수] 봉사료, ','콤마 불가 숫자만 가능
    $Cashbill->serviceFee = '0';

    // [필수] 가맹점 사업자번호
    $Cashbill->franchiseCorpNum = $testCorpNum;

    // 가맹점 상호
    $Cashbill->franchiseCorpName = '발행자 상호';

    // 가맹점 대표자 성명
    $Cashbill->franchiseCEOName = '발행자 대표자명';

    // 가맹점 주소
    $Cashbill->franchiseAddr = '발행자 주소';

    // 가맹점 전화번호
    $Cashbill->franchiseTEL = '070-1234-1234';

    // [필수] 식별번호, 거래구분에 따라 작성
    // 소득공제용 - 주민등록/휴대폰/카드번호 기재가능
    // 지출증빙용 - 사업자번호/주민등록/휴대폰/카드번호 기재가능
    $Cashbill->identityNum = '0101112222';

    // 주문자명
    $Cashbill->customerName = '고객명';

    // 주문상품명
    $Cashbill->itemName = '상품명';

    // 주문주문번호
    $Cashbill->orderNumber = '주문번호';

    // 주문자 이메일
    // 팝빌 개발환경에서 테스트하는 경우에도 안내 메일이 전송되므로,
    // 실제 거래처의 메일주소가 기재되지 않도록 주의
    $Cashbill->email = 'test@test.com';

    // 주문자 휴대폰
    $Cashbill->hp = '010-111-222';

    // 발행시 알림문자 전송여부
    $Cashbill->smssendYN = false;

    try {
        $result = $this->PopbillCashbill->RegistIssue($testCorpNum, $Cashbill, $memo);
        $code = $result->code;
        $message = $result->message;
    }
    catch(PopbillException | LinkhubException $pe) {
        $code = $pe->getCode();
        $message = $pe->getMessage();
    }

    return view('PResponse', ['code' => $code, 'message' => $message]);
  }
}                

② 호출 결과를 출력하는 페이지(PResponse.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>Popbill Cashbill Response.</title>
  </head>
  <body>
    <div id="content">
      <p class="heading1">Response</p>
      <br/>
      <fieldset class="fieldset1">
        <ul>
          <li>code (응답코드) : {{ $code }}</li>
          <li>message (응답메시지) : {{ $message }}</li>
        </ul>
      </fieldset>
    </div>
  </body>
</html>
                
팝빌 PHP Laravel SDK 현금영수증 Example

기술지원센터

팝빌 기술지원은 유선, 메일, 원격지원 등 다양한 채널을 통해 제공됩니다.

T. 1600-9854   E. code@linkhub.co.kr

연동문의