API リファレンス
外部プログラムはこの API を使って商品の取得、在庫確認、見積、発注、注文照会を行います。ストア連携機能自体もこの API の上に作られています。
コードを書かずに他店の商品を再販したいだけなら、管理画面のストア連携を使ってください。このページは自前で連携プログラムを書く人向けです。
始める前に:
- 相手の店舗で登録し、会員センター → マイページから加盟店 ID(
app_id)と加盟店キー(app_key)を取得する - 相手の商品で API 連携が有効になっている必要があります。無効だと取得できません
- 提示される価格は、その店舗でのあなたの会員ランクで決まります
基本
- メソッド:
POST - 形式:
application/x-www-form-urlencoded推奨 - 認証:共通パラメータ
app_id+sign - 成功:
code = 200 - 失敗:通常
code = 0。理由はmsg
署名
/**
* リクエストの署名を生成する
* @param array $data
* @param string $appKey
* @return string
*/
public static function generateSignature(array $data, $appKey): string
{
unset($data['sign']);
ksort($data);
foreach ($data as $key => $val) {
if ($val === '') {
unset($data[$key]);
}
}
return md5(urldecode(http_build_query($data) . "&key=" . (string)$appKey));
}共通リクエストパラメータ
| 名前 | 必須 | 型 | 説明 |
|---|---|---|---|
| app_id | はい | string/int | 加盟店 ID。会員センターのマイページで取得 |
| sign | はい | string | このリクエストの全 POST パラメータを上記アルゴリズムで署名した値 |
app_keyは加盟店キーです。署名をローカルで生成するためだけに使い、相手のサーバーへ送ってはいけません。
skuのような配列パラメータを含む場合、それらも署名の計算に含める必要があり、署名対象と実際の送信内容は完全に一致していなければなりません。
共通レスポンス形式
| フィールド | 型 | 説明 |
|---|---|---|
| code | int | ステータスコード。成功時は 200 |
| msg | string | メッセージ。任意項目で、コントローラが明示的に設定したときだけ返ります |
| data | mixed | 本体データ |
成功時:
{
"code": 200,
"data": {}
}失敗時:
{
"code": 0,
"msg": "キーが正しくありません"
}業務フィールド
race— 商品種別。商品設定の[category]のキーに対応します(例:月額、年額)sku— SKU の組み合わせ。配列で送信します(例:sku[本体色]=ブラック&sku[ストレージ]=256GB)card_id— 事前選択カードの ID。商品詳細のdraft_status=1のときだけ意味を持ちますwidget— カスタム入力欄。商品詳細がwidgetを返した場合、発注時に各項目のnameをパラメータとして送りますrequest_no— 冪等キー。コード上は必須ではありませんが、重複注文を避けるため毎回一意の値を送ることを強く推奨します
全商品の取得
POST /shared/commodity/items
- ボディ:業務パラメータなし。
app_idとsignのみ
data はカテゴリの配列で、各カテゴリの children が商品一覧です。
| フィールド | 型 | 説明 |
|---|---|---|
| id | int | カテゴリ ID または商品 ID |
| name | string | カテゴリ名または商品名 |
| children | array | そのカテゴリで連携可能な商品 |
| code | string | 商品コード。詳細取得と発注で使います |
| price | string/float | ゲスト価格 |
| user_price | string/float | 会員/代理店価格 |
| stock | int | 在庫(自動発送商品の場合) |
| delivery_way | int | 発送方法 |
| draft_status | int | 事前選択に対応しているか |
商品詳細の取得
POST /shared/commodity/item
| 名前 | 必須 | 型 | 説明 |
|---|---|---|---|
| code | はい | string | 商品コード |
data の主なフィールド:
| フィールド | 型 | 説明 |
|---|---|---|
| id | int | 商品 ID |
| name | string | 商品名 |
| description | string | 商品説明 |
| code | string | 商品コード |
| price | string/float | ゲスト価格 |
| user_price | string/float | 会員/代理店価格 |
| stock | int/string | 現在の在庫 |
| delivery_way | int | 発送方法 |
| contact_type | int | 連絡先の種類:0=指定なし、1=電話、2=メール、3=QQ |
| password_status | int | 照会パスワードの有無:0=なし、1=あり |
| draft_status | int | 事前選択の可否:0=不可、1=可 |
| draft_premium | string/float | 事前選択の追加料金 |
| minimum | int | 最低購入数。0 は制限なし |
| maximum | int | 1 回あたりの最大購入数。0 は制限なし |
| config | object | 解析済みの商品設定。通常 category、sku、wholesale を含みます |
| widget | array/null | カスタム入力欄の定義。発注時に各項目の name を送ります |
| seckill_status | int | タイムセール商品かどうか |
| seckill_start_time | string | タイムセール開始 |
| seckill_end_time | string | タイムセール終了 |
| owner | object | 仕入先の情報 |
| service_url | string | サポートのリンク |
| service_qq | string | サポートの QQ |
| share_url | string | 商品の共有リンク |
在庫が発注可能か確認
POST /shared/commodity/inventoryState
| 名前 | 必須 | 型 | 説明 |
|---|---|---|---|
| shared_code | はい | string | 商品コード |
| num | はい | int | 購入数 |
| card_id | いいえ | int | 事前選択カード ID。使わない場合は 0 か省略 |
| race | いいえ | string | 商品種別 |
成功レスポンスは、現在の在庫(または事前選択カード)が発注条件を満たすことを意味します。
{
"code": 200,
"msg": "success",
"data": []
}在庫不足、商品が存在しない、販売停止、事前選択カードが既に確保済みといった場合は失敗が返ります。
在庫と基本設定の取得
POST /shared/commodity/inventory
| 名前 | 必須 | 型 | 説明 |
|---|---|---|---|
| sharedCode | はい | string | 商品コード |
| race | いいえ | string | 商品種別。省略時は既定の種別 |
| フィールド | 型 | 説明 |
|---|---|---|
| count | int | 現在の在庫数 |
| delivery_way | int | 発送方法 |
| draft_status | int | 事前選択に対応しているか |
| price | string/float | 基本価格 |
| user_price | string/float | 会員価格 |
| config | string | 商品設定。INI テキストで返ります |
| factory_price | string/float | 現在の連携主体における仕入れ値 |
| is_category | bool | 種別を持つ商品かどうか |
注意:ここでの
configは設定のテキストで、itemが返す解析済みオブジェクトとは異なります。
リアルタイム在庫
POST /shared/commodity/stock
| 名前 | 必須 | 型 | 説明 |
|---|---|---|---|
| code | はい | string | 商品コード |
| race | いいえ | string | 商品種別 |
| sku | いいえ | array | SKU の組み合わせ |
{
"code": 200,
"data": {
"stock": "15"
}
}見積
POST /shared/commodity/valuation
| 名前 | 必須 | 型 | 説明 |
|---|---|---|---|
| code | はい | string | 商品コード |
| num | はい | int | 購入数 |
| race | いいえ | string | 商品種別 |
| sku | いいえ | array | SKU の組み合わせ |
| card_id | いいえ | int | 事前選択カード ID |
{
"code": 200,
"data": {
"price": "99.00"
}
}事前選択カード一覧
POST /shared/commodity/draftCard
| 名前 | 必須 | 型 | 説明 |
|---|---|---|---|
| code | はい | string | 商品コード |
| page | 推奨 | int | ページ番号。1 から |
| limit | いいえ | int | 1 ページ件数。既定は 10 |
| race | いいえ | string | 商品種別 |
| sku | いいえ | array | SKU の組み合わせ |
| フィールド | 型 | 説明 |
|---|---|---|
| list | array | カード一覧 |
| total | int | 総件数 |
| list[].id | int | カード ID |
| list[].draft | string | プレビュー文字列 |
| list[].draft_premium | string/float | そのカードの追加料金 |
商品詳細の
draft_status=1のときだけ利用できます。
事前選択カードの詳細
POST /shared/commodity/draft
| 名前 | 必須 | 型 | 説明 |
|---|---|---|---|
| code | はい | string | 商品コード |
| card_id | はい | int | カード ID |
| フィールド | 型 | 説明 |
|---|---|---|
| draft_premium | string/float | そのカードの追加料金 |
発注
POST /shared/commodity/trade
このエンドポイントは常に残高で支払います。
| 名前 | 必須 | 型 | 説明 |
|---|---|---|---|
| shared_code | はい | string | 商品コード |
| num | はい | int | 購入数 |
| request_no | いいえ | string | 冪等キー。毎回一意の値を強く推奨 |
| contact | いいえ | string | 連絡先。ダミー値で構いません |
| race | いいえ | string | 商品種別 |
| sku | いいえ | array | SKU の組み合わせ |
| card_id | いいえ | int | 事前選択カード ID |
| password | いいえ | string | 照会パスワード |
| coupon | いいえ | string | クーポンコード |
| device | いいえ | int | 端末種別。区別しないなら 0 |
商品詳細が
widgetを返した場合は、各入力欄のnameも追加パラメータとして送ってください。
| フィールド | 型 | 説明 |
|---|---|---|
| tradeNo | string | 注文番号 |
| amount | string/float | 実際に請求された金額 |
| secret | string/null | 発送内容。手動発送の場合は待機中を示す文言のことがあります |
| stock | string/int | 発注後の残り在庫 |
{
"code": 200,
"msg": "success",
"data": {
"url": null,
"amount": "10.00",
"tradeNo": "123260422101010888",
"secret": "カードの内容",
"stock": "14"
}
}注文照会
POST /shared/commodity/query
| 名前 | 必須 | 型 | 説明 |
|---|---|---|---|
| tradeNo | はい | string | 注文番号。項目名は trade_no ではなく tradeNo です |
| フィールド | 型 | 説明 |
|---|---|---|
| secret | string | 発送内容またはカードの内容 |
| widget | object/null | 発注時に送信した入力欄の値 |
| status | int | 支払い状態:0=未払い、1=支払い済み |
推奨する連携フロー
itemsかitemで商品情報を取得する- 商品に
categoryやskuがあれば、先にraceとskuを決める - 事前選択に対応していれば、
draftCardで候補を取得し、必要ならdraftで追加料金を確認する - 発注前に
stock、valuation、inventoryStateのいずれかで在庫と価格を確認する tradeで発注する- 発送状況を追う必要があれば
queryを呼ぶ
補足
- 認証だけ試したい場合は
/shared/authentication/connectを呼んでください - 商品詳細の
configは解析済みオブジェクト、inventoryのconfigは INI テキストです。これはドキュメントの誤りではなく、現在のプログラムの実装がそうなっています - 同梱の連携クライアントと完全な互換性を保ちたい場合は、本ドキュメントのフィールド名とレスポンス構造に従ってください。
tradeNoをtrade_noに変えるといった改変は避けてください
