[C#.NET] 팝빌 전자명세서 SDK 튜토리얼

C#.NET 개발환경에서 팝빌 SDK 프로젝트를 추가한 후 전자명세서 즉시발행(RegistIssue API) 함수를 구현하는 예시입니다.

1. Popbill SDK 추가 및 클래스 초기화

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

② 다운받은 SDK 예제코드의 Linkhub/, Popbill/ 폴더를 SDK를 적용할 프로젝트 경로에 복사하고. Linkhub.csproj, Popbill.csproj를 각각 기존 프로젝트로 추가합니다.

팝빌 C#.NET SDK Example Tutorial

③ Popbill 프로젝트를 적용할 프로젝트의 참조로 추가합니다.

팝빌 C#.NET SDK Example Tutorial

④ 연동환경 설정값, 전자명세서 서비스 클래스를 선언하고 폼의 생성자 Form1()에 서비스 클래스 초기화 코드를 추가합니다.

연동신청시 발급받은 인증정보로 링크아이디(LinkID)와 비밀키(SecretKey) 값을 변경하시기 바랍니다.


namespace Popbill.Statement
{
    public partial class Form1 : Form
    {

        // 연동신청시 발급받은 링크아이디로 수정.
        private string LinkID = "TESTER";

        // 연동신청시 발급받은 비밀키로 수정.
        private string SecretKey = "SwWxqU+0TErBXy/9TVjIPEnI0VTUMMSQZtJf3Ed8q3I=";

        // 전자명세서 서비스 객체 선언
        private StatementService statementService;

        public Form1()
        {
            InitializeComponent();

            // 전자명세서 서비스 객체 초기화
            statementService = new StatementService(LinkID, SecretKey);

            // 연동환경 설정값, true - 개발용(테스트베드), false - 상업용(실서비스)
            statementService.IsTest = true;
        }
    }
}
                    
                

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

① Form에 버튼을 생성하고 버튼의 Click Event 코드에 전자명세서 즉시발행 함수(RegistIssue)를 추가합니다.

private void btnRegistIssue_Click(object sender, EventArgs e)
{
    // 팝빌회원 사업자번호
    String corpNum = "1234567890";

    // 팝빌회원 아이디
    String userID = "testkorea";

    // 즉시발행 메모
    String memo = "즉시발행 메모";

    // 전자명세서 객체
    Statement statement = new Statement();

    // [필수], 기재상 작성일자 날짜형식(yyyyMMdd)
    statement.writeDate = "20190828";

    // [필수], {영수, 청구} 중 기재
    statement.purposeType = "영수";

    // [필수], 과세형태, {과세, 영세, 면세} 중 기재
    statement.taxType = "과세";

    // 맞춤양식코드, 기본값을 공백('')으로 처리하면 기본양식으로 처리.
    statement.formCode = "";

    // [필수] 전자명세서 양식코드
    statement.itemCode = 121;

    // [필수] 문서관리번호, 1~24자리 숫자, 영문, '-', '_' 조합으로 사업자별로 중복되지 않도록 구성
    statement.mgtKey = "20190828-042";


    /**************************************************************************
     *                          발신자 정보                                   *
     **************************************************************************/

    // [필수] 발신자 사업자번호
    statement.senderCorpNum = txtCorpNum.Text;

    // 종사업자 식별번호. 필요시 기재. 형식은 숫자 4자리.
    statement.senderTaxRegID = "";

    // 발신자 상호
    statement.senderCorpName = "발신자 상호";

    // 발신자 대표자 성명
    statement.senderCEOName = "발신자 대표자 성명";

    // 발신자 주소
    statement.senderAddr = "발신자 주소";

    // 발신자 종목
    statement.senderBizClass = "발신자 종목";

    // 발신자 업태
    statement.senderBizType = "발신자 업태,업태2";

    // 발신자 담당자 성명
    statement.senderContactName = "발신자 담당자명";

    // 발신자 메일주소
    statement.senderEmail = "test@test.com";

    // 발신자 연락처
    statement.senderTEL = "070-7070-0707";

    // 발신자 휴대폰번호
    statement.senderHP = "010-000-2222";


    /**************************************************************************
     *                             수신자 정보                                *
     **************************************************************************/

    // 수신자 사업자번호
    statement.receiverCorpNum = "8888888888";

    // [필수] 수신자 상호
    statement.receiverCorpName = "수신자 상호";

    // 수신자 대표자 성명
    statement.receiverCEOName = "수신자 대표자 성명";

    // 수신자 주소
    statement.receiverAddr = "수신자 주소";

    // 수신자 종목
    statement.receiverBizClass = "수신자 종목";

    // 수신자 업태
    statement.receiverBizType = "수신자 업태";

    // 수신자 담당자 성명
    statement.receiverContactName = "수신자 담당자명";

    // 수신자 메일주소
    statement.receiverEmail = "test@receiver.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.detailList = new List();

    StatementDetail detail = new StatementDetail();

    detail.serialNum = 1; // 일련번호, 1부터 순차기재, 최대 99
    detail.purchaseDT = "20190828"; // 거래일자
    detail.itemName = "품목명"; //품목명
    detail.spec = "규격"; //규격
    detail.qty = "1"; // 수량
    detail.unitCost = "100000"; // 단가
    detail.supplyCost = "100000"; // 공급가액
    detail.tax = "10000"; // 세액
    detail.remark = "품목비고"; // 비고
    detail.spare1 = "spare1"; // 여분1
    detail.spare1 = "spare2"; // 여분2
    detail.spare1 = "spare3"; // 여분3
    detail.spare1 = "spare4"; // 여분4
    detail.spare1 = "spare5"; // 여분5

    statement.detailList.Add(detail);

    detail = new StatementDetail();

    detail.serialNum = 2; // 일련번호, 1부터 순차기재, 최대 99
    detail.purchaseDT = "20190828"; // 거래일자
    detail.itemName = "품목명"; //품목명
    detail.spec = "규격"; //규격
    detail.qty = "1"; // 수량
    detail.unitCost = "100000"; // 단가
    detail.supplyCost = "100000"; // 공급가액
    detail.tax = "10000"; // 세액
    detail.remark = "품목비고"; // 비고
    detail.spare1 = "spare1"; // 여분1
    detail.spare1 = "spare2"; // 여분2
    detail.spare1 = "spare3"; // 여분3
    detail.spare1 = "spare4"; // 여분4
    detail.spare1 = "spare5"; // 여분5

    statement.detailList.Add(detail);


    // 추가속성항목, 자세한사항은 "전자명세서 API 연동매뉴얼> 5.2 기본양식 추가속성 테이블" 참조.
    statement.propertyBag = new propertyBag();

    statement.propertyBag.Add("Balance", "15000"); // 전잔액
    statement.propertyBag.Add("Deposit", "5000"); // 입금액
    statement.propertyBag.Add("CBalance", "20000"); // 현잔액

    try
    {
        Response response = statementService.RegistIssue(corpNum, statement, memo, userID);

        MessageBox.Show("응답코드(code) : " + response.code.ToString() + "\r\n" +
                        "응답메시지(message) : " + response.message, "전자명세서 즉시발행");
    }
    catch (PopbillException ex)
    {
        MessageBox.Show("응답코드(code) : " + ex.code.ToString() + "\r\n" +
                        "응답메시지(message) : " + ex.Message, "전자명세서 즉시발행");
    }
}

② 버튼 클릭으로 함수호출 결과를 확인합니다.

팝빌 C#.NET SDK 전자명세서 Example

기술지원센터

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

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

연동문의