이 문서는 Bootpay Commerce 연동을 시작하기 위한 기본 환경을 준비하는 방법을 설명해요. 아래 순서대로 진행하면 프로젝트 생성, 커머스 키 발급, SDK 설치, 서버 인증 확인까지 끝낼 수 있어요.
커머스 SDK는 주문·상품·고객 흐름을 다루지만 실제 결제는 Bootpay 결제 설정을 함께 사용해요. PG사 활성화, Sandbox, 결제수단 설정은 결제 매뉴얼의 환경 설정도 같이 확인해요.
설정 순서
회원 가입
Bootpay 관리자에서 회원가입 후 사업자 정보를 등록해요.
프로젝트 생성
관리자 대시보드에서 프로젝트를 생성해요. 같은 프로젝트 안에서 결제 설정과 커머스 API 키를 관리해요.
커머스 연동키 생성
관리자 → 개발자 설정 > API 연동키에서 커머스용 client_key와 secret_key를 발급해요.
결제창 호출에 쓰는 Client Key와 서버에서 커머스 용 연동키를 헷갈리지 않는 것이 중요해요. 커머스 키는 서버 비밀값으로 저장하고 프론트엔드에 노출하지 않아요.
PG사와 결제수단 설정
관리자 → 결제 설정에서 사용할 PG사와 결제수단을 활성화해요. 개발 단계에서는 Sandbox 모드로 먼저 테스트해요.
웹훅 URL 등록
주문·구독 상태를 서버에서 보정하려면 웹훅 URL을 등록해요. 자세한 설정은 웹훅 설정에서 확인해요.
SDK 설치
커머스 연동은 보통 클라이언트 SDK와 서버 SDK를 같이 사용해요.
- 클라이언트 SDK: 체크아웃·결제창 호출, 사용자 이벤트 수신
- 서버 SDK: 커머스 API 호출, 주문 조회, 고객·상품 관리, 구독 운영, 검증·웹훅 후속 처리
클라이언트 SDK
npm install @bootpay/client-jsbash<script src="https://js.bootpay.co.kr/bootpay-5.1.4.min.js"></script>htmlimplementation 'kr.co.bootpay:android:4.9.0'pod 'Bootpay', '~> 4.4.4'rubyflutter pub add bootpay_flutterbashnpm install react-native-bootpay-apibash서버 SDK
npm install @bootpay/backend-jsbashpip install bootpay-backendbashcomposer require bootpay/server-phpbashimplementation 'kr.co.bootpay:backend:3.0.2'gem install bootpaybashgo get github.com/bootpay/backend-go/v2bashdotnet add package Bootpaybash서버 인증 확인
SDK 설치 후에는 커머스 토큰 발급으로 서버 인증을 먼저 확인해요. 토큰 발급은 백엔드에서만 실행해야 해요.
https://api.bootapi.com/v1/tokenCommerce Client Key + Secret Key| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
client_key |
String | 필수 | 커머스 API용 Client Key |
secret_key |
String | 필수 | 커머스 API용 Secret Key |
const response = await fetch('https://api.bootapi.com/v1/token', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
client_key: process.env.BOOTPAY_COMMERCE_CLIENT_KEY,
secret_key: process.env.BOOTPAY_COMMERCE_SECRET_KEY,
}),
})
const token = await response.json()
console.log(token.access_token)javascriptimport os
import requests
response = requests.post('https://api.bootapi.com/v1/token', json={
'client_key': os.environ['BOOTPAY_COMMERCE_CLIENT_KEY'],
'secret_key': os.environ['BOOTPAY_COMMERCE_SECRET_KEY'],
})
print(response.json()['access_token'])python$response = file_get_contents('https://api.bootapi.com/v1/token', false, stream_context_create([
'http' => [
'method' => 'POST',
'header' => 'Content-Type: application/json',
'content' => json_encode([
'client_key' => getenv('BOOTPAY_COMMERCE_CLIENT_KEY'),
'secret_key' => getenv('BOOTPAY_COMMERCE_SECRET_KEY'),
]),
],
]));
$token = json_decode($response, true);
echo $token['access_token'];phpHttpClient client = HttpClient.newHttpClient();
String body = "{\"client_key\":\"" + System.getenv("BOOTPAY_COMMERCE_CLIENT_KEY") + "\","
+ "\"secret_key\":\"" + System.getenv("BOOTPAY_COMMERCE_SECRET_KEY") + "\"}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.bootapi.com/v1/token"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());javarequire 'net/http'
require 'json'
uri = URI('https://api.bootapi.com/v1/token')
response = Net::HTTP.post(uri, {
client_key: ENV.fetch('BOOTPAY_COMMERCE_CLIENT_KEY'),
secret_key: ENV.fetch('BOOTPAY_COMMERCE_SECRET_KEY'),
}.to_json, 'Content-Type' => 'application/json')
puts JSON.parse(response.body)['access_token']rubypayload, _ := json.Marshal(map[string]string{
"client_key": os.Getenv("BOOTPAY_COMMERCE_CLIENT_KEY"),
"secret_key": os.Getenv("BOOTPAY_COMMERCE_SECRET_KEY"),
})
resp, err := http.Post("https://api.bootapi.com/v1/token", "application/json", bytes.NewBuffer(payload))
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))gousing var client = new HttpClient();
var payload = JsonSerializer.Serialize(new {
client_key = Environment.GetEnvironmentVariable("BOOTPAY_COMMERCE_CLIENT_KEY"),
secret_key = Environment.GetEnvironmentVariable("BOOTPAY_COMMERCE_SECRET_KEY"),
});
var response = await client.PostAsync(
"https://api.bootapi.com/v1/token",
new StringContent(payload, Encoding.UTF8, "application/json")
);
Console.WriteLine(await response.Content.ReadAsStringAsync());csharp인증 흐름과 토큰 갱신 전략은 서버 인증에서 더 자세히 다뤄요.
다음 단계
| 상황 | 다음 문서 |
|---|---|
| 첫 쇼핑몰 흐름을 붙여요 | 체크아웃 빠른 매뉴얼 |
| 상품부터 등록해요 | 카탈로그 이해하기 |
| 주문 조회·취소를 붙여요 | 주문 이해하기 |
| 구독 상품을 운영해요 | 구독 개요 |
| 결제 설정이 막힌다 | 결제 매뉴얼 환경 설정 |
