마켓플레이스

PG 리소스 갱신

결제수단을 새로 붙이거나 키를 바꾼다.

프로젝트(app) 에 등록되어 있는 PG·결제수단·발급키를 갱신한다. 신규 결제수단을 추가하거나, PG 사가 발급한 가맹점 키가 바뀌었을 때 본사 콘솔에서 이 API 만 호출하면 셀러 콘솔을 건드릴 필요가 없다.

핵심 요약

  • resources 배열에 포함된 결제수단은 추가 또는 갱신된다. 배열에 빠진 결제수단은 그대로 유지된다 — 전체 덮어쓰기가 아니다.
  • 기존에 등록된 PG·결제수단 묶음에 같은 pg + method 조합이 들어오면 발급키만 갱신된다.
  • sandbox: true 로 등록하면 테스트 모드 키로 분리된다. 운영 키로 교체할 때는 sandbox: false 또는 생략한다.
  • 응답으로 프로젝트의 최신 정보(application_keys, payment_apps) 가 모두 다시 내려온다.

API 정보

PATCHhttps://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)javascript

응답

프로젝트의 최신 상태가 통째로 내려온다.

{
  "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 발급 통보서 기준으로 필수 키를 채운다

다음 단계