상품은 파는 것을 부트페이에 미리 등록해 두는 거예요. 등록하면
product_id가 나오고, 체크아웃과 구독은 이 ID와 수량으로 주문을 만들어요.
개발 없이 부트페이 관리자에서 하는 순서는 블로그 상품 등록 사용법 — 옵션과 판매 상태까지 설정하기에 정리했어요.
핵심 요약
- 상품을 등록하면
product_id가 나와요. 체크아웃·구독은 이 ID로 주문을 만들어요. - 첫 등록은
name·0보다 큰display_price에tax_type: 1·save_by: 3을 함께 보내요. - 주문에는 그 시점의 가격이 스냅샷으로 고정돼요. 나중에 가격을 바꿔도 지난 주문은 그대로예요.
- 재고를 켜 두면 남은 수량보다 많이 주문할 때 품절로 막고, 주문이 들어오면 차감해요.
- 링크페이는 상품 등록 없이 이름·금액만으로 결제받아요.
이 기능이 왜 필요한지·무엇을 먼저 정할지는 블로그에서 다뤄요.
- 결제만 붙이면 되나요, 주문까지 해야 하나요? — 상품 데이터를 사내 DB에 둘지 commerce에 맡길지 판단 기준
- 상품 관리 — 직접 짤까, 맡길까? — 가격·재고를 자체 DB에 둘지 커머스에 올릴지 판단하는 출발점
등록하면 무엇이 달라지나
상품을 등록해 두면 주문을 만들 때 상품명·금액을 매번 넘기는 대신 product_id 와 수량을 넘겨요.
curl -X POST "https://api.bootapi.com/v1/products" \
-H "Authorization: Basic {base64(client_key:secret_key)}" \
-H "Content-Type: application/json" \
-d '{ "name": "드립백 커피 10개입", "display_price": 29900, "tax_type": 1, "save_by": 3, "ex_uid": "shop-coffee-10", "status_visible": true, "status_display": true, "status_sale": true }'
# → 500 응답이어도 저장됐을 수 있어요. ex_uid 로 조회해 확인해요.bashawait BootpayCommerce.requestCheckout({
client_key: CLIENT_KEY,
price: 29900,
products: [{ product_id: 'your-product-id', quantity: 1 }],
// ...
})javascript현재 POST /v1/products는 상품 저장 뒤 500 SERVER_ERROR가 올 수 있어요. ex_uid로 상품 목록을 조회해 저장 여부를 확인한 뒤 재시도해요.
| 하는 일 | 결제 API만 쓸 때 | 상품을 등록하면 |
|---|---|---|
| 결제 요청 | 상품명·금액을 매번 직접 넘겨요 | product_id 와 수량을 넘겨요 |
| 금액 확인 | 서버가 직접 계산해 대조해요 | 등록된 가격으로 계산한 금액과 대조해요. 다르면 ORDER_PRICE_NOT_MATCH 예요 |
| 지난 주문 | 주문 시점 가격을 직접 저장해요 | 주문 시점 가격이 스냅샷으로 남아요 |
| 재고 | 직접 관리해요 | use_stock 을 켜면 품절 차단과 차감을 해 줘요 |
| 구독 | 반복 청구를 직접 구현해요 | 상품에 구독 설정을 붙여 구독 주문을 만들어요 |
네 가지 개념
| 개념 | 한 줄 | 문서 |
|---|---|---|
| 상품 | 파는 것. 이름·가격·재고·구독 설정을 담아요 | 상품 등록 |
| 상태 | 지금 보이나, 지금 살 수 있나 | 상태 변경 |
| 카테고리 | 무엇인가 — 상품을 분류하는 트리 | 카테고리 |
| 진열 | 어디에 보여주나 — 「이번 주 신상」 같은 편성 묶음 | 진열 |
체크아웃만 붙인다면 상품과 상태로 시작해요. 카테고리와 진열은 쇼핑몰 화면에 상품 목록을 직접 그릴 때 더해요.
엔드포인트가 /v1/catalogs 라서 헷갈리기 쉬워요. 상품 등록은 /v1/products, 진열 묶음은 /v1/catalogs 예요.
경로마다 상품 쓰임이 달라요
| 경로 | 상품 등록 | 근거 |
|---|---|---|
| 체크아웃 | 필수 | 상품 없이 주문을 만들면 ORDER_PRODUCT_BLANK 로 거절돼요 |
| 구독 | 필수 | 게다가 한 주문에 상품 1종만 담을 수 있어요 |
| 링크페이 | 선택 | 이름·금액·고객만 있으면 결제 링크가 나와요 |
상담 결제·후불 청구처럼 주문서 화면 없이 링크로 받는 흐름은 링크페이부터 붙여요.
상품에 담기는 값
처음엔 name 과 display_price 로 시작하고, 필요할 때 아래 값을 더해요.
| 묶음 | 필드 | 쓰임 |
|---|---|---|
| 기본 | name·display_price·desc·content·images |
이름·판매가·요약·상세 설명·이미지 |
| 연결 | category_id·ex_uid |
카테고리, 내 상품 DB의 ID |
| 재고 | use_stock·stock |
켜면 주문 때 품절을 막고, 주문이 들어오면 차감해요 |
| 할인 | use_discount·discount_price·discount_price_type |
할인 금액 또는 할인율 |
| 과세 | tax_free_price |
비과세 금액 |
| 구독 | use_subscription·subscription_setting_id |
구독 상품. save_by: 3 을 함께 보내요 |
| 노출·판매 | status_display·status_sale |
쇼핑몰 노출 여부, 판매 가능 여부 |
지금은 상품 등록 API 가 구독 회차별 가격을 받지 못해 use_subscription: true 요청이 PRODUCT_PRICE_INVALID 로 거절돼요. 구독 상품은 관리자 화면에서 만들어요. 자세한 내용은 상품 등록에 있어요.
ex_uid 에 내 상품 DB의 ID를 넣어 두면 상품 목록에서 그 값으로 찾아올 수 있어요 (쇼핑몰에 노출 중인 상품만). 전체 필드는 상품 등록에서 봐요.
상태 — 보이나, 살 수 있나
품절·숨김·판매중지는 서로 다른 필드로 나뉘어요. 운영 화면과 코드가 같은 말을 쓰도록 이 대응을 먼저 맞춰요.
| 운영 용어 | 필드 | 언제 |
|---|---|---|
| 품절 | stock 이 0 (use_stock: true) |
재고가 떨어졌을 때. 재입고하면 수량만 올려요 |
| 숨김 | status_display: false |
화면에서 내리되 판매 의도는 남길 때 |
| 판매중지 | status_sale: false |
잠시 팔지 않을 때 |
| 판매금지 | status_frozen: true |
운영 정책으로 막을 때. 한 번 켜면 API 로 되돌릴 수 없어요 |
상태만 바꿀 때는 상태 변경을 써요. 상품 수정은 스냅샷을 새로 만들어 무겁고, 전시·판매 기간이나 타임세일도 상태 변경에서 켜요.
이미 팔린 상품은 삭제보다 status_sale 이나 status_display 를 끄는 편이 지난 주문과 운영 화면을 함께 지키기 좋아요.






