튜토리얼
Ruby 개발환경에서 팝빌 SDK를 추가하고, 현금영수증 즉시 발행 (RegistIssue) API를 호출하는 기본 과정을 단계별로 따라 해볼 수 있도록 구성된 가이드 입니다.
1. POPBiLL SDK 추가
팝빌 Ruby SDK를 추가하기 위해 Rails 프로젝트 "Gemfile" 파일에 팝빌 Ruby Gem SDK 정보를 추가하고 bundle install을 진행합니다.
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
ruby '2.3.0'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 5.2.3'
# 팝빌 API Service
gem 'popbill', '1.52.0'
# 생략
# ...
2. POPBiLL SDK 설정
프로젝트에 현금영수증 서비스 기능을 수행할 Controller를 생성합니다.
rails generate controller tutorial
Controller에 연동신청시 발급받은 API Key 를 변수로 선언하고 아래의 코드를 참조하여 현금영수증 서비스 객체를 생성 합니다.
require 'popbill/cashbill'
class CashbillController < ApplicationController
# 링크아이디
LinkID = "LinkID"
# 비밀키
SecretKey = "SwWxqU+0TExEXy/9TVjKPExI2VTUMMSLZtJf3Ed8q3I="
# 현금영수증 서비스 객체 초기화
CBService = CashbillService.instance(
CashbillController::LinkID,
CashbillController::SecretKey
)
# 연동환경 설정, true-테스트, false-운영(Production), (기본값:false)
CBService.setIsTest(true)
# 인증토큰 IP 검증 설정, true-사용, false-미사용, (기본값:true)
CBService.setIpRestrictOnOff(true)
# 통신 IP 고정, true-사용, false-미사용, (기본값:false)
CBService.setUseStaticIP(false)
# 로컬시스템 시간 사용여부, true-사용, false-미사용, (기본값:true)
CBService.setUseLocalTimeYN(true)
end
3. RegistIssue 기능 구현
Controller 코드에 현금영수증 즉시 발행 (RegistIssue) 함수 호출 코드를 추가합니다.
def registIssue
# 팝빌회원 사업자번호, "-" 제외
corpNum = "1234567890"
# 문서번호
# 문서 관리를 위해 파트너가 할당하는 식별번호
# 1~24자리 영문 대소문자, 숫자, 특수문자('-','_')로 구성
mgtKey = "20250314-01"
# 현금영수증 객체 생성
cashbill = {
"mgtKey" => mgtKey,
# 거래일시, 형식(yyyyMMddHHmmss)
# 발행기준 전일부터 당일까지 입력 가능
# 미입력시 기본값(발행일시) 처리됨
"tradeDT" => "20250319093919",
# 문서형태
"tradeType" => "승인거래",
# 거래구분, [소득공제용, 지출증빙용] 중 기재
"tradeUsage" => "소득공제용",
# 거래유형, [일반, 도서공연, 대중교통] 중 기재
"tradeOpt" => "일반",
# 과세형태, [과세, 비과세] 중 기재
"taxationType" => "과세",
# 공급가액
"supplyCost" => "10000",
# 부가세
"tax" => "1000",
# 봉사료
"serviceFee" => "0",
# 합계금액, 공급가액 + 부가세 + 봉사료
"totalAmount" => "11000",
# 가맹점 사업자번호
"franchiseCorpNum" => corpNum,
# 가맹점 종사업장 식별번호
"franchiseTaxRegID" => "",
# 가맹점 상호
"franchiseCorpName" => "가맹점 상호",
# 가맹점 대표자 성명
"franchiseCEOName" => "가맹점 대표자 성명",
# 가맹점 주소
"franchiseAddr" => "가맹점 주소",
# 가맹점 전화번호
"franchiseTEL" => "가맹점 연락처",
# 식별번호, 거래구분에 따라 작성
# 소득공제용 - 주민등록/휴대폰/카드번호/자진발급용 번호(010-000-1234) 기재가능
# 지출증빙용 - 사업자번호/주민등록/휴대폰/카드번호 기재가능
"identityNum" => "0100001234",
# 주문 상품명
"itemName" => "상품명",
# 주문번호
"orderNumber" => "가맹점 주문번호",
# 구매자(고객) 성명
"customerName" => "고객명",
# 구매자(고객) 이메일
# 팝빌 개발환경에서 테스트하는 경우에도 안내 메일이 전송되므로,
# 실제 구매자의 메일주소가 기재되지 않도록 주의
"email" => "test@Testcom",
# 구매자(고객) 휴대폰
"hp" => "010-111-222",
# 구매자 알림문자 전송 여부
# 알림문자 전송시 포인트가 차감되며, 전송실패시 환불처리됨
"smssendYN" => false
} # end of cashbill hash
begin
@Response = TutorialController::CBService.registIssue(
corpNum,
cashbill,
)
render "home/response"
rescue PopbillException => pe
@Response = pe
render "home/exception"
end
end
4. API 응답결과 확인
API 호출 응답결과는 다음과 같습니다.
| 구분 | 응답 |
| 성공 | code : 1 |
| 실패 |
code : 오류코드 (8자리 음의 정수) [오류코드] message : 오류메시지 |












