튜토리얼
PHP 개발환경에서 팝빌 SDK를 추가하여 전자명세서 즉시 발행 (RegistIssue) 함수를 구현하는 예시입니다.
1. POPBiLL SDK 추가 및 설정
① 팝빌 연동자료실에서 PHP SDK 예제코드 다운로드 후 압축을 해제합니다.
② 압축해제한 SDK 예제코드에 포함된 Popbill/ 폴더를 웹사이트 Root Directory 경로에 복사합니다.
③ 서비스 연동환경 설정을 위해 프로젝트 Root Directory에 common.php 파일을 생성하고 아래의 코드를 참고하여 API Key 를 설정합니다.
<?php
require_once './Popbill/PopbillStatement.php';
// 링크아이디
$LinkID = 'TESTER';
// 비밀키
$SecretKey = 'SwWxqU+0TErBXy/9TVjIPEnI0VTUMMSQZtJf3Ed8q3I=';
// 통신방식 기본은 CURL , curl 사용에 문제가 있을경우 STREAM 사용가능.
// STREAM 사용시에는 php.ini의 allow_url_fopen = on 으로 설정해야함.
define('LINKHUB_COMM_MODE','CURL');
// 서비스 객체 초기화
$StatementService = new StatementService($LinkID, $SecretKey);
// 연동환경 설정, true-테스트, false-운영(Production), (기본값:false)
$StatementService->IsTest(true);
// 인증토큰 IP 검증 설정, true-사용, false-미사용, (기본값:true)
$StatementService->IPRestrictOnOff(true);
// 통신 IP 고정, true-사용, false-미사용, (기본값:false)
$StatementService->UseStaticIP(false);
// 로컬시스템 시간 사용여부, true-사용, false-미사용, (기본값:true)
$StatementService->UseLocalTimeYN(true);
?>
2. RegistIssue 기능 구현
프로젝트 Root Directory에 함수 호출을 처리하는 파일을 생성하고, 아래의 코드를 참조하여 코드를 추가합니다.
<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';
// 전자명세서 문서번호
// 1~24자리 숫자, 영문, '-', '_' 조합으로 사업자별로 중복되지 않도록 구성
$mgtKey = '20220101-03';
// 명세서 종류코드 - 121(거래명세서), 122(청구서), 123(견적서) 124(발주서), 125(입금표), 126(영수증)
$itemCode = '121';
// 전자명세서 객체 생성
$Statement = new Statement();
/************************************************************
* 전자명세서 정보
************************************************************/
// [필수] 기재상 작성일자
$Statement->writeDate = '20220101';
// [필수] (영수, 청구, 없음) 중 기재
$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 = '20220101'; // 거래일자 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 = '20220101'; // 거래일자 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';
/************************************************************
* 전자명세서 추가속성
************************************************************/
$Statement->propertyBag = array(
'Balance' => '50000',
'Deposit' => '100000',
'CBalance' => '150000'
);
// 메모
$memo = '즉시 발행 메모';
// 팝빌 회원 아이디
$testUserID = 'testkorea';
// 발행 안내메일 제목
// 공백처리시 기본양식으로 전송됨.
$emailSubject = null;
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>
3. 결과 확인
함수 호출 반환 결과는 아래와 같습니다.
- 성공 : Response code 로 숫자 1 반환
- 실패 : PopbillException 으로 음의 정수 8자리 숫자값 오류코드와 오류메시지 반환 [오류코드]