[PHP] 팝빌 전자명세서 SDK 튜토리얼

PHP 개발환경에서 팝빌 PHP SDK를 적용하여 전자명세서 즉시발행(RegistIssue) 함수를 구현하는 예시입니다.

1. Popbill SDK 추가 팝빌 php SDK 튜토리얼

① 팝빌 연동자료실에서 PHP SDK 예제코드 다운로드 후 압축을 해제합니다.

② 압축해제한 SDK 예제코드에 포함된 Popbill/ 폴더를 웹사이트 Root Directory 경로에 복사합니다.

③ 전자명세서 서비스 연동환경 설정을 위해 프로젝트 Root Directory에 common.php 파일을 생성하고 아래의 코드를 참고하여 인증정보를 설정합니다.

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

<?php
  require_once './Popbill/PopbillStatement.php';

  // 링크아이디
  $LinkID = 'TESTER';

  // 비밀키. 유출에 주의하시기 바랍니다.
  $SecretKey = 'SwWxqU+0TErBXy/9TVjIPEnI0VTUMMSQZtJf3Ed8q3I=';

  // 통신방식 기본은 CURL , curl 사용에 문제가 있을경우 STREAM 사용가능.
  // STREAM 사용시에는 php.ini의 allow_fopen_url = on 으로 설정해야함.
  define('LINKHUB_COMM_MODE','CURL');

  $StatementService = new StatementService($LinkID, $SecretKey);

  // 연동환경 설정값, 개발용(true), 상업용(false)
  $StatementService->IsTest(true);

  // 인증토큰에 대한 IP제한기능 사용여부, 권장(true)
  $StatementService->IPRestrictOnOff(true);

  // 팝빌 API 서비스 고정 IP 사용여부(GA), 기본값(false)
  $StatementService->UseStaticIP(false);
?>

2. 전자명세서 즉시발행(RegistIssue) 함수 구현

① 프로젝트 Root Directory에 함수 호출을 처리하는 "RegistIssue.php" 파일을 생성하고, 아래의 코드를 참조하여 코드를 추가합니다.

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Popbill Statement Response.</title>
  </head>
