サンドボックス環境とフィクスチャ
対象:
https://api.hiobuy.com(Workers ゲートウェイ)向け統合 — ベース URL は 本番と同一。
プラン: 無料プランにはセルフサービスのドキュメントと Sandbox アクセスが含まれます。専任のインテグレーションおよびフルフィルメントサポートは有料プランで利用できます。
認証: 決定論フィクスチャは hio_test_* プレフィックスの API キー(key_type: test)に のみ 適用されます。hio_live_* 本番キー はこのページのルールを 一切 使用せず、常に通常どおり upstream マーケットプレイス / 倉庫にアクセスします。
関連ドキュメント:Authentication · Response format · Errors · Rate limits · Products · Orders · Fulfillment · Webhooks
重要:Warehouse Fulfillment のテスト
Sandbox API(hio_test_*)は、モックおよびフィクスチャベースの結合テスト向けです。
HIOBuy がアプリに WH-DEV Warehouse Developer Code を付与している場合、割り当てられた倉庫設定のテストに Sandbox API キーを使わないでください。
次を使用してください:
Production API Key(hio_live_*)+ WH-DEV
WH-DEV は引き続きテスト倉庫設定です。WH-DEV で Production API キーを使っても、本番の倉庫フルフィルメントを行っているわけではありません。
| 構成 | 目的 |
|---|---|
hio_test_* | モック / フィクスチャ API テスト |
hio_live_* + WH-DEV | テスト倉庫データでの割当倉庫統合テスト |
hio_live_* + 本番倉庫認可 | 本番倉庫フルフィルメント |
Sandbox Fulfillment エンドポイントは定義済みまたはシミュレートされたデータを返します。例えば、サンドボックスの倉庫ロケーション、残高、荷物、配送ルート、ステータスは、アプリに割り当てられた WH-DEV 設定と異なる場合があります。
WH-DEV 統合を検証する場合は、常に Production API キーを使用してください。
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/* | Balance、quotes、shipments、inbounds、packages、unclaimed、returns、locations、VAS、service-requests、finance を magic / dynamic id で モック(下記参照)。 |
/v1/support/tickets | List/detail/reply を tkt_* フィクスチャで モック。 |
| Webhooks | サンドボックスリソースは Webhook を 自動送信しません。ポータルの テスト送信(livemode: false)で受信と署名を検証してください。 |
設計目標
| 目標 | 意味 |
|---|---|
| 再現性 | 同一リクエスト → 同一レスポンス(結果にランダム性なし)。 |
| 文書化 | 各シナリオに、このページで grep できる安定 id または keyword。 |
| 契約整合 | JSON は本番 standard スキーマフィールドに一致;値は異なる。 |
| デフォルト happy path | 未知 id は汎用成功モックにフォールバック。 |
| 明示的失敗 | sb_* id または sandbox_trigger でエラー / エッジ状態を強制。 |
命名:sb_{domain}_{scenario}
| セグメント | ルール | 例 |
|---|---|---|
| プレフィックス | 常に sb_ | sb_prod_not_found |
domain | 小文字名詞(prod、search、ord、shp、pkg、plat、…) | — |
scenario | snake_case | not_found、pay_declined |
文字:[a-z0-9_]、長さ ≤ ~48。フィクスチャ意図がない限り、実 upstream id に sb_ を 付けない。一部の fulfillment リソースは非 sb_ の安定 id(ret_*、ucp_*、svc_*、tkt_*、inv_*)も使用します。
2 層の失敗
トランスポート/API エラー と HTTP 200 ビジネス状態 を区別:
- API 失敗 → HTTP 4xx/5xx +
error.code(例:NOT_FOUND、PAYMENT_DECLINED)。 - HTTP 200 と状態 → 例:
variants[].stock = 0、status: wait_payment。
商品フィクスチャ(概要)
POST /v1/products/detail
Product detail を参照。サンドボックスでは upstream 形式 非対応。
id, product_id、解析済み url、mi_id、tao_password が sb_* id に解決されるとトリガー。
| Fixture id | 結果 | HTTP |
|---|---|---|
(非 sb_ の任意 id) | 標準モック商品 | 200 |
sb_prod_not_found | NOT_FOUND | 404 |
sb_prod_offline | PRODUCT_UNAVAILABLE | 422 |
sb_prod_no_stock | Detail ok、stock: 0 | 200 |
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":"ja"}'POST /v1/products/search
channel、keyword、page、page_size、language が適用。1688 の filter / sort / 価格フィルターは 受理されるがモック行では無視。
keyword(完全一致) | 結果 |
|---|---|
| 通常テキスト | ヒット付きモックリスト |
sb_search_empty | items: []、total: 0 |
sb_search_not_found | 空のエイリアス |
Parse / upload-image / search-by-image / freight / analytics
| Endpoint | サンドボックス注記 |
|---|---|
| Parse URL | sb_* を含む 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-check | mock mpProducts 付き upstream 形式 envelope;除外リストには mi_id/item_id に sb_prod_not_found。 |
| Advanced — top keywords/list / daily-sales-trend | 文書化箇所で category_id / rank_id に sb_search_empty で空リストまたは 404 detail。 |
注文・決済フィクスチャ(magic id)
POST /v1/orders/detail
order_id | 典型的 status | 備考 |
|---|---|---|
sb_ord_unpaid | wait_payment | — |
sb_ord_paid | wait_shipment | — |
sb_ord_shipped | wait_receive | — |
sb_ord_completed | completed | — |
sb_ord_cancelled | cancelled | — |
sb_ord_refunding | wait_shipment(refund_status in progress) | — |
sb_ord_not_found | — | 404 |
POST /v1/orders/pay
order_id | 結果 | HTTP |
|---|---|---|
sb_ord_unpaid | 決済成功 → 論理的 paid 状態 | 200 |
sb_ord_pay_declined | PAYMENT_DECLINED | 402 |
sb_ord_pay_insufficient | PAYMENT_INSUFFICIENT_FUNDS | 402 |
sb_ord_paid | ORDER_ALREADY_PAID | 409 |
sb_ord_cancelled | ORDER_CANCELLED | 409 |
sb_ord_upstream_timeout | CHANNEL_UPSTREAM_ERROR | 502 |
Preview / create
Preview は固定の illustrative 合計(サンプル行 ~4500 + 送料 ~800 minor units)。Create は sbo_* プレフィックスの動的 order_id をサンドボックス storage に永続化 — offer_id: sb_prod_offline / sb_prod_no_stock の行は本番セマンティクスどおり 422。
Cancel / logistics / list / purchase query
cancel、trace、detail 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 は適宜省略。
Fulfillment フィクスチャ
注記: 以下のフィクスチャは Sandbox API テスト専用です。アプリの WH-DEV 倉庫設定を表しません。WH-DEV テストには Production API キー(
hio_live_*)を使用してください。
下記の全エンドポイントには hio_test_* キーが必要です。create からの動的 id(pkg_*、sbs_*、sbi_*、…)はキー単位でサンドボックス storage に永続化されます。
Balance · quotes · locations · VAS catalog
| Endpoint | サンドボックス注記 |
|---|---|
GET /v1/fulfillment/balance | モック利用可能残高 500000 CNY minor units。 |
POST /v1/fulfillment/shipping/quotes | destination.country_code と重量または寸法が必要;レガシー …/shipments/freight/estimate も動作。 |
GET /v1/fulfillment/locations | loc_wh_001(威海)、loc_sz_001(深圳、paused)、loc_yw_001(義烏)。 |
GET /v1/fulfillment/value-added-services | 安定 CODE 価格表;LEGACY_PHOTO_PRINT は INACTIVE → 要求時は利用不可。 |
Shipments
Live warehouse Public id is the numeric PK as a string (e.g. "115"); order_sn is the warehouse order number. Sandbox create returns sbs_*; fixtures below use sb_shp_*.
| Fixture / id | Behavior |
|---|---|
sb_shp_unpaid | List + detail PENDING; intercept → SHIPMENT_NOT_INTERCEPTABLE |
sb_shp_shipped | Shipped detail: split boxes, first/last-mile legs, packing files; plus international tracking events. Intercept → REQUESTED |
sb_shp_not_found | Detail 404 |
sb_shp_pay_insufficient | POST …/shipments/sb_shp_pay_insufficient/pay → INSUFFICIENT_BALANCE |
sb_shp_not_cancellable | Cancel → SHIPMENT_NOT_CANCELLABLE; intercept is allowed (WAIT_SHIP) |
sb_shp_signed | Signed; intercept → SHIPMENT_NOT_INTERCEPTABLE |
sb_shp_intercepted | Detail SHIPPED + interception.status: INTERCEPTED; intercept again → SHIPMENT_INTERCEPTION_ALREADY_REQUESTED |
Dynamic sbs_* | Create / pay / list / detail / cancel / intercept against sandbox storage |
sb_parcel_not_found | Create → 422 PARCEL_NOT_FOUND |
List path: GET /v1/fulfillment/shipments. Tracking path: GET /v1/fulfillment/shipments/{id}/tracking (language query).
Inbounds(create / cancel)
Create は動的 package_id(pkg_*)を返します — 別途の inbound_id は ありません。
| Trigger value | Field | HTTP | error.code |
|---|---|---|---|
sb_inbound_shipped | tracking_number | 409 | INBOUND_TRACKING_ALREADY_SHIPPED |
sb_inbound_exists | tracking_number | 409 | INBOUND_TRACKING_ALREADY_EXISTS |
sb_inbound_bad_tracking | tracking_number | 422 | INVALID_TRACKING_NUMBER |
sb_inbound_external_exists | external_order_id | 409 | EXTERNAL_ORDER_ID_ALREADY_EXISTS |
sb_vas_missing | services[].service_code | 422 | VALUE_ADDED_SERVICE_NOT_FOUND |
sb_vas_unavailable | services[].service_code | 422 | VALUE_ADDED_SERVICE_UNAVAILABLE |
sb_vas_outbound | services[].service_code | 422 | VALUE_ADDED_SERVICE_INVALID_STAGE |
| Cancel id | HTTP | error.code |
|---|---|---|
Dynamic sbi_*(create 後) | 200 | キャンセル済み;関連 package は破棄 |
同一 sbi_* の再実行 | 409 | INBOUND_NOT_EDITABLE |
sb_inb_not_found | 404 | INBOUND_NOT_FOUND |
sb_inb_received | 409 | INBOUND_ALREADY_RECEIVED |
sb_inb_shipped / sb_inb_consolidated / sb_inb_cancelled | 409 | INBOUND_NOT_EDITABLE |
Packages · tracking · list
package_id | Detail / tracking |
|---|---|
Dynamic pkg_* | PENDING;tracking は INBOUND_CREATED から開始 |
sb_pkg_pending | PENDING |
sb_pkg_received | RECEIVED + PHOTO timeline |
sb_pkg_exception | RECEIVED + condition.EXCEPTION |
sb_pkg_shipped | SHIPPED 完全 outbound timeline |
sb_pkg_not_found | 404 PACKAGE_NOT_FOUND |
Unclaimed packages
| Id / trigger | 動作 |
|---|---|
ucp_01K2ABCDEF1234567890 | クレーム可能;実追跡番号 SF123456789012(リストはマスク) |
ucp_01K2ABCDEF9876543210 | クレーム可能;YT738800001148 |
sb_ucp_not_found | 404 UNCLAIMED_PACKAGE_NOT_FOUND |
sb_ucp_already_claimed | 409 PACKAGE_ALREADY_CLAIMED |
sb_ucp_not_claimable | 409 PACKAGE_NOT_CLAIMABLE |
| 同一 ucp で誤追跡番号 ×5 | 429 CLAIM_ATTEMPTS_EXCEEDED |
Returns
| Id | 動作 |
|---|---|
ret_pending_001 | PENDING;fee=18;confirm 成功 |
ret_pending_002 | PENDING;fee=20;18 で confirm → RETURN_FEE_CHANGED |
ret_returned_001 | RETURNED + tracking |
ret_cancelled_001 | CANCELLED |
sb_ret_not_found | 404 RETURN_NOT_FOUND |
sb_ret_fee_not_ready | Confirm → RETURN_FEE_NOT_READY |
sb_ret_insufficient | Confirm → INSUFFICIENT_BALANCE |
sb_pkg_shipped 上で Create | 409 PACKAGE_NOT_RETURNABLE |
Service requests
| Id | 動作 |
|---|---|
svc_photo_completed | PHOTO COMPLETED + images |
svc_inspection_failed | BASIC_INSPECTION FAILED |
svc_video_processing | VIDEO PROCESSING |
svc_reinforce_pending | PACKAGE_REINFORCEMENT PENDING |
svc_wooden_awaiting | WOODEN_FRAME 確認待ち |
sb_svc_not_found | 404 |
sb_svc_fee_not_ready / sb_svc_insufficient | Confirm エッジケース |
Finance(transactions / invoices)
| Fixture | 注記 |
|---|---|
txn_01K2ABC001…006 | TOP_UP / VAS / RETURN / SHIPPING / REFUND / STORAGE |
inv_01K2ABC001 | ISSUED(ダウンロード可) |
inv_01K2ABC002 | PENDING |
inv_01K2ABC003 | REJECTED |
Fulfillment finance を参照。
サポートチケットフィクスチャ
| Fixture id | シナリオ |
|---|---|
tkt_01K2ABCDEF1234567890 | PACKAGE · NORMAL · WAITING_FOR_HIOBUY |
tkt_01K2ABCDEF9876543210 | RETURN · URGENT · WAITING_FOR_CUSTOMER |
tkt_01K2ABCDEFAPIRESOLVED | API · NORMAL · RESOLVED |
tkt_01K2ABCDEFSHIPCLOSED | SHIPMENT · NORMAL · CLOSED(返信なし) |
tkt_not_found | 404 TICKET_NOT_FOUND |
Support tickets を参照。
プラットフォームトリガー:sandbox_trigger
hio_test_* に のみ 許可;本番キーはフィールドを静かに無視。
sandbox_trigger | HTTP | error.code |
|---|---|---|
sb_plat_quota_exceeded | 429 | QUOTA_EXCEEDED |
sb_plat_rate_limited | 429 | RATE_LIMIT_EXCEEDED |
sb_plat_upstream_error | 502 | CHANNEL_UPSTREAM_ERROR |
現実的な body が検証を通るよう、無害 id と組み合わせ:
{
"channel": "1688",
"product_id": "123456",
"language": "ja",
"sandbox_trigger": "sb_plat_quota_exceeded"
}トリガーと組み合わせた特殊 auth フィクスチャ sb_auth_channel_required は、通常の「デフォルト認可済み」ルールにもかかわらず UI 回帰用に CHANNEL_AUTH_REQUIRED(403)を返せる。
実装状況スナップショット
| フェーズ | カバレッジ | 備考 |
|---|---|---|
| Shipped | Products、調達注文、fulfillment(balance/quotes/shipments/inbounds/packages/unclaimed/returns/locations/VAS/service-requests/finance)、サポートチケット | 本サイト公開 Public API 部分集合を反映。 |
| Not yet | 自動送信サンドボックス Webhook;未公開 OpenAPI-only カタログ拡張 | Webhook 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_shp_unpaid / sb_shp_shipped / sb_shp_signed / sb_shp_intercepted → shipment list / detail / intercept
sb_pkg_received / sb_pkg_shipped → package detail / fulfillment timeline
sb_inbound_exists → inbound create 409 tracking exists
ret_pending_001 → return confirm happy path
ucp_01K2ABCDEF1234567890 → unclaimed claimable
svc_photo_completed → VAS request completed
tkt_01K2ABCDEF1234567890 → support ticket open
sb_plat_quota_exceeded → sandbox_trigger → 429 QUOTA_EXCEEDED内部でフィクスチャ追加時は、この番号体系を回帰テストに反映 — モック内の standard JSON 形状は 決して 変更しない。
Get Support
Need integration help? Contact Developer Support at support@hiobuy.com · Response within 1–2 business days