POPBill Developers
연동신청
  • 가이드 0
  • 레퍼런스 0
  • 오류코드 0
현금영수증
  • 전자세금계산서
  • 현금영수증
  • 전자명세서
  • 홈택스수집(세금)
  • 홈택스수집(현금)
  • 사업자등록상태조회
  • 기업정보조회
  • 계좌조회
  • 예금주조회
  • 카카오톡
  • 문자
  • 팩스
API 레퍼런스

인증

팝빌 API를 사용하기 위한 공통 정의 사항과 인증 토큰 발급 및 사용 방법을 안내합니다.

공통 정의 사항

팝빌 API 규격은 다음과 같이 정의합니다.

  • RESTful API
  • HTTPS 통신 / TLS 1.2, 1.1 지원
  • JSON 메시지 포맷

API 호출과 응답에 필요한 문자 인코딩은 모두 UTF-8 Character Set 을 사용합니다.


팝빌 API에서 사용하는 Base URL은 다음과 같습니다.

환경 Base URL ServiceID
팝빌 인증 서버 https://auth.linkhub.co.kr -
팝빌 API 테스트 서버 https://popbill-test.linkhub.co.kr POPBILL_TEST
팝빌 API 운영 서버 https://popbill.linkhub.co.kr POPBILL

※ ServiceID는 팝빌 API 테스트/운영을 구별하는 고유식별정보입니다.


위 도메인의 IP는 가변적으로 변경됩니다.
방화벽으로 인해 고정 IP가 필요한 경우에는 아래의 Outbound 정보를 등록해야 합니다. 고정 IP를 설정한 뒤에는 아래의 안내된 도메인으로 호출해야 합니다.

환경 Base URL IP PORT
팝빌 인증 서버 https://static-auth.linkhub.co.kr 52.78.164.186
13.124.222.90
443
팝빌 API 테스트 서버 https://static-popbill-test.linkhub.co.kr
팝빌 API 운영 서버 https://static-popbill.linkhub.co.kr

인증 방식

팝빌 인증 방식은 팝빌 인증 서버로부터 토큰을 발급받고, 이후 모든 API 호출 시 토큰을 함께 전송하는 방식입니다.

팝빌 인증 토큰을 발급받기 위해서는 먼저 파트너를 식별하기 위한 LinkID와 API 통신전문 변조를 방지하기 위한 SecretKey가 필요합니다.

LinkID와 SecretKey를 이용해 HMAC-SHA256 기반의 Signature를 생성하여 Authorization Header에 기재하는 방식을 사용합니다.

HTTP Authorization Header에 기재되는 정보는 다음과 같습니다.

Authorization: LINKHUB LinkID Signature

Signature에는 전문의 변조방지 부분에 대해서 파트너의 SecretKey로 HMAC-SHA256 알고리즘으로 생성하며, Authorization Header 구성방법에 대한 의사코드(pseudocode)는 다음과 같습니다.

Authorization = "LINKHUB" + " " + LinkID + " " + Signature;

Signature = Base64( HMAC-SHA256( SecretKey, UTF-8-Encoding-Of( StringToSign ) ) );

StringToSign = HTTP-Verb + "\n" +
	Content-MD5 + "\n" +
	Date + "\n" +
	CanonicalizedLINKHUBHeaders + ResourceURI [include query string];

CanonicalizedLINKHUBHeaders = >described below<

Content-MD5는 전문에 Contents가 없는 경우(GET request)에는 빈 문자("")로 처리합니다. Date는 UTC 시간으로 기재되어야 하며, Authorization Header 또는 x-lh-date Header 중 하나의 Header에 반드시 입력되어야 합니다.
Canonicalized-LINKHUBHeaders는 HTTP Header에 팝빌이 정의하는 Header를 추가로 입력하는 정보로 'x-lh-'로 시작하는 HTTP Header에 Canonicalization한 결과입니다.

팝빌 Canonicalization 프로세스
  1. 1. 모든 Header 이름을 소문자로 변환합니다. e.g. x-lh-Date → x-lh-date
  2. 2. Header를 이름순으로 정렬합니다.
  3. 3. 동일한 Header 이름에 대해서는 공백 없는 콤마 구분자 하나로 합하여 처리합니다.
  4. 4. key와 value를 구별하는 콜론(;)의 앞/뒤 공백은 제거합니다.
  5. 5. Header의 key는 제외하고 value만 개행문자(\n)로 합하여 하나의 문자열로 처리합니다.

인증 토큰 발급

POST https://auth.linkhub.co.kr/POPBILL_TEST/Token
POST https://auth.linkhub.co.kr/POPBILL/Token
  • 팝빌 API를 사용하기 위한 인증 토큰을 발급합니다.

인증 토큰은 사업자번호별로 별도 발급이 필요합니다.
토큰은 발급 시점부터 30분 동안만 유효하며, 만료시에는 새 토큰을 재발급받아야 합니다.

