Summary
This page is not available in English.
Please select another language.
4種類の確認手法
Mobage JS SDK を利用したモバコインによるアイテム課金フローでは、モバコインが先に引き落とされ、 その後アイテムが付与されます。この モバコイン引き落とし と アイテムの付与 の間に、ブラウザがクラッシュしたり、Client から Game Server へのアイテム付与リクエストが失敗することがあります。このようなアイテム付与の失敗が起こると、ユーザーは コインは引き落とされたのに、アイテムは付与されていない という状態のままになってしまいます。
これらを防ぐための方法として、Platform側で以下の4種類の確認手法を提供しています。
- Server-Side Asynchronous Confirmationでの確認
- Client-Side Asynchronous Confirmationでの確認
- Client-Side Immediate Confirmationでの確認
- バッチ処理での確認
以下に、各確認手法の特徴をまとめます。
Server-Side Asynchronous Confirmationでの確認
あらかじめ Mobage Developers Japan(デベロッパーサイト) に登録しておいた Subscriber Callback URI に、Platformから随時通知が送られてくる枠組みです。この確認手法には以下のような特徴があります。
- Platform からの通知は、status が closed になった 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 側での即時確認処理を追加