page icon

REST API 仕様書 0.0.3

 
本ドキュメントでは、Game8 Storeと連携するためのAPI仕様を説明します。
 

API一覧


パブリッシャー様側で実装いただくAPI

Game8 Store からリクエストが送信されます。
API名 / API Nameエンドポイント / Endpointメソッド / Method必須 / Required説明 / Description
アイテム購入可否チェック / Purchase Eligibility Check必須ユーザーが指定アイテムを購入可能かを確認
アイテム購入登録 / Register Purchase必須購入完了後、ゲーム内アイテムを付与
プレイヤー情報取得 / Retrieve Player Information推奨ゲーム内IDをもとに、プレイヤー名とレベルの情報を取得。

1. 共通仕様


項目内容
ホスト Game8提供API: パブリッシャー提供API:
プロトコルHTTPS
文字コードUTF-8

1.1. リクエスト仕様

リクエストヘッダー

キー内容
AuthorizationBearer 認証情報
Content-Typeapplication/jsonコンテンツタイプ
X-Signature署名検証用の署名
アクセストークンは、ゲームごとに発行された英数字(大文字・小文字を含む)を含む16〜36文字のランダムな文字列である必要があります。
Game8, Inc.にて作成してお渡しします。ご自身で作成いただくことも可能ですのでご希望の場合はお問い合わせください。

1.2. レスポンス仕様

共通レスポンスヘッダー

キー
Content-Typeapplication/json

共通レスポンスボディ

キー内容
request_id一意のリクエストID。トラブルシューティングなどでリクエストの追跡をする際に使用。
timestampレスポンスのタイムスタンプ
result_code結果コード
messageメッセージ
エラーコード一覧 に記載されているエラーが発生した場合、共通レスポンスボディの項目のみを返却。

1.3 X-Signatureの設定

リクエストが正規のものか判定するため、ゲームごとに発行された秘密鍵を使って署名し、リクエストヘッダーに設定します。

署名の設定方法

  1. GETの場合はクエリ文字列、POSTの場合はリクエストボディの内容でダイジェストを計算します。ダイジェストは、秘密鍵のシークレットを利用してHMAC-SHA256で算出します。
ダイジェストの計算に使用するメッセージ例
GETの場合:game=game123&user=user456&…
POSTの場合:{\”game\”:\”game123\”,\”user\”:\”user456\”,…}
  1. 算出したダイジェストをBase64エンコードして、リクエストヘッダーのX-Signatureに設定します。

署名の検証方法

  1. GETの場合はクエリ文字列、POSTの場合はリクエストボディの内容でダイジェストを計算します。ダイジェストは、秘密鍵のシークレットを利用してHMAC-SHA256で算出します。
ダイジェストの計算に使用するメッセージ例
GETの場合:game=game123&user=user456&…
POSTの場合:{\”game\”:\”game123\”,\”user\”:\”user456\”,…}
  1. 算出したダイジェストをBase64エンコードして、リクエストヘッダーのX-Signatureの内容と一致するか検証します。
    1. 一致する場合は、正規なリクエストとして処理を実施します。
    2. 不一致の場合は、不正なリクエストとしてエラー返却します。

秘密鍵の取得方法

秘密鍵はGame8, Inc.にて作成し、共有いたします。

2. パブリッシャー様側で実装いただくAPI詳細


2.1. アイテム購入可否チェック(GET /check)

概要

ゲーム内アイテムが購入可能かどうかを確認し、年齢制限や購入上限を考慮した結果を返す。 また、数量限定などのアイテム購入時に決済までのタイムラグによる購入停止を避けるために、transaction id を設定することで対象アイテムを確保。

リクエスト仕様

項目内容
メソッドGET
エンドポイント
プロトコルHTTPS
コンテンツタイプapplication/json

リクエストヘッダー

キー内容
AuthorizationBearer 認証情報
Content-Typeapplication/jsonコンテンツタイプ
X-Signature署名検証用の署名

クエリパラメータ

