리셀러 API 문서

로그인 없이 확인 가능한 공개 문서입니다.

개요

리셀러는 API 키로 인증하여 상품/포인트/주문 정보를 조회합니다.

샘플 페이지: https://btscon.co.kr/guide/reseller-purchase.html

PHP 샘플 파일 경로: frontphp/reseller/index.php

독립 호스팅용 포털 API: /api/reseller/portal/* (리셀러 ID + API 키 기반)

포털 API (독립 호스팅용)

원청 테이블 키를 숨기기 위해 아래 표준 키로 재매핑하여 제공합니다.

메서드 경로 설명
GET /api/reseller/portal/verify?reseller_id={id} 리셀러 ID + API 키 매칭 검증
GET /api/reseller/portal/summary?reseller_id={id} 정산 요약(보유금액/누적/월간)
GET /api/reseller/portal/products?reseller_id={id}&limit=80 리셀러 판매 상품 목록
POST /api/reseller/portal/event-issue-settle?reseller_id={id} 웨딩 발행 성공 건 정산 반영(리셀러 차감 + 회사 보유금 차감)

공통 헤더: x-api-key: {API_KEY}

공통 쿼리: reseller_id (숫자 ID, 필수)

정산 반영 규약 (웨딩 발행 성공 건)

외부 호스팅된 웨딩 페이지는 발행 성공 직후 아래 API를 1회 호출합니다. 백엔드에서 지갑/원장/회사보유금까지 통합 반영합니다.

항목
메서드POST
경로/api/reseller/portal/event-issue-settle?reseller_id={id}
헤더x-api-key: {API_KEY}, Content-Type: application/json
멱등키entry_id (같은 값 재전송 시 중복 차감 방지)

요청 예시

POST /api/reseller/portal/event-issue-settle?reseller_id=1
x-api-key: {API_KEY}
Content-Type: application/json

{
  "entry_id": 12345,
  "order_id": "FRONTSIM-ABC123",
  "reseller_debit": 10670,
  "company_debit": 10000,
  "memo": "event_issue:FRONTSIM-ABC123"
}

응답 예시

{
  "status": "ok",
  "already_applied": false,
  "mode": "live",
  "reseller_balance": 39871960,
  "company_balance": 99940000
}

에러 코드: 400 missing_reseller/invalid_entry_id, 401 missing_api_key/invalid_api_key_or_reseller, 404 reseller_not_found

필드 리네이밍 규약

리셀러 공개 키 의미
productCode상품 코드
productName상품명
basePrice기준 공급가
retailPrice소비자가
resellerPrice리셀러 적용 판매가
walletBalance리셀러 보유 금액
usedTotal누적 사용 금액
usedMonthly월간 사용 금액

구매 페이지 구현 최소 흐름

  1. GET /api/reseller/catalog로 상품 목록 조회
  2. 사용자가 goodsId를 선택하고 주문 정보 입력
  3. POST /api/reseller/orders로 주문 생성
  4. GET /api/reseller/orders/{orderId}로 상태/쿠폰 확인

내부 QA 기능(웹훅 시뮬레이션, 내부 전용 payload/raw 필드)은 리셀러 구매 화면에 노출하지 마세요.

구매 UI 권장 필드

화면 영역 필수 필드 비고
상품 목록 goodsId, goodsName, sellPrice, status 이미지는 image250Url 권장
주문 입력 goodsId, receiver, sender, title, msg orderId, reservedDate, reservedTime는 선택
주문 결과 orderId, status, tradeCode 발급 완료 후 couponNo/pinNo/barcode 노출

엔드포인트 요청/응답 예시

카탈로그 조회

GET /api/reseller/catalog?limit=20&offset=0
x-api-key: {API_KEY}
{
  "items": [
    {
      "goodsId": "G000000001",
      "goodsName": "아메리카노 Tall",
      "sellPrice": 4500,
      "status": "active"
    }
  ],
  "limit": 20,
  "offset": 0
}

주문 생성

POST /api/reseller/orders
Content-Type: application/json
x-api-key: {API_KEY}

{
  "goodsId": "G000000001",
  "receiver": "01012345678",
  "sender": "BTSCON",
  "title": "쿠폰 발송",
  "msg": "주문하신 쿠폰입니다.",
  "orderId": "my-order-1001"
}
{
  "orderId": "rec01-my-order-1001",
  "clientOrderId": "my-order-1001",
  "status": "queued"
}

주문 조회

GET /api/reseller/orders/rec01-my-order-1001
x-api-key: {API_KEY}
{
  "orderId": "rec01-my-order-1001",
  "goodsId": "G000000001",
  "status": "sent",
  "tradeCode": "02",
  "sellPrice": 4500,
  "trId": "rec01-my-order-1001",
  "couponNo": "1234-5678-9012"
}

보안 정책

오류 코드

HTTP error 설명
401 missing_api_key, invalid_api_key 인증 헤더 누락/불일치
403 ip_not_allowed 화이트리스트 ON 상태에서 미허용 IP
400 missing_fields, invalid_order_id 요청 필수값 누락/형식 오류
404 product_not_found, order_not_found 상품/주문 미존재

리셀러 제공 데이터 규약 (초안)

원청 수신 데이터를 아래 필드로 정규화해 리셀러에게 제공합니다.

원본 전체 payload는 내부 저장용이며 리셀러에는 공개하지 않습니다.

비공개 항목 (내부 저장용)

구분 필드 설명
상품 목록 raw_payload 원청 원본 전체 데이터
쿠폰 발급 결과 raw_payload 원청 원본 전체 데이터
웹훅 이벤트 raw_payload 원청 원본 전체 데이터

1) 상품 목록 (goods)

리셀러 제공 키 설명 필수 공개 비고
goodsId 상품 고유 코드 Y Y -
goodsName 상품명 Y Y -
brandCode 브랜드 코드 N Y -
brandName 브랜드명 N Y -
brandIconUrl 브랜드 아이콘 이미지 N Y -
brandThumbUrl 브랜드 썸네일 이미지 N Y -
categoryName 분류명 N Y 단일 문자열로 제공
categoryCode 분류 코드 N Y -
categoryDetailCode 분류 상세 코드 N Y -
description 상품 설명 N Y -
image250Url 250px 이미지 N Y -
image500Url 500px 이미지 N Y -
imageDescUrl 상세 이미지 N Y -
image250Path 250px 이미지 경로 N Y -
image500Path 500px 이미지 경로 N Y -
imageDescPath 상세 이미지 경로 N Y -
supplierCode 공급사 코드 N Y -
supplierName 공급사명 N Y -
useCompanyCode 사용처 코드 N Y -
useCompanyName 사용처명 N Y -
validDate 유효기간 날짜(원청 표기) N Y -
validDays 유효기간 일수 N Y -
validTypeCode 유효기간 타입 코드 N Y -
cancelable 취소 가능 여부 N Y Y/N
refundable 환불 가능 여부 N Y Y/N
extendable 연장 가능 여부 N Y Y/N
standardTermsApplied 표준약관 적용 여부 N Y Y/N
sellPrice 판매가 N Y 정수
consumerPrice 소비자가 N Y 정수
discountAmount 할인 금액 N Y 정수
sellEndDate 판매 종료일 N Y -
status 판매 상태 코드 N Y 기본값: active

2) 쿠폰 발급 결과 (coupon/send)

리셀러 제공 키 설명 필수 공개 비고
trId 거래 ID Y Y -
couponId 쿠폰 ID N Y -
couponNo 쿠폰 번호 N Y -
pinNo PIN 번호 N Y -
barcode 바코드 N Y -

3) 웹훅 이벤트 (거래 상태 통지)

리셀러 API 키에 등록된 hook_url로 JSON POST 전송됩니다.

리셀러 제공 키 설명 필수 공개 비고
trId 거래 ID Y Y -
mdCode 가맹점 코드 N Y -
tradeType 거래 유형 Y Y -
tradeCode 거래 상태 코드 Y Y 02 승인, 03 취소, 04 재발송, 07 실패
tradeDate 거래 일시 Y Y -