리셀러 서버가 등록 폼 세션 발급 으로 받은
token을 판매자 화면에 넘기고,Bootpay.requestOnboarding({ token })으로 부트페이 PG 가맹 신청 화면을 연다. 판매자가 접수하면 Promise 가done으로 끝난다.
핵심 요약
- 결제창과 같은 JS SDK(
@bootpay/client-js)의 함수다. 웹 브라우저에서만 열린다. - 여는 방식(
display)은iframe(기본, 지금 페이지 위 덮개) ·popup(새 창) ·redirect(지금 창 이동) 셋이다. - 접수하면 resolve
{event: 'done', id, kind, pg_wait_id, status}, 판매자가 닫거나 「나중에 할게요」를 누르면 reject{event: 'cancel'}이다. - 화면 결과는 표시용이다. 최종 상태는 리셀러 서버가 리셀러 웹훅 이나 등록 상태 조회 로 확인한다.
- 토큰은 리셀러 서버에서 발급한다. 리셀러 키를 브라우저에 두지 않는다.
함수
Bootpay.requestOnboarding(data: {
token: string // 등록 폼 토큰(rst_…) — 필수
display?: 'iframe' | 'popup' | 'redirect' // 기본 iframe
url?: string // 세션 발급 응답의 url 을 그대로 쓸 때만(부트페이 신청 화면 주소만 받는다)
}): Promise<{
event: 'done' | 'cancel' | 'error'
id?: string // 신청서 식별자(= onboarding_id)
kind?: string // 'pg_join'
pg_wait_id?: string // id 와 같은 값
status?: number | null // 접수 직후 신청 상태
error_code?: string
message?: string
}>typescript코드 예제
import { Bootpay } from '@bootpay/client-js'
// 리셀러 서버가 등록 폼 세션 발급 API 로 받은 token 만 화면에 넘긴다
const { token } = await fetch('/api/seller/onboarding-session', { method: 'POST' }).then((r) => r.json())
try {
const result = await Bootpay.requestOnboarding({ token, display: 'iframe' })
// result.event === 'done'
showMessage('PG 신청을 접수했어요. 심사 진행은 알림으로 알려 드릴게요.')
console.log(result.pg_wait_id, result.status)
} catch (e) {
if (e.event === 'cancel') {
// 판매자가 닫았다 — 나중에 다시 열 수 있게 둔다
} else {
console.error(e.error_code, e.message)
}
}javascript여는 방식
| display | 열리는 모양 | 끝날 때 |
|---|---|---|
iframe (기본) |
지금 페이지 위에 덮개로 연다 | 접수하면 done, 덮개를 닫으면 cancel |
popup |
새 창으로 연다. 버튼 클릭 같은 사용자 동작 안에서 불러야 팝업이 막히지 않는다 | 접수하면 done, 창을 닫으면 cancel. 팝업이 막히면 POPUP_BLOCKED |
redirect |
지금 창을 신청 화면으로 옮긴다. Promise 는 끝나지 않는다 | 세션의 return_url 로 돌아온다(아래) |
redirect 로 돌아올 때
세션을 발급할 때 return_url 을 넣으면, 접수 뒤 그 주소에 결과 쿼리를 붙여 돌려보낸다. 토큰은 쿼리에 넣지 않는다.
https://reseller.example.com/onboarding/done?event=done&id=6718a0aa8f1b5b00367a0101&kind=pg_join&pg_wait_id=6718a0aa8f1b5b00367a0101&status=0
https://reseller.example.com/onboarding/done?event=cancel쿼리 값은 누구나 바꿔 붙일 수 있다. 화면 안내에만 쓰고, 상태는 서버에서 등록 상태 조회 로 다시 확인한다.
앱(웹뷰)에서 열 때
앱용 SDK 에는 아직 이 함수가 없다. 세션 발급 응답의 url 을 웹뷰나 외부 브라우저로 열고, return_url 을 앱이 받을 수 있는 https 주소로 넣어 돌아오는 시점을 잡는다.
신청 화면이 열리지 않을 때
| 상황 | 화면·결과 | 할 일 |
|---|---|---|
| 30분이 지난 토큰 | "신청 주소를 쓸 수 있는 시간이 지났어요" | 서버에서 새로 발급한다 |
| 이미 접수한 토큰 | "이미 접수한 신청 주소예요" | 고칠 내용이 있으면 mode=edit 로 새로 발급한다 |
| 같은 가맹점에 새 토큰을 발급함 | 이전 토큰은 만료로 안내된다 | 마지막에 받은 토큰을 쓴다 |
| 리셀러 사용이 멈춤 | 열리지 않는다 | 부트페이에 문의한다 |
에러 코드
| 코드 | 메시지 | 대처 방법 |
|---|---|---|
ONBOARDING_TOKEN_REQUIRED |
token 이 없다 |
세션 발급 응답의 token 을 넘긴다 |
ONBOARDING_URL_INVALID |
url 이 부트페이 신청 화면 주소가 아니다 |
세션 발급 응답의 url 을 그대로 넘기거나 url 을 빼고 token 만 넘긴다 |
POPUP_BLOCKED |
브라우저가 팝업을 막았다 | 버튼 클릭 안에서 부르거나 display: 'iframe' 을 쓴다 |
ONBOARDING_BROWSER_ONLY |
브라우저가 아닌 곳(서버 렌더링 등)에서 불렀다 | 브라우저에서 부른다 |


