셀러 담당자에게 부트페이 콘솔 권한을 코드로 부여한다.
리셀러가 셀러의 부트페이 콘솔 권한을 코드로 발급한다. 셀러 전체(provider) 에 접근시키거나, 특정 프로젝트(app) 에만 권한을 묶는 두 가지 모드가 있다. 메일이 발송되고, 수신자가 메일 안의 링크로 가입을 완료하면 권한이 부여된다.
핵심 요약
invite_type 으로 팀(provider) / 프로젝트(app) 두 종류를 구분한다.
- 같은 이메일을 짧은 시간에 반복 초대하면
INVITE_LIMIT_OVER 로 막힌다. 본사 콘솔에서 클릭 한 번에 여러 번 보내는 흐름은 디바운스해서 호출한다.
- 이미 가입한 사용자에게는 가입 안내 대신 권한만 추가된다.
- 응답 본문은 비어 있다. HTTP 200 이면 초대 메일이 발송된 상태다.
두 가지 초대 모드
| invite_type |
의미 |
필요한 식별자 |
팀 또는 provider |
셀러 전체(provider) 권한을 부여한다 |
provider_id |
프로젝트 또는 app |
특정 프로젝트(app) 권한만 부여한다 |
app_id |
📌
한국어 키와 영문 키 모두 받는다. 본문에서는 영문 키를 권장한다.
API 정보
POSThttps://api.bootpay.co.kr/v2/reseller/inviteBasic Auth (리셀러 계정 키)
요청 파라미터
| 파라미터 |
타입 |
필수 |
설명 |
invite_type |
String |
필수 |
provider(셀러 전체) 또는 app(특정 프로젝트). 한국어 팀/프로젝트 도 허용 |
email |
String |
필수 |
초대받을 사람의 이메일 |
level |
String |
필수 |
권한 레벨. 아래 권한 레벨 표 참고 |
provider_id |
String |
선택 |
invite_type 이 provider 일 때 필수 |
app_id |
String |
선택 |
invite_type 이 app 일 때 필수 |
권한 레벨
level 은 invite_type 에 따라 의미가 달라진다.
invite_type=app (프로젝트 권한)
| level |
의미 |
admin 또는 관리자 |
프로젝트의 모든 설정을 수정할 수 있다 |
manager 또는 매니저 |
결제 조회·취소, 결제 설정, 프로젝트 정보 설정 등 |
member 또는 팀원 |
결제 내역 조회 권한만 부여된다 |
invite_type=provider (팀 권한)
| level |
의미 |
admin |
셀러 그룹의 정보·권한을 관리한다 |
user |
셀러의 모든 프로젝트에 접속 가능. 프로젝트별로 별도 권한 부여 가능 |
코드 예제
셀러 전체 권한 부여
import fetch from 'node-fetch'
const RESELLER_AUTH = 'Basic ' + Buffer
.from(`${process.env.BOOTPAY_RESELLER_CLIENT_KEY}:${process.env.BOOTPAY_RESELLER_SECRET_KEY}`)
.toString('base64')
const res = await fetch('https://api.bootpay.co.kr/v2/reseller/invite', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': RESELLER_AUTH
},
body: JSON.stringify({
invite_type: 'provider',
provider_id: '65a1c0aa8f1b5b00367a0001',
email: 'owner@hanip.shop',
level: 'admin'
})
})
console.log(res.status) // 200javascript
import base64, os, requests
auth = 'Basic ' + base64.b64encode(
f"{os.environ['BOOTPAY_RESELLER_CLIENT_KEY']}:{os.environ['BOOTPAY_RESELLER_SECRET_KEY']}".encode()
).decode()
payload = {
'invite_type': 'provider',
'provider_id': '65a1c0aa8f1b5b00367a0001',
'email': 'owner@hanip.shop',
'level': 'admin'
}
res = requests.post(
'https://api.bootpay.co.kr/v2/reseller/invite',
json=payload,
headers={'Authorization': auth}
)
print(res.status_code)python
RESELLER_AUTH=$(printf '%s' "$BOOTPAY_RESELLER_CLIENT_KEY:$BOOTPAY_RESELLER_SECRET_KEY" | base64)
curl -X POST 'https://api.bootpay.co.kr/v2/reseller/invite' \
-H "Authorization: Basic $RESELLER_AUTH" \
-H 'Content-Type: application/json' \
-d '{
"invite_type": "provider",
"provider_id": "65a1c0aa8f1b5b00367a0001",
"email": "owner@hanip.shop",
"level": "admin"
}'bash
특정 프로젝트만 권한 부여
const res = await fetch('https://api.bootpay.co.kr/v2/reseller/invite', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': RESELLER_AUTH
},
body: JSON.stringify({
invite_type: 'app',
app_id: '65a1c0ab8f1b5b00367a0010',
email: 'cs@hanip.shop',
level: 'member' // CS 담당자는 조회 권한만
})
})javascript
응답
성공 시 응답 본문은 비어 있고, HTTP 200 으로 떨어진다. 초대 메일은 응답 직후 비동기로 발송된다.
동작 규칙
| 상황 |
결과 |
| 이메일 수신자가 부트페이 미가입자 |
가입 안내 메일이 발송된다. 가입 완료 시 권한 부여 |
| 이미 가입한 사용자 |
권한만 추가된다 |
| 같은 프로젝트에 이미 초대된 이메일 |
INVITE_ALREADY 가 떨어진다 |
| 짧은 시간에 같은 이메일을 반복 초대 |
INVITE_LIMIT_OVER 가 떨어진다 |
에러 코드
| 코드 |
메시지 |
대처 방법 |
API_ONLY_RESELLER |
리셀러만 이용이 가능한 API 다 |
리셀러 권한 계정 키로 호출한다 |
INVITE_TYPE_INVALID |
invite_type 이 유효하지 않다 |
provider 또는 app 으로 지정한다 |
APP_OWNER_MEMBER_NOT_FOUND |
초대 주체가 될 멤버를 찾지 못했다 |
리셀러 기본 프로젝트가 정상인지 확인한다 |
APP_NOT_FOUND |
본인 하위 프로젝트가 아니다 |
app_id 와 소속 셀러를 확인한다 |
INVITE_PROJECT_LEVEL_INVALID |
level 값이 유효하지 않다 |
admin / manager / member 중 선택 |
INVITE_ALREADY |
이미 초대된 사용자다 |
콘솔에서 멤버 목록을 먼저 확인한다 |
INVITE_LIMIT_OVER |
같은 이메일이 단기간에 너무 많이 초대되었다 |
일정 시간 후 재시도한다 |
다음 단계