<?php

    include 'common.php';

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

    // 팝빌 회원 아이디
    $testUserID  = 'testkorea';

    // 전자명세서 문서번호
    // 1~24자리 숫자, 영문, '-', '_' 조합으로 사업자별로 중복되지 않도록 구성
    $mgtKey = '20190828-03';

    // 명세서 종류코드 - 121(거래명세서), 122(청구서), 123(견적서) 124(발주서), 125(입금표), 126(영수증)
    $itemCode = '121';

    // 메모
    $memo = '즉시발행 메모';

    // 발행 안내메일 제목
    // 공백처리시 기본양식으로 전송됨.
    $emailSubject = '';

    // 전자명세서 객체 생성
    $Statement = new Statement();

    /************************************************************
     *                       전자명세서 정보
     ************************************************************/

    // [필수] 기재상 작성일자
    $Statement->writeDate = '20190828';

    // [필수] (영수, 청구) 중 기재
    $Statement->purposeType = '영수';

    // [필수]  과세형태, (과세, 영세, 면세) 중 기재
    $Statement->taxType = '과세';

    // 맞춤양식코드, 미기재시 기본양식으로 처리
    $Statement->formCode = '';

    // 명세서 종류 코드
    $Statement->itemCode = $itemCode;

    // 전자명세서 문서번호
    $Statement->mgtKey = $mgtKey;


    /************************************************************
     *                         공급자 정보
     ************************************************************/

    $Statement->senderCorpNum = $testCorpNum;
    $Statement->senderTaxRegID = '';
    $Statement->senderCorpName = '공급자 상호';
    $Statement->senderCEOName = '공급자 대표자 성명';
    $Statement->senderAddr = ' 공급자 주소';
    $Statement->senderBizClass = '공급자 업종';
    $Statement->senderBizType = '공급자 업태';
    $Statement->senderContactName = '공급자 담당자명';
    $Statement->senderTEL = '070-7070-0707';
    $Statement->senderHP = '010-000-2222';
    $Statement->senderEmail = 'test@test.com';


    /************************************************************
     *                         공급받는자 정보
     ************************************************************/

    $Statement->receiverCorpNum = '8888888888';
    $Statement->receiverTaxRegID = '';   // 공급받는자 종사업장 식별번호, 필요시 기재. 형식은 숫자 4자리
    $Statement->receiverCorpName = '공급받는자 상호';
    $Statement->receiverCEOName = '공급받는자 대표자 성명';
    $Statement->receiverAddr = '공급받는자 주소';
    $Statement->receiverBizClass = '공급받는자 업종';
    $Statement->receiverBizType = '공급받는자 업태';
    $Statement->receiverContactName = '공급받는자 담당자명';
    $Statement->receiverTEL = '010-0000-1111';
    $Statement->receiverHP = '010-1111-2222';
    $Statement->receiverEmail = 'frenchofkiss@gmail.com'; // 수신자 이메일주소 팝빌 개발환경에서 테스트하는 경우에도 안내 메일이 전송되므로, 실제 거래처의 메일주소가 기재되지 않도록 주의

    /************************************************************
     *                       전자명세서 기재정보
     ************************************************************/

    $Statement->supplyCostTotal = '200000'; // [필수] 공급가액 합계
    $Statement->taxTotal = '20000';  // [필수] 세액 합계
    $Statement->totalAmount = '220000';  // [필수] 합계금액 (공급가액 합계+세액합계)

    $Statement->serialNum = '123'; // 기재상 일련번호 항목
    $Statement->remark1 = '비고1';
    $Statement->remark2 = '비고2';
    $Statement->remark3 = '비고3';

    $Statement->businessLicenseYN = False; // 사업자등록증 첨부 여부
    $Statement->bankBookYN = False;  // 통장사본 첨부 여부
    $Statement->smssendYN = False; // 발행시 안내문자 전송여부


    /************************************************************
     *                       상세항목(품목) 정보
     ************************************************************/

    $Statement->detailList = array();

    $Statement->detailList[0] = new StatementDetail();

    $Statement->detailList[0]->serialNum = '1'; // 품목 일련번호 1부터 순차 기재
    $Statement->detailList[0]->purchaseDT = '20190828'; // 거래일자 yyyyMMdd
    $Statement->detailList[0]->itemName = '품명';
    $Statement->detailList[0]->spec = '규격';
    $Statement->detailList[0]->unit = '단위';
    $Statement->detailList[0]->qty = '1000';  //  수량
    $Statement->detailList[0]->unitCost = '1000000';
    $Statement->detailList[0]->supplyCost = '10000000';
    $Statement->detailList[0]->tax = '1000000';
    $Statement->detailList[0]->remark = '11,000,000';
    $Statement->detailList[0]->spare1 = '1000000';
    $Statement->detailList[0]->spare2 = '1000000';
    $Statement->detailList[0]->spare3 = 'spare3';
    $Statement->detailList[0]->spare4 = 'spare4';
    $Statement->detailList[0]->spare5 = 'spare5';

    $Statement->detailList[1] = new StatementDetail();
    $Statement->detailList[1]->serialNum = '2'; // 품목 일련번호 순차기재
    $Statement->detailList[1]->purchaseDT = '20181228'; // 거래일자 yyyyMMdd
    $Statement->detailList[1]->itemName = '품명';
    $Statement->detailList[1]->spec = '규격';
    $Statement->detailList[1]->unit = '단위';
    $Statement->detailList[1]->qty = '1';
    $Statement->detailList[1]->unitCost = '100000';
    $Statement->detailList[1]->supplyCost = '100000';
    $Statement->detailList[1]->tax = '10000';
    $Statement->detailList[1]->remark = '비고';
    $Statement->detailList[1]->spare1 = 'spare1';
    $Statement->detailList[1]->spare2 = 'spare2';
    $Statement->detailList[1]->spare3 = 'spare3';
    $Statement->detailList[1]->spare4 = 'spare4';
    $Statement->detailList[1]->spare5 = 'spare5';


    /************************************************************
     * 전자명세서 추가속성
     * - 추가속성에 관한 자세한 사항은 "[전자명세서 API 연동매뉴얼] >
     *   5.2. 기본양식 추가속성 테이블"을 참조하시기 바랍니다.
     ************************************************************/

    $Statement->propertyBag = array(
        'Balance' => '50000',
        'Deposit' => '100000',
        'CBalance' => '150000'
    );

    try {
        $result = $StatementService->RegistIssue($testCorpNum, $Statement, $memo, $testUserID, $emailSubject);
        $code = $result->code;
        $message = $result->message;
    }
    catch(PopbillException $pe) {
        $code = $pe->getCode();
        $message = $pe->getMessage();
    }
?>
  <body>
    <div id="content">
    <p class="heading1">Response</p>
    <br/>
      <fieldset class="fieldset1">
      <legend>전자명세서 즉시발행</legend>
        <ul>
          <li>Response.code : <?php echo $code ?></li>
          <li>Response.message : <?php echo $message ?></li>
        </ul>
      </fieldset>
    </div>
  </body>
</html>

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

팝빌 PHP SDK 전자명세서 Example

기술지원센터

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

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

연동문의