Request
요청 헤더
순번 변수명 필수 설명
Authorization Y 인증 토큰
Content-Type Y 요청 본문 형식
application/json
X-LH-Version Y API 버전
2.0
X-LH-Date Y 요청 일시(UTC)
형식 : yyyy-MM-ddTHH:mm:ssZ
X-LH-Forwarded N 토큰 사용 허용 IP
*모든 IP 허용
기본값 : 토큰 발급을 요청한 IP에서만 토큰 사용 가능
요청 본문
순번 변수명 타입 길이 필수 설명
access_id string 10 Y 팝빌회원 사업자번호
scope array - Y API 접근 권한
전자세금계산서
  • 110
현금영수증
  • 140
전자명세서
  • 121거래명세서
  • 122청구서
  • 123견적서
  • 124발주서
  • 125입금표
  • 126영수증
홈택스수집
  • 111전자세금계산서
  • 141현금영수증
사업자등록상태조회
  • 170
기업정보조회
  • 171
예금주조회
  • 182성명조회
  • 183실명조회
계좌조회
  • 180
카카오톡
  • 153ATS
문자
  • 150SMS
  • 151LMS
  • 152MMS
팩스
  • 160일반망
  • 161지능망
공통
  • member
요청 예시
#!/bin/bash

LinkID="TESTER" # 팝빌에서 발급받은 API Key의 LinkID
SecretKey="SwWxqU+0TErBXy/9TVjIPEnI0VTUMMSQZtJf3Ed8q3I=" # 팝빌에서 발급받은 API Key의 SecretKey
AccessID="1234567890" # 팝빌회원 사업자번호
ServiceID="POPBILL_TEST" # 테스트 환경: POPBILL_TEST, 운영 환경: POPBILL
APIVersion="2.0" # API 버전
ForwardedIP="*" # 토큰 사용 허용 IP

RequestBody=$(printf '{"access_id":"%s","scope":["member","110"]}' "$AccessID")

Body=$(echo -n "$RequestBody" | openssl dgst -sha256 -binary | openssl base64)

RequestDT=$(date -u +"%Y-%m-%dT%H:%M:%SZ")

StringToSign=$(printf 'POST\n%s\n%s\n%s\n%s\n/%s/Token' "$Body" "$RequestDT" "$ForwardedIP" "$APIVersion" "$ServiceID")

Signature=$(echo -n "$StringToSign" | openssl dgst -sha256 -binary -mac HMAC -macopt key:$(echo -n "$SecretKey" | base64 --decode) | openssl base64)

Authorization="LINKHUB ${LinkID} ${Signature}"

curl --request POST \
  --url 'https://auth.linkhub.co.kr/${ServiceID}/Token' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: ${Authorization}' \
  --header 'X-LH-Version: ${APIVersion}' \
  --header 'X-LH-Date: ${RequestDT}' \
  --header 'X-LH-Forwarded: ${ForwardedIP}' \
  --data '$RequestBody'
Response
응답 본문
순번 변수명 타입 길이 설명
session_token string - API 처리에 대한 응답코드
1성공
serviceID string - 테스트/운영 환경 구분 고유식별정보
POPBILL_TEST테스트
POPBILL운영
linkID string - LinkID
userID string - 팝빌회원 사업자번호
partnerCode string - 파트너코드
usercode string - 팝빌회원 코드
scope array - API 접근 권한
전자세금계산서
  • 110
현금영수증
  • 140
전자명세서
  • 121거래명세서
  • 122청구서
  • 123견적서
  • 124발주서
  • 125입금표
  • 126영수증
홈택스수집
  • 111전자세금계산서
  • 141현금영수증
사업자등록상태조회
  • 170
기업정보조회
  • 171
예금주조회
  • 182성명조회
  • 183실명조회
계좌조회
  • 180
카카오톡
  • 153ATS
문자
  • 150SMS
  • 151LMS
  • 152MMS
팩스
  • 160일반망
  • 161지능망
공통
  • member
ipaddress string - 토큰 사용 허용 IP
expiration string - 토큰 만료일시(UTC)
형식 : yyyy-MM-ddTHH:mm:ssZ
응답 예시
{
    "session_token": "dGfY0osTAoWNdlNwmugjEDTu...4MuWhVplgLrlQ7FzenX98qiZYDSqQ0ISEOJP",
    "serviceID": "POPBILL_TEST",
    "linkID": "TESTER",
    "userID": "1234567890",
    "partnerCode": "014040000003",
    "usercode": "025070002467",
    "scope": [ "member", "110" ],
    "ipaddress": "*",
    "expiration": "2025-11-19T03:41:17.839Z"
}

인증 토큰 사용

인증 토큰은 팝빌 API를 호출할 때 권한을 검증하는 데 사용됩니다.
토큰은 발급 시점부터 30분간 유효하며, 유효 기간이 지난 후에는 새 토큰을 재발급받아 사용해야 합니다.

팝빌 API를 호출할 때 Bearer 방식으로 Authorization 헤더에 토큰 값을 입력합니다.

Authorization: Bearer {session_token}