概要

4種類の確認手法

Mobage JS SDK を利用したモバコインによるアイテム課金フローでは、モバコインが先に引き落とされ、 その後アイテムが付与されます。この モバコイン引き落としアイテムの付与 の間に、ブラウザがクラッシュしたり、Client から Game Server へのアイテム付与リクエストが失敗することがあります。このようなアイテム付与の失敗が起こると、ユーザーは コインは引き落とされたのに、アイテムは付与されていない という状態のままになってしまいます。
 
これらを防ぐための方法として、Platform側で以下の4種類の確認手法を提供しています。

以下に、各確認手法の特徴をまとめます。
 

Server-Side Asynchronous Confirmationでの確認

あらかじめ Mobage Developers Japan(デベロッパーサイト) に登録しておいた Subscriber Callback URI に、Platformから随時通知が送られてくる枠組みです。この確認手法には以下のような特徴があります。

  • Platform からの通知は、statusclosed になった Transaction に限られて Game Server へ送信されます。
  • Platform 側でユーザーのモバコインが引き落とされると、必ず Game Server へ通知が送信されます。
  • 通知の再送処理上限は10回となっており、上限を超えると再送されなくなります。
     
    こちらの確認手法に対応すると、 アイテム付与漏れを素早くリカバリすることができます。

Client-Side Asynchronous Confirmationでの確認

Client の localStorage 内に保存されている、 決済 Transaction を監視し、Client から Game Server に通知を送るための枠組みです。この確認手法には以下のような特徴があります。

  • Client からの通知は、 localStorage に存在する 決済 Transaction に限って Game Server へ送信できます。
  • mobage.event.subscribe メソッドの bank.paymentBacklog イベントが発火すると、Game Server への通知を送信できます。
  • 通知の再送処理上限は無く、Client の localStorage から 該当の bank.paymentBacklog が削除されるまでGame Server への通知を送信できます。
  • アイテム購入フローの途中でブラウザが落ちてしまい、改めてアプリケーションに戻ってきた際に即座にアイテム付与を行えます。
     
    こちらの確認手法に対応すると、 アイテム付与漏れを素早くリカバリすることができます。(Client-Side Immediate Confirmation との併用はできません)
     

Client-Side Immediate Confirmationでの確認

Client の localStorage 内に保存されている、 決済 Transaction を即座に確認し、Client から Game Server に通知を送るための枠組みです。この確認手法には以下のような特徴があります。

  • Client からの通知は、 localStorage に存在する 決済 Transaction に限って Game Server へ送信できます。
  • mobage.bank.getPaymentAllTransactionIds で TransactionId があるか確認を行い、Game Server への通知を送信できます。
  • アイテム購入フローの途中でブラウザが落ちてしまい、改めてアプリケーションに戻ってきた際に、任意で即座にアイテム付与を行えます。

こちらの確認手法に対応すると、 アイテム付与漏れを素早くリカバリすることができます。(Client-Side Asynchronous Confirmation との併用はできません)
 

バッチ処理での確認

Game Server が主体となり、定期的に未処理の Transaction の状態を網羅的に確認した上で、アイテム付与などの処理を完了させるための枠組みです。この確認手法には以下の様な特徴があります。

  • Game Server で定期的に実行し、Bank Debit API により未処理の Transaction の状態を網羅的に取得できます
  • 生成して30分以上経過した未処理の Transaction が対象となります

購入フローが開始されると、決済トランザクションが生成されます。この決済トランザクションの有効期間は10分となっており、10分経っても放置されている決済トランザクションは、Platformによって state を 'canceled' もしくは 'error' に変更されてしまいます。
 
バッチ処理での確認は、コインは引き落とされたのに、アイテムは付与されていない といったユーザーを減らすための最後の砦です。確実にユーザーへアイテム付与したい場合は、この確認手法を実装します。
 

どの確認手法を採用するか

これら全てを実装しないとゲームをリリースできない といったことはありませんが、全く対応しないと コイン引き落とされたのにアイテム付与されていない といった状態のままのユーザーを増やすことになります。そういったゲームに不満を持つユーザーを減らすために、それぞれの確認手法の特徴を知った上で、それぞれのゲームの判断でご対応いただければと思います。

 

更新履歴

  • 2016/04/13
    • 決済トランザクションの有効期間を10分に修正
  • 2016/03/25
    • JS SDK 3.3.1 公開に伴い、Client 側での即時確認処理を追加

 

PREVIOUS

アイテム購入が失敗したときの処理

NEXT

Server 側での非同期確認処理