상품

상품 개요

상품을 등록하면 product_id 가 나오고, 주문은 그 ID로 만들어요.

v1 API 상세: 상품, 카테고리, 카탈로그

상품은 파는 것을 부트페이에 미리 등록해 두는 거예요. 등록하면 product_id 가 나오고, 체크아웃과 구독은 이 ID와 수량으로 주문을 만들어요.

관리자에서 쓰는 법

개발 없이 부트페이 관리자에서 하는 순서는 블로그 상품 등록 사용법 — 옵션과 판매 상태까지 설정하기에 정리했어요.

핵심 요약

  • 상품을 등록하면 product_id 가 나와요. 체크아웃·구독은 이 ID로 주문을 만들어요.
  • 첫 등록은 name·0보다 큰 display_price 에 tax_type: 1·save_by: 3 을 함께 보내요.
  • 주문에는 그 시점의 가격이 스냅샷으로 고정돼요. 나중에 가격을 바꿔도 지난 주문은 그대로예요.
  • 재고를 켜 두면 남은 수량보다 많이 주문할 때 품절로 막고, 주문이 들어오면 차감해요.
  • 링크페이는 상품 등록 없이 이름·금액만으로 결제받아요.
개념 배경

이 기능이 왜 필요한지·무엇을 먼저 정할지는 블로그에서 다뤄요.

등록하면 무엇이 달라지나

상품을 등록해 두면 주문을 만들 때 상품명·금액을 매번 넘기는 대신 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 로 조회해 확인해요.bash
상품 등록 응답

현재 POST /v1/products는 상품 저장 뒤 500 SERVER_ERROR가 올 수 있어요. ex_uid로 상품 목록을 조회해 저장 여부를 확인한 뒤 재시도해요.

하는 일 결제 API만 쓸 때 상품을 등록하면
결제 요청 상품명·금액을 매번 직접 넘겨요 product_id 와 수량을 넘겨요
금액 확인 서버가 직접 계산해 대조해요 등록된 가격으로 계산한 금액과 대조해요. 다르면 ORDER_PRICE_NOT_MATCH 예요
지난 주문 주문 시점 가격을 직접 저장해요 주문 시점 가격이 스냅샷으로 남아요
재고 직접 관리해요 use_stock 을 켜면 품절 차단과 차감을 해 줘요
구독 반복 청구를 직접 구현해요 상품에 구독 설정을 붙여 구독 주문을 만들어요

네 가지 개념

개념 한 줄 문서
상품 파는 것. 이름·가격·재고·구독 설정을 담아요 상품 등록
상태 지금 보이나, 지금 살 수 있나 상태 변경
카테고리 무엇인가 — 상품을 분류하는 트리 카테고리
진열 어디에 보여주나 — 「이번 주 신상」 같은 편성 묶음 진열

체크아웃만 붙인다면 상품과 상태로 시작해요. 카테고리와 진열은 쇼핑몰 화면에 상품 목록을 직접 그릴 때 더해요.

진열의 API 이름은 `catalogs` 예요

엔드포인트가 /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 로는 구독 상품을 만들 수 없어요

지금은 상품 등록 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 를 끄는 편이 지난 주문과 운영 화면을 함께 지키기 좋아요.

함께 보기