빠른 시작

Reseller API

1. API 키 생성

고객 포털의 "Reseller API"에 로그인하셔서 키를 생성해 주세요. 실제로 필요한 권한 범위만 활성화하시고(기본값은 읽기 전용), 시크릿은 단 한 번만 표시되니 시크릿 관리 도구에 안전하게 보관해 주세요.

2. 자격증명 저장

키와 시크릿을 환경 변수로 저장해 주세요. 코드 안이나 저장소에는 절대로 두지 마세요.

# .env 또는 셸 프로필
export KH_KEY="kh_live_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
export KH_SECRET="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

3. 첫 요청 전송

사용 가능한 제품 목록을 조회해 주세요. 서명은 메서드, 경로, 타임스탬프, 논스, 본문 해시를 기반으로 생성돼요.

TS=$(date +%s)
NONCE=$(openssl rand -hex 16)
BODY_SHA256=$(printf '' | openssl dgst -sha256 -hex | awk '{print $2}')
SIG_INPUT=$(printf 'GET\n/v1/products\n%s\n%s\n%s' "$TS" "$NONCE" "$BODY_SHA256")
SIG=$(printf '%s' "$SIG_INPUT" | openssl dgst -sha256 -hmac "$KH_SECRET" -hex | awk '{print $2}')

curl https://www.kernelhost.com/cp/kh_reseller_api/v1/products \
  -H "KH-Key: $KH_KEY" \
  -H "KH-Timestamp: $TS" \
  -H "KH-Nonce: $NONCE" \
  -H "KH-Signature: $SIG"

4. 주문 처리

중요: POST /v1/orders에는 Idempotency-Key가 필요해요. 동일한 키로 네트워크 재시도가 발생해도 동일한 응답이 반환되며, 중복 주문은 생성되지 않아요.

BODY='{"product_id":42,"billing_cycle":"monthly"}'
BODY_SHA256=$(printf '%s' "$BODY" | openssl dgst -sha256 -hex | awk '{print $2}')
TS=$(date +%s)
NONCE=$(openssl rand -hex 16)
IDEM=$(openssl rand -hex 16)
SIG_INPUT=$(printf 'POST\n/v1/orders\n%s\n%s\n%s' "$TS" "$NONCE" "$BODY_SHA256")
SIG=$(printf '%s' "$SIG_INPUT" | openssl dgst -sha256 -hmac "$KH_SECRET" -hex | awk '{print $2}')

curl -X POST https://www.kernelhost.com/cp/kh_reseller_api/v1/orders \
  -H "KH-Key: $KH_KEY" \
  -H "KH-Timestamp: $TS" \
  -H "KH-Nonce: $NONCE" \
  -H "KH-Signature: $SIG" \
  -H "Idempotency-Key: $IDEM" \
  -H "Content-Type: application/json" \
  --data "$BODY"

5. 웹훅 설정 (선택)

키마다 HTTPS URL을 등록하시면 이벤트를 비동기로 수신하실 수 있어요(order.paid, service.provisioned, invoice.created). 페이로드 서명은 Stripe 방식을 따라요.