キー必須説明
gamestringGame8Store内で発番された、ゲームのユニークID
userstringゲーム内で発番された、ゲーム内のユーザーユニークID
transaction_idstring取引を一意に特定する識別子
itemstringゲーム内で発番された、購入対象のアイテムID (
priceinteger購入対象アイテムのGame8Store内での販売価格(税込・円)

リクエスト例

レスポンス仕様

レスポンスボディ

キー説明
request_idstring一意のリクエストID
timestampstring (ISO8601)レスポンスのタイムスタンプ
result_codestring結果コード
messagestringメッセージ
purchasablestring購入可能: 購入不可: メンテナンス中:
age_categorystringユーザーの年齢区分。例として / / / / などがありますが、必要に応じて他の値を設定できます。
monthly_limitinteger月額購入制限額(円)、 の場合は制限なし
remaining_limitinteger残り購入可能額(円)、 の場合は制限なし
requested_priceintegerリクエストされたアイテムの価格(円)

レスポンス例(購入可能)

レスポンス例(購入不可 - 年齢確認未提出)

レスポンス例(購入不可 - 購入制限オーバー)

レスポンス例(購入不可 - アイテム未販売)

レスポンス例(購入不可 - メンテナンス中)

 

2.2. アイテム購入実績登録(POST /register)

概要

購入完了後、ゲーム内アイテムを増加させるための処理。
購入実績登録をする前に、以下の処理を入れることを推奨します。
  • アイテム購入可否チェックAPIを通したtransaction_idを含むリクエストのみ受け付ける
  • 購入制限に抵触していないことを検証する

リクエスト仕様

項目内容
メソッドPOST
エンドポイント
プロトコルHTTPS
コンテンツタイプapplication/json

リクエストヘッダー

キー内容
AuthorizationBearer 認証情報
Content-Typeapplication/jsonコンテンツタイプ
X-Signature署名検証用の署名

リクエストボディ

キー必須説明
gamestringGame8Store内で発番された、ゲームのユニークID
userstringゲーム内で発番された、ゲーム内のユーザーユニークID
itemstringゲーム内で発番された、購入対象のアイテムID (
transaction_idstring取引を一意に特定する識別子
item_namestring購入アイテムの名称(例;ジェム100個パック)
priceinteger購入対象アイテムのGame8Store内での販売価格(税込・円)
contentsarrayアイテムに含まれる内容物のリスト

contents 配列の構造

キー必須説明
content_idstring にサフィックスをつけたアイテム内内容物のIDを自動付与(例:
content_namestringアイテム内の内容物の名称(例:ジェム)
quantityintegerアイテム内の内容物の個数(例:1000)

リクエスト例

レスポンス仕様

レスポンスボディ

キー説明
request_idstring一意のリクエストID
timestampstring (ISO8601)レスポンスのタイムスタンプ
result_codestring結果コード
messagestringメッセージ
item_grantedbooleanゲーム内アイテムが付与されたか ( / )

レスポンス例(成功)

レスポンス例(失敗 - ユーザー不明)

レスポンス例(失敗 - 登録済み)

 

2.5.プレイヤー情報取得(GET /user_info)

概要

ユーザーが入力したゲーム内IDをもとに、プレイヤー名とレベルの情報を取得する。取得した情報を購入確認画面で表示することで、ユーザーは入力したIDの正確性と、ゲームとの接続が正常であることの確認ができる。

リクエスト仕様

項目内容
メソッドGET
エンドポイント
プロトコルHTTPS
コンテンツタイプ

リクエストヘッダー

キー内容
Authorization認証情報
Content-Typeコンテンツタイプ
X-Signature署名検証用の署名

クエリパラメータ

キー必須説明
gamestringGame8Store内で発番された、ゲームのユニークID
userstringゲーム内で発番された、ゲーム内のユーザーユニークID

リクエスト例

レスポンス仕様

レスポンスボディ

キー必須説明
request_idstring一意のリクエストID
timestampstring (ISO8601)レスポンスのタイムスタンプ
result_codestring結果コード
messagestringメッセージ
user_namestringプレイヤー名(マスク可)
user_levelintegerプレイヤーレベルやランク。ゲーム内に該当情報が存在しない場合は-1を返す。
入力したゲーム内IDをもとに、他のプレイヤーの名前も取得できるため、必要に応じてプレイヤー名をマスクしてください。

user_name のマスク例

プレイヤー名マスクしたuser_name
aa*a
aaa*aa
aaaa**aa
aaaaa***aa

レスポンス例(成功)

レスポンス例(失敗 - プレイヤーIDが見つからない)

レスポンス例(失敗 - アカウントがBANなどにより非アクティブ状態)

レスポンス例(失敗 - サーバーメンテナンス中)

3.エラーハンドリング


3.1. エラーコード一覧

エラーコード説明対応策
成功-
不正なリクエストフォーマットリクエストの構造や必須パラメータを確認し、正しい形式で送信する
認証情報が不足している ヘッダーに正しい を設定する
無効なアクセストークンアクセストークンの有効期限を確認し、必要に応じて再発行する
アクセス権限が不足しているAPIエンドポイントへの適切な権限があるか確認する
署名内容が不一致署名に利用している秘密鍵のシークレットが正しいことを確認する
処理済みのリクエスト重複した を送信しないようにする
必須パラメータが不足している必須パラメータを確認し、リクエストを修正する
パラメータの型が無効例: を渡している場合、整数値に修正する
パラメータの値が不正許可されていない値や範囲外の値を送信していないか確認する
該当するデータが存在しない存在する を指定しているか確認する
購入制限の上限に達している の値を確認し、制限を超えていないか確認する
年齢確認が行われていないユーザーにゲーム内での年齢確認を促す
アイテム販売中止ストア側の販売アイテムの調整を営業・開発チームへ問い合わせる
アカウント停止により購入不可-
無効な取引ID が正しいか確認する
指定されたユーザーが存在しない が正しいか確認する
指定されたアイテムが存在しない を確認し、正しいものを指定する
登録済み取引ID が正しいか確認する
サーバー内部エラーサーバー側の問題の可能性があるため、一定時間後に再試行する
一時的なシステム障害再試行する(推奨: 5秒後にリトライ)
不明なエラー詳細なエラーメッセージを確認し、開発チームへ問い合わせる
メンテナンス中サービス停止中として一定時間後に再試行する

3.2. エラーハンドリングの推奨フロー

  1. を確認
      • (成功)であれば正常処理。
      • それ以外の場合、エラーの種類を判定。
  1. クライアント側で修正可能なエラーか確認
      • 系, 系はリクエスト内容の修正で対応可能。
      • 系はデータの整合性を確認。
  1. リトライ可能なエラーか確認
      • , は一時的なエラーの可能性があるため、数秒後にリトライ。
  1. エラーメッセージを記録・通知
      • 不明なエラー()はログを残し、開発チームに報告。

3.3. リトライポリシー

エラーコードリトライ間隔最大リトライ回数備考
5秒後3回サーバー内部エラーのため、短時間で解消する可能性あり
10秒後5回一時的なシステム障害のため、長めの間隔を空ける
なし0回不明なエラーは即時報告
このエラーハンドリングリストを参考に、適切なエラーハンドリングを実装してください。