概要
App Storeサーバは、ユーザーがアプリ内課金の返金を受け取る際、ほぼリアルタイムで通知を送信します。ゲーム内通貨などのコンテンツを複数のプラットフォームで提供していて、プレイヤーアカウントの残高をサーバ上で更新している場合は、返金通知を受信することが重要になります。受信した返金通知の解釈と処理を行い、返金に応じて実行するアクションについて、アプリ内でユーザーに伝えます。
ユーザーが単発購入の返金を受けた際の通知の受信
ユーザーは、次のようないくつかの方法で返金をリクエストします。
-
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
通知を受け取ったら、返金された各トランザクションを保存し、それに対するモニタリングと適切な処理を行う責任があります。たとえば、通知をプレイヤーのアカウントやセッションにリンクさせて、返金されたトランザクションを処理する独自のゲーム内通貨の残高調整ロジックを組み込むことができます。
重要
返金されたトランザクションが含まれるレシートを使ってverifyReceipt(英語)エンドポイントを呼び出したときのJSON応答には、自動更新サブスクリプションの場合を除き、返金されたトランザクションは含まれません。
返金に応じてアクションを実行する場合は、アプリ内でメッセージを表示してそのことをユーザーに伝えます。
不正な返金の特定
REFUND
通知をデベロッパのサーバ上のプレイヤーアカウントにマッピングすることで、返金が何度も繰り返されている購入を特定し、不正な返金を減らすことができます。データのモニタリングと分析を継続し、不審な返金アクティビティを特定してください。
複数のプラットフォームでコンテンツを提供している場合は、デベロッパのサーバでユーザーアカウントの残高を常に最新の状態に保ってください。App Storeサーバ通知を使えば、ユーザーに影響するトランザクションの最新ステータスをほぼリアルタイムで取得できます。