アイテム課金を実装する

本チュートリアルで作成するサンプルコードは Unity Tutorial Sample Download からダウンロードできます。

Android ゲームポイント対応に伴い、Android の場合、Mobage 配信版では『モバコイン』、Google Play 配信版は『ゲームポイント』となります。詳細は以下 URL をご確認ください。

https://docs.mobage.com/display/JPSA/AndroidGPUnity

Mobage SDK, RESTful API を使用する事でゲーム内でアイテム等を販売する事ができます。ゲーム内でアイテム等の販売機能を提供する場合は必ず Mobage SDK の Bank API, RESTful APIs for Bank を利用して実装する必要があります。Game Server を利用したゲーム内アイテム販売機能のフローは下記のようになります。

  1. クライアントから Game Server へ Create Transaction の要求をする (1.)
  2. Game Server から Platform へ Create Transaction を要求し Transaction ID をクライアントに返す (2. ~ 6.)
  3. クライアントで continueTransaction メソッドを呼び出しユーザーに確認する (7. ~ 9.)
  4. クライアントから Game Server へ Transaction 処理開始を要求する (10.)
  5. Game Server と Platform 間で Transaction 処理を完了させる (11. ~ 22.)
  6. クライアントから Game Server へアイテム付与の確認 (23. ~ 24.)

以上がアイテム課金処理の概要となります。

アイテム課金処理の実装

Game Server では OAuth 処理を行う為に Google の提供している OAuth.php のライブラリを使用しています。また、3-legged 認証処理が完了し token credential を取得している事が前提となります。

Mobage のアイテム課金は transaction を生成し、その state を変更する事で処理が進行します。各処理と対応する state は下記となります。

処理

完了時の state

トランザクションの生成(createTransaction)

new

トランザクションの承認(continueTransaction)

authorized

トランザクションの開始(openTransaction)

open

トランザクションの終了(closeTransaction)

closed

トランザクションの中断(cancelTransaction)

canceled

また、サンプル中に出てくる下記変数は該当の値に置き換えてください。

項目

${TRANSACTION_ID}

生成した transaction の id

${STATE}

open, closed, canceled のいずれか

1. クライアントから Game Server へ Create Transaction の要求をする

クライアントアプリケーションから Game Server に create transaction の要求をします。

Game Server が Platform に create transaction の処理を要求する為には購入するアイテムの情報が必要となりますがそれらの情報は Game Server 側で管理する事を推奨します。その為、クライアントからは Game Server で管理しているアイテムの ID と購入個数のみを Game Server へのリクエストに付与します。

Unity で HTTP のリクエストを送信するには下記のように実装します。

 クリックすると該当処理を行うコードが表示されます…
Unity


2. ~ 6. Game Server から Platform へ Create Transaction を要求し Transaction ID をクライアントに返す

Game Server は クライアントから create transaction の要求を受けたらアイテム ID からユーザーの購入するアイテム情報を取得し Mobage Platform の transaction 生成用の End point へリクエストを行います。

また、Platform からのレスポンスが返ってきたら Game Server は transaction id をクライアントアプリケーションに返却する必要があります。
Platform へのリクエストとレスポンスは下記のようになります。

HTTPS Request

 

 クリックすると該当処理を行うコードが表示されます…
Game Server

 

HTTPS Response

transaction の生成が成功すると Platform から json 形式で transaction id が返ってきます。この transaction id でアイテム課金処理が行われるのでクライアントアプリケーションに返します。transaction の生成完了時の transaction の state は new となります。また、Error が返ってきた場合はアイテム課金処理を中断 します。
 

 クリックすると該当処理を行うコードが表示されます…
Game Server

 

7. ~ 9. クライアントで continueTransaction メソッドを呼び出しユーザーに確認する

