POPBill Developers
가이드

튜토리얼

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

1. POPBiLL SDK 추가

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

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

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

2. POPBiLL SDK 설정

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

Public Class Form1
  '링크아이디
  Private Const LinkID As String = "TESTER"

  '비밀키
  Private SecretKey As String = "SwWxqU+0TErBXy/9TVjIPEnI0VTUMMSQZtJf3Ed8q3I="

  '전자명세서 서비스 객체 선언
  Private statementService As StatementService

  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    '전자명세서 서비스 객체 초기화
    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-미사용, (기본값:false)
    statementService.UseLocalTimeYN = False

  End Sub
End Class

3. RegistIssue 기능 구현

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

Imports Popbill
Imports Popbill.Statement
Imports System.ComponentModel

Public Class Form1
    Private Sub btnRegistIssue_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRegistIssue.Click
        Dim statement As New Statement

        '기재상 작성일자, 날짜형식(yyyyMMdd)
        statement.writeDate = "20250314"

        '{영수, 청구, 없음} 중 기재
        statement.purposeType = "영수"

        '과세형태, {과세, 영세, 면세} 중 기재
        statement.taxType = "과세"

        '맞춤양식코드, 공백처리시 기본양식으로 작성
        statement.formCode = txtFormCode.Text

        '전자명세서 종류코드
        statement.itemCode = selectedItemCode()

        '문서번호, 최대 24자리, 영문, 숫자 '-', '_'를 조합하여 사업자별로 중복되지 않도록 구성
        statement.mgtKey = txtMgtKey.Text


        '=========================================================================
        '                               발신자 정보
        '=========================================================================

        '발신자 사업자번호, '-' 제외 10자리
        statement.senderCorpNum = txtCorpNum.Text

        '발신자 종사업장 식별번호, 필요시 기재, 형식은 숫자 4자리
        statement.senderTaxRegID = ""

        '발신자 상호
        statement.senderCorpName = "발신자 상호"

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

        '발신자 주소
        statement.senderAddr = "발신자 주소"

        '발신자 종목
        statement.senderBizClass = "발신자 종목"

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

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

        '발신자 이메일
        statement.senderEmail = ""

        '발신자 연락처
        statement.senderTEL = ""

        '발신자 휴대전화 번호
        statement.senderHP = ""


        '=========================================================================
        '                        수신자 정보
        '=========================================================================

        '수신자 사업자번호, '-' 제외 10자리
        statement.receiverCorpNum = "8888888888"

        '수신자 상호
        statement.receiverCorpName = "수신자 상호"

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

        '수신자 주소
        statement.receiverAddr = "수신자 주소"

        '수신자 종목
        statement.receiverBizClass = "수신자 종목 "

        '수신자 업태
        statement.receiverBizType = "수신자 업태"

        '수신자 담당자명
        statement.receiverContactName = "수신자 담당자명"

        '수신자 담당자 휴대폰번호
        statement.receiverHP = ""

        '수신자 담당자 연락처
        statement.receiverTEL = ""

        '수신자 메일주소
        '팝빌 테스트 환경에서 테스트하는 경우에도 안내 메일이 전송되므로,
        '실제 거래처의 메일주소가 기재되지 않도록 주의
        statement.receiverEmail = ""

        '=========================================================================
        '                     전자명세서 기재사항
        '=========================================================================

        '공급가액 합계
        statement.supplyCostTotal = "100000"

        '세액 합계
        statement.taxTotal = "10000"

        '합계금액, 공급가액 합계 + 세액 합계
        statement.totalAmount = "110000"

        '기재 상 일련번호 항목
        statement.serialNum = "123"

        '기재 상 비고 항목
        statement.remark1 = "비고1"
        statement.remark2 = "비고2"
        statement.remark3 = "비고3"

        ' 문자 자동전송 여부 (true / false 중 택 1)
        ' └ true = 전송 , false = 미전송(기본값)
        statement.smssendYN = False

        ' 사업자등록증 이미지 첨부여부 (true / false 중 택 1)
        ' └ true = 첨부 , false = 미첨부(기본값)
        ' - 팝빌 사이트 또는 인감 및 첨부문서 등록 팝업 URL (GetSealURL API) 함수를 이용하여 등록
        statement.businessLicenseYN = False

        ' 통장사본 이미지 첨부여부 (true / false 중 택 1)
        ' └ true = 첨부 , false = 미첨부(기본값)
        ' - 팝빌 사이트 또는 인감 및 첨부문서 등록 팝업 URL (GetSealURL API) 함수를 이용하여 등록
        statement.bankBookYN = False

        statement.detailList = New List(Of StatementDetail)

        Dim newDetail As StatementDetail = New StatementDetail

        newDetail.serialNum = 1             '일련번호 1부터 순차 기재
        newDetail.purchaseDT = "20250314"   '거래일자  yyyyMMdd
        newDetail.itemName = "품명"         '품목명
        newDetail.spec = "규격"             '규격
        newDetail.unit = "단위"             '단위
        newDetail.qty = "1" '               '수량 소수점 2자리까지 문자열로 기재가능
        newDetail.unitCost = "100000"       '단가 소수점 2자리까지 문자열로 기재가능
        newDetail.supplyCost = "100000"     '공급가액 소수점 기재 불가
        newDetail.tax = "10000"             '세액 소수점 기재불가
        newDetail.remark = "비고"           '비고
        newDetail.spare1 = "spare1"         '여분1
        newDetail.spare2 = "spare2"         '여분2
        newDetail.spare3 = "spare3"         '여분3
        newDetail.spare4 = "spare4"         '여분4
        newDetail.spare5 = "spare5"         '여분5

        statement.detailList.Add(newDetail)

        newDetail = New StatementDetail

        newDetail.serialNum = 2             '일련번호 1부터 순차 기재
        newDetail.purchaseDT = "20250314"   '거래일자  yyyyMMdd
        newDetail.itemName = "품명"         '품목명
        newDetail.spec = "규격"             '규격


        '=========================================================================
        ' 전자명세서 추가속성
        ' - 추가속성에 관한 자세한 사항은 "[전자명세서 API 연동매뉴얼] >
        '   기본양식 추가속성 테이블"을 참조하시기 바랍니다.
        ' [https://developers.popbill.com/guide/statement/dotnet/introduction/statement-form#propertybag-table]
        '=========================================================================
        statement.propertyBag = New Dictionary(Of String, String)

        statement.propertyBag.Add("CBalance", "10000")
        statement.propertyBag.Add("Deposit", "10000")
        statement.propertyBag.Add("Balance", "10000")

        '메모
        Dim memo As String = "즉시발행 메모"

        '안내메일 제목
        Dim emailSubject As String = ""

        Try
            Dim response As STMIssueResponse = statementService.RegistIssue(txtCorpNum.Text, statement, memo, txtUserId.Text, emailSubject)

            MsgBox("code(응답코드) : " + response.code.ToString + vbCrLf + "message(응답메시지) : " + response.message + vbCrLf + "invoiceNum(팝빌 승인번호) : " + response.invoiceNum)
        Catch ex As PopbillException
            MsgBox("code(응답코드) : " + ex.code.ToString + vbCrLf + "message(응답메시지) : " + ex.Message)
        End Try
    End Sub
End Class

4. 결과 확인

함수 호출 반환 결과는 아래와 같습니다.
- 성공 : Response code 숫자 1 반환
- 실패 : PopbillException 음의 정수 8자리 숫자값 오류코드와 오류메시지 반환 [오류코드]