沈んだ叡智の塔

存在証明、ぞんざいに

ソシャゲで返金申請したらゲーム会社に通知が行くの?

誰が返金申請したかはAPIで分かる。
2017年のGoogle Developersにて返金についてのAPIのお知らせをしている。
Google Developers Japan: Google Play での返金についての新しい API とポリシーのお知らせ

Voided Purchases API

Google が新たに提供を開始したこの API を使うと、デベロッパーはアプリ内やゲーム内での購入のうち、なんらかの理由で返金された取引のリストを得ることができます。このリストは、ユーザーが Google Play の UI 上で行った返金、Google のサポート窓口に依頼して行った返金、デベロッパーのサポート窓口に依頼して行った返金、クレジット カード会社のサポート窓口に依頼して行った返金などを含みます。
この API から得られる情報を使って、デベロッパーはユーザーに一度付与したゲーム内アイテムを取り消したりする対応を検討することができます。この情報は、一部のユーザーによる返金の不正利用を予防し、アプリやゲーム内の利用環境を多くのユーザーにとってフェアに保つための一助としてお役立ていただけます。この API についてより詳しくは開発者向け資料(英語)をご参照ください。

で、そのVoided Purchases APIはどういうものなの?ってなるので、リファレンスを見てみる。
Voided Purchases API  |  Google Play Developer API  |  Google Developers

Google Play Voided Purchases API からは、ユーザーが取り消した購入に関連付けられている注文のリストが提供されます。このリストの情報を基に、ユーザーがそれらの注文から商品にアクセスできないようにする取り消しシステムを実装できます。

この API の対象は、1 回限りのアプリ内注文とアプリ定期購入です。

購入は以下の方法で取り消すことができます。

注文に対する払い戻しをリクエストする
注文をキャンセルする
注文をチャージバックする
デベロッパーが注文のキャンセルまたは払い戻しを行う(注: Voided Purchases API には取り消し済みの注文のみが表示され、デベロッパーが取り消しオプションを設定せずに払い戻しを行った場合、注文は API に表示されません)
Google が注文のキャンセルまたは払い戻しを行う
この API を使用すると、特にアプリがゲームの場合、アプリのすべてのユーザーに対してより公平なエクスペリエンスを提供することができます。

と言うわけで注文関係で誰がいついくら払い戻しをしたカ教えてくれるみたい。
じゃあいつからいつまでの期間教えてくれるのか?ってなるけど
標準だと

リクエストには以下のパラメータを含めることもできます(各パラメータはオプションです)。

startTime
応答に含める最も古い取り消し済みの購入の、Unix エポックからのミリ秒単位の経過時間。デフォルトでは、startTime は 30 日前に設定されています。

API には、過去 30 日間に取り消された購入のみを表示できます。startTime に指定した値にかかわらず、それ以前に取り消された購入は応答に含まれません。

と言うわけでstartTimeで30日前に取り消された購入のみを見れるそうだ。なら30日経過で見れなくなるからどこかで保存してあげないとダメなのね。
なのでゲーム会社はこのリストを見て誰がどのアイテムを購入したか分かるのでアイテムや課金石を消せる仕組みなのだろう。

ちなみにそういったGoogleの返金絡みの取り組みについてはCEDEC2018のセッションでGoogleの方が講演しているので興味がある人は見てみよう。
【CEDEC2018】Google Play のスマホゲームで不正返金、改変、チート等に対するセキュリティーを高めよう - YouTube
今は再生数が1063回しかなくて誰も興味ないのかもしれないのか。誰も知らないのか。勉強になると思うんだけどなぁ。

じゃあ次はAppleだけどどうなんだ?ってなんかポリシーか何かでデベロッパーに伝えないとかいう記事があったけど開発向けのドキュメントを読んでみるとAppleも通知がいくことがわかる。
返金通知の処理 - 日本語ドキュメント - Apple Developer
Appleの場合はStore KIT により返金通知の処理が行われる。

返金通知の処理
消耗型、非消耗型、非自動更新サブスクリプションの各プロダクトに関するユーザーへの返金時に作成される通知に応答します。

概要
App Storeサーバは、ユーザーがApp内課金の返金を受け取る際、ほぼリアルタイムで通知を送信します。ゲーム内通貨などのコンテンツを複数のプラットフォームで提供していて、プレイヤーアカウントの残高をサーバ上で更新している場合は、返金通知を受信することが重要になります。受信した返金通知の解釈と処理を行い、返金に応じて実行するアクションについて、App内でユーザーに伝えます。
ユーザーが単発購入の返金を受けた際の通知の受信
ユーザーは、次のようないくつかの方法で返金をリクエストします。
Appleカスタマーサポートに問い合わせて返金を依頼する
Appleのセルフサービスツール(reportaproblem.apple.com(英語))にログインして、返金をリクエストする
支払い方法の発行者に返金を依頼する
App Storeで返金が処理されると、App Storeサーバはデベロッパのサーバに対して、デベロッパが設定したURLにREFUND通知を送信します。デベロッパのサーバは、応答コード200を使って通知に応答する必要があります。通知を有効にする方法は、「App Storeサーバ通知の有効化」を参照してください。
REFUND通知は、消耗型、非消耗型、および非自動更新サブスクリプションにのみ適用されます。自動更新サブスクリプションの返金を検出するには、「返金の検出(英語)」を参照してください。
返金通知の解釈と処理
デベロッパのサーバは、App Storeサーバから受け取った通知をすべて解析し、解釈する責任を負います。REFUND通知の場合は、応答する際に具体的なトランザクション、プロダクトID、および関連する日付を特定します。
unified_receipt.latest_receipt_infoでpurchase_dateを調べ、product_idの最新のトランザクションを特定します。
App Storeが返金を発行した日付は、このトランザクションのcancellation_date_msフィールドにあります。
この応答について詳しくは、「App Storeサーバ通知(英語)」を参照してください。
デベロッパは、REFUND通知を受け取ったら、返金された各トランザクションを保存し、それに対するモニタリングと適切な処理を行う責任があります。たとえば、通知をプレイヤーのアカウントやセッションにリンクさせて、返金されたトランザクションを処理する独自のゲーム内通貨の残高調整ロジックを組み込むことができます。

返金に応じてアクションを実行する場合は、App内でメッセージを表示してそのことをユーザーに伝えます。

この処理で返金分のアイテムや課金石を調整することになる。


と言うわけでソシャゲで返金申請したらゲーム会社に通知が行くの?と調べてみた結果は、「通知が行く」でした。



ちなみに、補足としてAppleはiOS15でアプリ内で返金処理が出来るようにStoreKit APIを導入するんだそうで、以下の記事に書いてある。

iOS 15 Allows You to Request Refunds for In-App Purchases Directly Within Apps - MacRumors
和訳記事はこっち
iOS15でアプリ内で直接返金が可能に〜新たなStoreKit APIが導入 - iPhone Mania