자동결제

빌링키 발급

카드 정보를 저장하지 않고 재사용 토큰을 만들 수 있어요.

이 문서는 고객의 결제수단을 등록하고 빌링키를 발급하는 방법을 설명해요. 고객이 결제창에 카드 정보를 등록하면 Bootpay/PG사가 빌링키를 발급해요. 가맹점 서버는 카드 정보를 저장하면 안 되고, 발급 결과를 조회해 billing_key와 표시용 카드 정보만 저장해야 해요.

핵심 요약

  • 권장 방식은 프론트엔드에서 Bootpay 결제창을 열어 빌링키를 발급받는 방식이에요.
  • 프론트엔드는 카드 정보를 직접 저장하면 안 되고, 서버는 발급 결과를 조회해 billing_key만 저장해야 해요.
  • 백엔드 직접 발급은 일부 PG에서만 지원하며 카드 정보 보안 책임이 커져요.
  • 발급된 빌링키는 빌링키 결제 요청 또는 예약결제에 사용할 수 있어요.

발급 흐름 한눈에

프론트엔드에서 발급하기

PG 결제창을 통해 안전하게 발급하는 방식이에요. 카드 정보가 PG사에서 직접 처리되므로 보안에 유리해요.

지원 PG사

KCP, 다날, 이니시스, 나이스페이먼츠, 토스페이먼츠, 웰컴페이먼츠, 키움페이

발급 요청

Bootpay.requestSubscription 함수를 사용하여 빌링키 발급을 위한 결제창을 띄워요.

파라미터 타입 필수 설명
subscription_id String 필수 가맹점에서 관리하는 고유 주문번호
method String 필수 카드자동 값을 지정
price Integer 선택 0보다 큰 값이면 빌링키 발급 즉시 결제, 0이면 빌링키만 발급
extra.subscribe_test_payment Boolean 선택 true 지정 시 100원 테스트 결제 후 자동 취소
import { Bootpay } from '@bootpay/client-js'

const response = await Bootpay.requestSubscription({
    client_key: '[ Client Key ]',
    pg: 'nicepay',
    method: '카드자동',
    order_name: '정기결제 등록',
    subscription_id: 'sub_' + Date.now(),
    price: 0,
    user: {
        username: '홍길동',
        phone: '01012345678'
    },
    extra: {
        subscribe_test_payment: true
    }
})
console.log(response)javascript

발급 결과 처리

빌링키 발급이 완료되면 done 이벤트를 전달받아요. 보안상 빌링키는 프론트엔드로 바로 전달되지 않으므로, 백엔드에서 빌링키 조회 API를 호출하여 빌링키를 확인하고 데이터베이스에 저장해야 해요.

백엔드에서 발급하기

가맹점이 직접 카드 정보를 수집하여 백엔드에서 빌링키를 발급하는 방식이에요.

지원 PG사

나이스페이먼츠, 페이앱, 웰컴페이먼츠, 토스페이먼츠, 키움페이

API 정보

POSThttps://api.bootpay.co.kr/v2/request/subscribeBasic Auth

필수 카드 정보

가맹점 결제창에서 수집해야 하는 카드 정보:

파라미터 타입 필수 설명
card_no String 필수 카드번호 (하이픈 없이)
card_pw String 필수 카드 비밀번호 앞 2자리
card_identity_no String 필수 생년월일 6자리 또는 사업자등록번호 10자리
card_expire_year String 필수 카드 유효기간 년 2자리
card_expire_month String 필수 카드 유효기간 월 2자리
import { Bootpay } from '@bootpay/backend-js'

Bootpay.setConfiguration({
    client_key: '[ Client Key ]',
    secret_key: '[ Secret Key ]'
})

try {
    const response = await Bootpay.requestSubscribeBillingKey({
        pg: 'nicepay',
        subscription_id: 'sub_' + Date.now(),
        card_no: '5570********1074',
        card_pw: '00',
        card_identity_no: '900101',
        card_expire_year: '25',
        card_expire_month: '12',
        order_name: '정기결제 등록'
    })
    // billing_key를 데이터베이스에 저장
    console.log(response)
} catch (e) {
    console.log(e)
}javascript
카드 정보 보안 주의

고객의 카드 정보(카드번호, 비밀번호, 유효기간 등)는 절대 데이터베이스에 저장하면 안 돼요. 여전법 위반이에요.

에러 코드

공통 에러

인증·권한 관련 에러는 에러 코드표를 참고해요.

코드 메시지 대처 방법
SUBSCRIBE_NEED_PG_METHOD (2300) pg와 method 정보가 필수이다 pg와 method 파라미터를 입력해요
RC_NAME_BLANK (2003) 상품명을 입력한다 order_name 값을 입력해요
RC_O_ID_BLANK (2005) order_id 값을 입력한다 subscription_id 또는 order_id를 입력해요
RC_PRICE_LEAST_LT (2004) 100원보다 큰 금액을 결제할 수 있다 price를 100원 이상으로 설정해요
RC_NOT_SUBSCRIBE (2057) 정기결제 요청 정보가 아니다 정기결제 요청 파라미터를 확인해요
RC_PROVIDER_NOT_ALLOW (2104) 가맹점이 탈퇴/차단 상태 부트페이 관리자에서 가맹점 상태를 확인해요
RC_PROVIDER_PAYMENT_NOT_ALLOW (2102) 서비스 이용료 미납으로 결제 불가 부트페이 서비스 이용료를 납부해요
SUBSCRIBE_CARD_NO_BLANK (2311) 카드 번호를 입력한다 card_no 값을 입력해요
SUBSCRIBE_CARD_PW_BLANK (2312) 카드 비밀번호 앞 2자리를 입력한다 card_pw 값을 입력해요
SUBSCRIBE_CARD_IDENTITY_BLANK (2313) 생년월일/사업자등록번호를 입력한다 card_identity_no 값을 입력해요
SUBSCRIBE_CARD_EX_YEAR_BLANK (2314) 카드 만료 년도를 입력한다 card_expire_year 값을 입력해요
SUBSCRIBE_CARD_EX_MONTH_BLANK (2315) 카드 만료 월을 입력한다 card_expire_month 값을 입력해요
SUBSCRIBE_REQUEST_FAILED (2301) 빌링키 발급 요청 실패 카드 정보를 확인 후 재시도해요
RC_RESOURCE_NOT_CONFIG (2017) 결제수단이 허가/설정되지 않았다 부트페이 관리자에서 정기결제 설정을 확인해요
SUBSCRIBE_PUBLISH_NOT_READY (2303) 빌링키 발급 대기 상태가 아니다 발급 요청을 처음부터 다시 진행해요
SUBSCRIBE_PUBLISH_M_NOT_FOUND (2305) 빌링키 발급 기능이 없는 PG 빌링키 발급을 지원하는 PG를 사용해요

다음 단계

더 읽을거리