課金アイテム購入シーケンス

通常シーケンス

「購入状態レコード」の説明

項目

値の例

説明

商品ID

com.dmm.games.sample.100gem

ストアとXGに登録されている商品ID

ストア取引ID

12345678-...等

ストアが発行するグローバルでユニークなID
App Store : transactionId
Google Play : purchaseToken
DMM GAMES: purchaseToken

XG側処理状態

未処理
クライアントエラー
サーバーエラー
処理済み

課金アイテム購入シーケンス実装要件

【MUST】利用権付与とXG側の処理の順番

購入の処理が中断した場合でも、ゲーム端末で行われる「トランザクションのリストア処理」で購入完了メソッド(Unity IAPの場合、ProcessPurchase)が呼び出されるようにするため、 「課金アイテム購入APIリクエスト」より先に「課金アイテム購入検証APIリクエスト」を行い、XG側の処理より先にゲームサーバー側の処理を行なってください。

課金アイテム購入APIリクエストのストアがGoogle Playの場合、XG側でGoogle Playのアプリ内アイテムの購入を 消費 / 承認 しており、この時点で購入のトランザクションが完了します。
先にXG側の処理を行いゲームサーバー側の処理の前に何らかの理由で処理が中断されると、購入のトランザクションが完了しているためゲーム端末のトランザクションのリストア処理で購入完了メソッドが呼び出されず「利用権付与」を行うことができません。このような事象の発生を防ぐため、先にゲームサーバー側の処理を行う必要があります。
上記はGoogle Playのみの挙動になり、他のストアは先にXG側の処理を行っても問題ありませんが、XG組み込みの実装がシンプルになるように各ストアの課金アイテム購入シーケンスを統一しています。

注釈

XGから実行しているGoogle Playのアプリ内アイテムの購入の 消費 / 承認 でGoogle Playのサーバー起因のエラーが発生した場合、 XGは500エラーをレスポンスします。サーバー起因のエラー発生箇所(XG、Google Play)にかかわらず「XG側処理状態:サーバーエラー」のシーケンスからリカバリー処理を行なってください。

【MAY】購入個数制限を超えて購入された課金アイテムの対応

購入個数制限を超えて課金アイテムを購入された際にDMMポイント返還・返金対応を行う方針の場合、「課金アイテム購入APIリクエスト」は実行せずにfinishTransactionを実行してください。
「課金アイテム購入APIリクエスト」でゲーム内通貨を発行していないため、ゲーム内通貨の回収が不要になります。

リカバリーシーケンス

「購入状態レコード」のXG側処理状態とリカバリー処理の要否

No.

XG側処理状態

障害発生箇所

想定状況

リカバリー処理

1

レコード無し

ゲーム端末

購入後にゲームサーバーへリクエストできなかった場合。

必要

ゲームサーバー

ゲーム端末からリクエストを受信したが、XGへ「課金アイテム購入検証API」をリクエストできなかった場合。
XGへ「課金アイテム購入検証API」をリクエスト後、XGからレスポンスを受信した後の処理に失敗した場合。

XG or ストア

ゲームサーバーからリクエストを受信したが、レスポンスに失敗した場合。

2

未処理

ゲームサーバー

ゲーム端末からリクエストを受信したが、XGへ「課金アイテム購入API」をリクエストできなかった場合。
XGへ「課金アイテム購入API」をリクエスト後、XGからレスポンスを受信した後の処理に失敗した場合。

必要

3

クライアントエラー

-
XGへの「課金アイテム購入API」リクエストの内容に何らかの問題があった場合。
・不正な購入(他のゲームで購入したアイテムの取引IDをXGへリクエストした等)

不要

4

サーバーエラー

XG or ストア

「課金アイテム購入API」でXGかストアで5xxエラーかタイムアウトが発生した場合。
※正確にはストアで429エラーが発生した場合、XGはゲームサーバーへリカバリー可能なエラーとして500エラーでレスポンスしています。

必要

5

処理済み

ゲームサーバー

XGから処理成功のレスポンスを受信したが、ゲーム端末に結果を返却する処理が出来なかった場合。

不要

6

処理済み

ゲーム端末

finishTransactionを実行できなかった場合。
App Store、DMM GAMESで起こり得ます。
※Google PlayはXG側でアプリ内アイテムの購入の 消費 / 承認を行っているため、起こり得えません。

不要