프로젝트(app) 에 등록되어 있는 PG·결제수단·발급키를 갱신한다. 신규 결제수단을 추가하거나, PG 사가 발급한 가맹점 키가 바뀌었을 때 본사 콘솔에서 이 API 만 호출하면 셀러 콘솔을 건드릴 필요가 없다.
핵심 요약
resources배열에 포함된 결제수단은 추가 또는 갱신된다. 배열에 빠진 결제수단은 그대로 유지된다 — 전체 덮어쓰기가 아니다.- 기존에 등록된 PG·결제수단 묶음에 같은
pg + method조합이 들어오면 발급키만 갱신된다. sandbox: true로 등록하면 테스트 모드 키로 분리된다. 운영 키로 교체할 때는sandbox: false또는 생략한다.- 응답으로 프로젝트의 최신 정보(application_keys, payment_apps) 가 모두 다시 내려온다.
API 정보
PATCH
https://api.bootpay.co.kr/v2/reseller/seller/app/resource/:app_idBasic Auth (리셀러 계정 키)메서드 표기
Rails 표준 resources 라우트라서 PATCH / PUT 둘 다 받는다. 본 문서는 PATCH 기준으로 표기한다.
요청 파라미터
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
app_id |
String | 필수 | 갱신할 프로젝트 식별자 (URL 경로) |
resources |
Array | 필수 | 등록·갱신할 PG·결제수단 배열. 각 원소 구조는 아래 참고 |
resources 배열 형식
| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
pg |
String | 필수 | PG 심볼 (예: nicepay, kcp, inicis, tosspayments) |
method |
String | 필수 | 결제수단 심볼 (예: 카드, 계좌이체, 가상계좌, 카드자동) |
sandbox |
Boolean | 선택 | true 면 테스트 모드 키로 등록 |
resource |
Object | 필수 | PG 가 발급한 가맹점 키 묶음 |
코드 예제
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 appId = '65a1c0ab8f1b5b00367a0010'
const res = await fetch(`https://api.bootpay.co.kr/v2/reseller/seller/app/resource/${appId}`, {
method: 'PATCH',
headers: {
'Content-Type': 'application/json',
'Authorization': RESELLER_AUTH
},
body: JSON.stringify({
resources: [
{
pg: 'nicepay',
method: '카드',
sandbox: false,
resource: {
mid: 'nicepay00m',
merchant_key: 'EYzu8jGGMfqaDEp76gSckuvnaHHu+...='
}
},
{
pg: 'nicepay',
method: '카드자동',
sandbox: false,
resource: {
mid: 'nicepay00m',
merchant_key: 'EYzu8jGGMfqaDEp76gSckuvnaHHu+...='
}
}
]
})
})
const data = await res.json()
console.log(data)javascriptimport base64, os, requests
auth = 'Basic ' + base64.b64encode(
f"{os.environ['BOOTPAY_RESELLER_CLIENT_KEY']}:{os.environ['BOOTPAY_RESELLER_SECRET_KEY']}".encode()
).decode()
app_id = '65a1c0ab8f1b5b00367a0010'
payload = {
'resources': [
{
'pg': 'nicepay',
'method': '카드',
'sandbox': False,
'resource': {
'mid': 'nicepay00m',
'merchant_key': 'EYzu8jGGMfqaDEp76gSckuvnaHHu+...='
}
},
{
'pg': 'nicepay',
'method': '카드자동',
'sandbox': False,
'resource': {
'mid': 'nicepay00m',
'merchant_key': 'EYzu8jGGMfqaDEp76gSckuvnaHHu+...='
}
}
]
}
res = requests.patch(
f'https://api.bootpay.co.kr/v2/reseller/seller/app/resource/{app_id}',
json=payload,
headers={'Authorization': auth}
)
print(res.json())pythonRESELLER_AUTH=$(printf '%s' "$BOOTPAY_RESELLER_CLIENT_KEY:$BOOTPAY_RESELLER_SECRET_KEY" | base64)
APP_ID='65a1c0ab8f1b5b00367a0010'
curl -X PATCH "https://api.bootpay.co.kr/v2/reseller/seller/app/resource/$APP_ID" \
-H "Authorization: Basic $RESELLER_AUTH" \
-H 'Content-Type: application/json' \
-d '{
"resources": [
{
"pg": "nicepay",
"method": "카드",
"sandbox": false,
"resource": {
"mid": "nicepay00m",
"merchant_key": "EYzu8jGGMfqaDEp76gSckuvnaHHu+...="
}
},
{
"pg": "nicepay",
"method": "카드자동",
"sandbox": false,
"resource": {
"mid": "nicepay00m",
"merchant_key": "EYzu8jGGMfqaDEp76gSckuvnaHHu+...="
}
}
]
}'bash응답
프로젝트의 최신 상태가 통째로 내려온다.
{
"app_id": "65a1c0ab8f1b5b00367a0010",
"app_name": "한입가게 — 정기구독",
"real": "디지털",
"unit": "KRW",
"application_keys": [
{
"kind": "javascript",
"key": "65a1c0ab8f1b5b00367a0011",
"private_key": "..."
}
],
"private_key": "65a1c0ab8f1b5b00367a0012",
"payment_apps": [
{
"pg": "nicepay",
"method": "카드",
"sandbox": false
},
{
"pg": "nicepay",
"method": "카드자동",
"sandbox": false
}
],
"status": 1
}json동작 규칙
| 상황 | 결과 |
|---|---|
신규 pg + method 가 들어옴 |
결제수단이 추가된다 |
기존 pg + method 에 새 resource 가 들어옴 |
발급키가 덮어쓰기 된다 |
기존에 있던 pg + method 가 배열에서 빠짐 |
그대로 유지된다 (자동 제거되지 않는다) |
resource 안에 PG 가 요구하는 키가 빠짐 |
RESOURCE_KEY_BLANK 로 거부된다 |
에러 코드
| 코드 | 메시지 | 대처 방법 |
|---|---|---|
API_ONLY_RESELLER |
리셀러만 이용이 가능한 API 다 | 리셀러 권한 계정 키로 호출한다 |
APP_NOT_FOUND |
프로젝트를 찾지 못했거나 본인 하위가 아니다 | app_id 와 소속 셀러를 확인한다 |
PG_RESOURCE_NOT_FOUND |
resources[].pg 심볼을 찾지 못했다 |
PG 코드 에서 PG 심볼을 확인한다 |
METHOD_RESOURCE_NOT_FOUND |
resources[].method 심볼을 찾지 못했다 |
PG 가 지원하는 결제수단 심볼인지 확인한다 |
RESOURCE_KEY_BLANK |
resources[].resource 에서 PG 가 요구하는 키가 빠졌다 |
PG 발급 통보서 기준으로 필수 키를 채운다 |