transaction の生成が完了し、transaction id を取得したら、生成した transaction がユーザーの意図した物であるかユーザーに確認する必要があります。その為に Mobage SDK では continueTransaction メソッドを用意しています。continueTransaction メソッドを呼び出すとユーザーにアイテムの購入を確認するアラートが表示されます。ユーザーが購入を確認すると transaction の state が authorized に変更されます。また、ユーザーが 購入をキャンセルした場合や、エラーとなった場合はアイテム課金処理を中断 してください。


Unity での continueTransaction メソッドの呼び出し方は下記のようになります。

Unity の場合


10. クライアントから Game Server へ Transaction 処理開始を要求する

クライアントアプリケーションから Game Server に transaction を開始する要求をします。

この要求をする事で Game Server と Mobage Platform 間でアイテム課金処理を行います。

Unity で HTTP のリクエストを送信するにはそれぞれ下記のように実装します。

 クリックすると該当処理を行うコードが表示されます…

Unity


11. ~ 22. Game Server と Platform 間で Transaction 処理を完了させる

ユーザーへの購入確認が完了したのでここからの処理は Game Server と Platform 間で行います。transation の処理を進行させる (state を変更する) 為に update transaction を行います。update transaction を行うには下記の End point へリクエストを行います。

また、update transaction API は

  • トランザクションの開始 (state = open)
  • トランザクションの終了 (state = closed)
  • トランザクションの中断 (state = canceled)

で同一の物となりますので下記に HTTPS Request と Response を示します。

HTTPS Request

 

 クリックすると該当処理を行うコードが表示されます…
Game Server

 

HTTPS Response

 

 クリックすると該当処理を行うコードが表示されます…
Game Server

 

また、ここからの処理は transaction の state が authorize 以降になっていないと行う事ができませんのでご注意ください。

トランザクションの開始

Game Server から Platform へ transaction の state を authorize から open に変更するリクエストを行います。state=open として update transaction API をコールします。update transaction API にて transaction の state が open になった事を確認したらユーザーに対して アイテムの付与 を行います。Mobage Platform では transaction が close した場合、transaction をロールバックする事はできません。 open の際に アイテムの付与の確定 をしない事で不正行為への対策、モバコインを消費しているのにアイテムが付与されない等、問題を抑止する事ができます。

トランザクションの開始 (open) でエラーやアイテムの付与に失敗した場合には、クライアントにエラーを返し処理を中断 (canceled) します。
HTTPS Request
HTTPS Response

トランザクションの終了

Game Server から Platform へ transaction の state を open から closed に変更するリクエストを行います。state=closed として update transaction API をコールします。

トランザクションの終了 (closed) でエラーになった場合には、クライアントにエラーを返し処理を中断 (canceled) します。
ただし、500 系エラーの場合は、state が更新されている可能性がありますので、次の『トランザクションの確認』まで行ってからアイテム付与を確定させてください。
HTTPS Request
HTTPS Response

 

トランザクションの確認

Game Server から Platform へ transaction の state が closed になっているか確認するリクエストを行います。transaction の確認には get transaction API を使用します。get transaction を行うには下記の End point へリクエストを行います。

 

HTTPS Request

 

 クリックすると該当処理を行うコードが表示されます…
Game Server

 
 

HTTPS Responce

 

 クリックすると該当処理を行うコードが表示されます…
Game Server

 

get transaction API にて transaction の state が closed になった事を確認したらユーザーに対して アイテムの付与の確定 を行います。

トランザクションの state が closed になっていない場合には、open のタイミングで行ったアイテムの付与処理を取り消してください。

23. ~ 24. クライアントから Game Server へアイテム付与の確認

Game Server での transaction 処理が完了したら。クライアントアプリケーションから Game Server へアイテムの付与の確認を行ってください。もし、クライアントアプリケーションと Game Server 間でアイテムの付与情報の不一致が発見された場合 (アイテムの付与の確定に失敗している等) は Game Server 側で再度アイテムの付与の確定を行ってください。
 

更新履歴

  • 2014/02/21
    • 初版作成

PREVIOUS

5章 課金機能を実装する

NEXT

補足説明