サンドボックス環境とフィクスチャ

対象: https://api.hiobuy.com(Workers ゲートウェイ)向け統合 — ベース URL は 本番と同一

認証: 決定論フィクスチャは hio_test_* プレフィックスの API キー(key_type: test)に のみ 適用されます。hio_live_* 本番キー はこのページのルールを 一切 使用せず、常に通常どおり upstream マーケットプレイスにアクセスします。

関連ドキュメント:Authentication · Response format · Errors · Rate limits · Products · Orders · Webhooks

Public API カバレッジ(概要)

領域サンドボックス
グローバルresponse_format: upstream 拒否(standard のみ)。currency ボディフィールドは prod と同様 拒否sandbox_trigger は test キーで 許可(プラットフォームフィクスチャ)。Channel OAuth は hio_test_*認可済みとして扱うクォータと rate limits は test キーでスキップ
/v1/products/*Search、detail、parse、upload-image、search-by-image、freight estimate、batch-check、1688 analytics エンドポイントは下記どおり モック。本サイト handoff セット外の OpenAPI-only 拡張は モックなし
/v1/orders/*Preview、create、detail、pay、cancel、logistics trace、list、purchase query を magic / dynamic id で モック
/v1/fulfillment/*ゲートウェイでは現時点 モックなし — サンドボックスでは利用不可として扱う。
Webhooksサンドボックス注文は webhooks を 送信しない

設計目標

目標意味
再現性同一リクエスト → 同一レスポンス(結果にランダム性なし)。
文書化各シナリオに、このページで grep できる安定 id または keyword。
契約整合JSON は本番 standard スキーマフィールドに一致;値は異なる。
デフォルト happy path未知 id は汎用成功モックにフォールバック。
明示的失敗sb_* id または sandbox_trigger でエラー / エッジ状態を強制。

命名:sb_{domain}_{scenario}

セグメントルール
プレフィックス常に sb_sb_prod_not_found
domain小文字名詞(prodsearchordplatauth など)
scenariosnake_casenot_foundpay_declined

文字:[a-z0-9_]、長さ ≤ ~48。フィクスチャ意図がない限り、実 upstream id に sb_付けない

2 層の失敗

トランスポート/API エラーHTTP 200 ビジネス状態 を区別:

  • API 失敗 → HTTP 4xx/5xx + error.code(例:NOT_FOUNDPAYMENT_DECLINED)。
  • HTTP 200 と状態 → 例:variants[].stock = 0status: wait_payment

商品フィクスチャ(概要)

POST /v1/products/detail

Product detail を参照。サンドボックスでは upstream 形式 非対応

product_id、解析済み urlmi_idtao_passwordsb_* id に解決されるとトリガー。

Fixture id結果HTTP
(非 sb_ の任意 id)標準モック商品200
sb_prod_not_foundNOT_FOUND404
sb_prod_offlinePRODUCT_UNAVAILABLE422
sb_prod_no_stockDetail ok、stock: 0200
curl https://api.hiobuy.com/v1/products/detail \
  -H "Authorization: Bearer hio_test_..." \
  -H "Content-Type: application/json" \
  -d '{"channel":"1688","product_id":"sb_prod_not_found","language":"en"}'

POST /v1/products/search

channelkeywordpagepage_sizelanguage が適用。1688 の filter / sort / 価格フィルターは 受理されるがモック行では無視

keyword(完全一致)結果
通常テキストヒット付きモックリスト
sb_search_emptyitems: []total: 0
sb_search_not_found空のエイリアス

Parse / upload-image / search-by-image / freight / analytics

Endpointサンドボックス注記
Parse URLsb_* を含む URL query/path は detail 動作を再現。
Upload image検証通過後、常に { "image_id": "img_sandbox_mock" }
Image search任意 keyword: sb_search_empty で空リスト;フローテストは upload-image と組み合わせ。
Advanced — freight estimateデフォルト国内送料モック 800 minor units、preview と整合。
Advanced — batch-checkmock mpProducts 付き upstream 形式 envelope;除外リストには mi_id/item_idsb_prod_not_found
Advanced — top keywords/list / daily-sales-trend文書化箇所で category_id / rank_idsb_search_empty で空リストまたは 404 detail。

注文・決済フィクスチャ(magic id)

POST /v1/orders/detail

order_id典型的 status備考
sb_ord_unpaidwait_payment
sb_ord_paidwait_shipment
sb_ord_shippedwait_receive
sb_ord_completedcompleted
sb_ord_cancelledcancelled
sb_ord_refundingwait_shipmentrefund_status in progress)
sb_ord_not_found404

POST /v1/orders/pay

order_id結果HTTP
sb_ord_unpaid決済成功 → 論理的 paid 状態200
sb_ord_pay_declinedPAYMENT_DECLINED402
sb_ord_pay_insufficientPAYMENT_INSUFFICIENT_FUNDS402
sb_ord_paidORDER_ALREADY_PAID409
sb_ord_cancelledORDER_CANCELLED409
sb_ord_upstream_timeoutCHANNEL_UPSTREAM_ERROR502

Preview / create

Preview は固定の illustrative 合計(サンプル行 ~4500 + 送料 ~800 minor units)。Createsbo_* プレフィックスの動的 order_id をサンドボックス storage に永続化 — offer_id: sb_prod_offline / sb_prod_no_stock の行は本番セマンティクスどおり 422

Cancel / logistics / list / purchase query

canceltracedetail list に従い:未払い sb_ord_* と動的未払い sbo_* はキャンセル可;paid/shipped 等フィクスチャは ORDER_NOT_CANCELLABLE。Logistics は sb_ord_shipped / completed モックで packages;unpaid/paid-await-shipment は packages: []。購入者リストは空モックで product_name: sb_ord_list_empty を尊重。Purchase query は upstream envelope を返す;not-found 用 pseudo id は適宜省略。

プラットフォームトリガー:sandbox_trigger

hio_test_*のみ 許可;本番キーはフィールドを静かに無視。

sandbox_triggerHTTPerror.code
sb_plat_quota_exceeded429QUOTA_EXCEEDED
sb_plat_rate_limited429RATE_LIMIT_EXCEEDED
sb_plat_upstream_error502CHANNEL_UPSTREAM_ERROR

現実的な body が検証を通るよう、無害 id と組み合わせ:

{
  "channel": "1688",
  "product_id": "123456",
  "language": "en",
  "sandbox_trigger": "sb_plat_quota_exceeded"
}

トリガーと組み合わせた特殊 auth フィクスチャ sb_auth_channel_required は、通常の「デフォルト認可済み」ルールにもかかわらず UI 回帰用に CHANNEL_AUTH_REQUIRED403)を返せる。

実装状況スナップショット

フェーズカバレッジ備考
Shipped上記 Product + procurement API本サイト公開 Public API 部分集合を反映。
Not yet完全 /v1/fulfillment/*、webhooks、未公開 OpenAPI-only ルート告知までサンドボックス CI では依存しない。

クイックコピーチートシート

sb_prod_not_found          → 404 product missing
sb_prod_offline            → 422 unavailable
sb_prod_no_stock           → 200 detail with zero stock

sb_search_empty            → empty search/items
sb_ord_list_empty          → empty buyer order list filter
img_sandbox_mock           → stable upload-image id

sb_ord_unpaid              → detail wait_payment • pay succeeds • cancel ok
sb_ord_pay_declined        → pay 402 PAYMENT_DECLINED
sb_ord_paid                → pay 409 ALREADY_PAID • trace maybe empty until shipped fixtures
sb_ord_shipped             → detail wait_receive • trace populated
sb_ord_cancelled           → cancelled state • pay conflicts

sb_plat_quota_exceeded     → sandbox_trigger → 429 QUOTA_EXCEEDED

内部でフィクスチャ追加時は、この番号体系を回帰テストに反映 — モック内の standard JSON 形状は 決して 変更しない。