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. Webhook を設定する(任意)
キーごとに HTTPS URL を登録すると、イベント(order.paid、service.provisioned、invoice.created)を非同期で受信できます。ペイロード署名は Stripe の方式に準拠しています。

