마켓플레이스

등록 폼 열기 (JS SDK)

토큰 하나로 리셀러 화면 위에 PG 신청 폼을 띄운다.

리셀러 서버가 등록 폼 세션 발급 으로 받은 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 브라우저가 아닌 곳(서버 렌더링 등)에서 불렀다 브라우저에서 부른다

함께 보기