サービスからの払い戻しとチャージバックの管理
Clawback サービスを使用すると、パートナー サービスは、消費型製品とストアで管理されるサブスクリプションの払い戻し、返品、チャージバック イベントを通知できます。
これにより、パートナー サービスは、不正なトランザクションと払い戻し要求による収益損失を防止および軽減するためのロジックを実装できます。
次の情報は、すべてのサービスに推奨される方法である、最新バージョンの Clawback イベント サービスに基づいています。
払い戻しされた消耗品とストアで管理されるサブスクリプションによるリスクと詐欺の可能性
Microsoft Store では、ユーザーがアカウントの注文ページ (https://account.microsoft.com/billing/orders/) で、デジタル購入したコンテンツの払い戻し、もしくは返品を要求することができます。 自動システムにより、ユーザーは、返品要求から短時間で購入するなど、特定の基準が満たされた場合に、年間一定数の自動返品を受け取ることができます。 それ以外の場合、Microsoft のカスタマー サポート チームがデジタル アイテムの払戻または返品を発行した場合にのみ、この問題が発生します。
消費型アイテム商品のフルフィルメントが行われていない場合、または数量が消費されていない場合、返品された購入の数量が、ユーザー残高から自動的に削除されます。 ただし、返品前にアイテムが履行または消費された場合、ユーザーの残高は 0 を下回ることはありません。 この例では、ユーザーは、ゲーム サービスがアイテムを消費しており、また 返金を受け取ったときにゲーム内通貨のクレジットを受け取ります。 これにより、ゲーム内で購入、引き換え、返金された消耗品に関連した不正行為や詐欺が発生する可能性があります。
同様に、ストアで管理されるサブスクリプションは、全額または一部の払い戻しを必要とするさまざまな地域の法律の対象となります。
払い戻しの種類によっては、ゲーム開発者またはパブリッシャーによって異なる失効アクションが必要になる場合があります。
そのため、パートナーは、Clawback イベント サービスを使用して、これらのシナリオを検出し、消費型製品とストアで管理されたサブスクリプションの収益ストリームを管理および保護することをお勧めします。
Microsoft.Store Services .NET ライブラリとサンプルの利用
この記事で概説されている原則とフローを実証するために、以下を提供する Microsoft.StoreServices サンプルを確認してください。
Microsoft.StoreServices ライブラリを使用して認証を管理し、Microsoft StoreServices を呼び出します。
消耗品の管理、保留中の消費リクエストの追跡、返金された購入の調整、期限切れのユーザーストア ID の更新などのロジックの例があります。
この認証方法用に Microsoft Entra ID を構成および設定する方法に関するこの記事の手順を含む構成ガイドを提供します。
クローバック イベント キュー
Clawback イベント サービスは、サービスの Entra アプリケーション クライアント ID に対して構成された Azure Storage キューへのイベント メッセージの書き込みに基づいています。
イベントは、Microsoft Store サービスを通じて払い戻し、返品、またはチャージバックが処理されると、ほぼ瞬時にキューに書き込まれます。
そのため、これにより、サービスは、製品カタログ全体で最新の Clawback イベントを定期的に照会し、システム内でそれらを調整できます。
現在、次の製品の種類が Clawback イベント サービス キューでサポートされています:
製品の種類 | ProductKind 値 |
---|---|
ストアによって管理される消費型アイテム | Consumable |
デベロッパーによって管理される消費型アイテム | UnmanagedConsumable |
ストアによって管理されるサブスクリプション | Pass |
必須のオンボーディングとセットアップ
Clawback イベント キューのオンボーディングには、Microsoft Store サービス チームが Azure Storage キューを構成する必要があります。 キューのホスティング コストと管理は、Microsoft によってカバーされます。
Clawback イベント キューをセットアップするには、開発者パートナー マネージャーまたは Microsoft の連絡先にお問い合わせください。 キューのセットアップを要求するときは、次の情報を指定する必要があります:
- サービスが認証に使用し、パートナー センターで製品が関連付けられている Entra アプリケーション クライアント ID。
- プライマリ キューの優先地理的な Azure データ センター。 キューは世界規模でアクセス可能であるため、これは必須ではありませんが、独自のサービスに近い場合は待機時間が長くなります。
送信されると、キューのセットアップがデプロイされるまでに 1 - 2 週間かかることがあります。
Clawback イベント キューへのアクセス
Clawback イベント キューにアクセスするために、サービスは、サービスの Entra ID 資格情報から生成されたサービス アクセス トークンを使用して、purchase.mp.microsoft.com/v8.0/b2b/clawback/sastoken から SAS トークンを取得します。 SAS トークンの有効期間は限られていますが、サービスはいつでも新しい SAS トークンを要求できます。
SAS トークンの返される uri
パラメーターは、Clawback キューへの URI アドレスと、認証に必要なパラメーターを表します。
ただし、キューに対してクエリを実行して操作するには、実行する操作に応じて、URI に以下に概説する追加が必要です。
キューからの Clawback メッセージの処理
SAS トークンの変更された uri
パラメーターを使用し、サービスは次のいずれかを使用して Clawback キューを操作できます:
Clawback キュー内の各エントリは、それらのメッセージの一部として提供される Clawback イベントの詳細を含むメッセージとして書き込まれます。
キュー上のメッセージを管理するために、サービスは URI に次のパラメーターを追加することで、これらの操作を実行できます。
操作 | URI の追加 | その他のパラメーター | 説明 |
---|---|---|---|
プレビュー | /messages | peekonly=true | キューの先頭から 1 つ以上のメッセージを取得しますが、メッセージの可視性は変更しません。 |
取得 | /messages | none | キューの先頭から 1 つ以上のメッセージを取得し、その可視性タイムアウト (既定値は 30 秒) を設定して、タイムアウトが経過するまでメッセージが再度返されないようにします。 |
削除 | /messages/(キュー からのメッセージ ID) | popreceipt=(キュー メッセージからの値) | 対象のメッセージをキューから完全に削除します。 |
Get 操作を使用してキューからメッセージを取得すると、返されたメッセージに可視性タイムアウト (既定では 30 秒) が設定されます。 これにより、可視性タイムアウトが発生するまで、処理中のメッセージが後続の Get 操作に表示されなくなります。 一方、Peek 操作は可視性タイムアウトを設定せず、メッセージはすべてのフォローアップ Peek または Get 要求に表示されます。 ただし、キューからメッセージを削除するには、Get 操作を使用してメッセージでのみ返される popreciept 値が必要です。
メッセージ処理の推奨フローは次のとおりです:
- キューからメッセージ (またはメッセージのセット) を取得します。
- 各メッセージから Clawback イベント情報を抽出します。
- Clawback イベントと同じ ProductId、OrderId、および LineItemOrderId を持つ一致するトランザクションがないか、完了したトランザクション データベースを確認します。
- 完了したトランザクションから、システムでユーザーに付与されたアイテムを調整します。
- 独自のデータベースでトランザクションを調整済みとして設定します。
- メッセージ キューからメッセージを削除します。
Get 関数または Peek 関数からの応答は、次の形式の QueueMessage 項目の XML リストになります。
<QueueMessagesList>
<QueueMessage>
<MessageId>string-message-id</MessageId>
<InsertionTime>insertion-time</InsertionTime>
<ExpirationTime>expiration-time</ExpirationTime>
<PopReceipt>opaque-string-receipt-data</PopReceipt>
<TimeNextVisible>time-next-visible</TimeNextVisible>
<DequeueCount>integer</DequeueCount>
<MessageText>message-body</MessageText>
</QueueMessage>
</QueueMessagesList>
QueueMessage 構造
パラメーター | 型 | 説明 | 必須 |
---|---|---|---|
MessageId |
GUID |
キュー内のメッセージの一意の ID。 | はい |
InsertionTime |
datetime |
メッセージがキューに挿入された UTC 日時。 | はい |
ExpirationTime |
datetime |
メッセージがキューから自動的に削除される UTC 日時。 | はい |
PopReceipt |
string |
キューからメッセージを削除するための削除操作で使用されます。 | いいえ |
TimeNextVisible |
datetime |
メッセージがキューに再度表示される UTC 日時。 | はい |
DequeueCount |
int |
メッセージがデキューされた (Get API を使用してキューからプルされた) 回数。 | はい |
MessageText |
string |
Clawback イベントの JSON 構造である Base64 でエンコードされた文字列 | はい |
Clawback イベント構造
キュー内の各メッセージには、次のパラメーターを持つ Clawback イベントを表す MessageText にエンコードされた JSON 文字列が含まれます:
パラメーター | 型 | 説明 | 必須 |
---|---|---|---|
id |
GUID |
Clawback イベントの一意の ID。 | はい |
source |
string |
イベントをトリガーしたソース サービス。 | はい |
type |
string |
データ フィールドのオブジェクト形式。 これは、DirectionalbackEventContractV2 である必要があります。 | はい |
data |
ClawbackEventContractV2 |
Clawback イベントの影響を受ける注文に関連するデータを含む ClawbackEventContractV2 オブジェクト。 | はい |
time |
datetime |
イベントが作成された UTC 日時。 | はい |
specversion |
string |
契約のバージョン。 1.0 である必要があります。 | はい |
datacontenttype |
string |
データ パラメータの形式。 これは application/json である必要があります。 | はい |
subject |
string |
ロギングのために Clawback サービスによって使用される追加情報。 | はい |
traceparent |
string |
ロギングのために Clawback サービスによって使用される追加情報。 | はい |
Clawback イベント ソースの値
値 | 説明 |
---|---|
/Purchase/Refund |
イベントは、Microsoft カスタマー サポートまたは Xbox サポート返品要求サイトを通じて処理される返品または払い戻しから発生しました。 |
/Purchase/Chargeback |
イベントは、注文からの支払機関によるチャージバックまたはチャージバックの取り消しから発生しました。 これは銀行、クレジット カードなどです。 |
ClawbackEventContractV2 構造
パラメーター | 型 | 説明 | 必須 |
---|---|---|---|
lineItemId |
GUID |
消耗品の発注書内の lineItem を識別します (注文には、ショッピング カートのシナリオで複数の lineItemId を含めることができます)。 | はい |
orderId |
GUID |
ユーザーが購入したときに製品が含まれていた発注書を識別します | はい |
productId |
string |
Microsoft Store カタログ内の製品の場合、Store ID とも呼ばれます。 製品の Store ID の例は、9NBLGGH42CFD です。 | はい |
productType |
string |
製品の種類を示します。 詳細は、「Product Type values and meaning (製品の種類の値と意味)」を参照してください。 | はい |
purchasedDate |
datetime |
アイテムを購入した UTC 日時。 | はい |
eventDate |
datetime |
商品が返品または返金された UTC 日時。 | はい |
sandboxId |
string |
製品の購入が関連付けられているサンドボックス。 エンドユーザーとの本番環境は 'RETAIL' です。 | はい |
eventState |
string |
この特定の Clawback イベントの状態。 Clawback イベントの状態 をご覧ください。 | はい |
skuId |
string |
Microsoft Store カタログに製品の提供が複数ある場合は、特定の SKU 識別子。 SKU の Store ID の例は、0010 です。 | はい |
subscriptionData |
ClawbackEventSubscriptionData |
注文がサブスクリプション製品の場合に返される、ClawbackEventSubscriptionData オブジェクト。 これには、Clawback イベントの影響を受けるサブスクリプションの順序に関連するデータが含まれます。 | いいえ |
Clawback イベントの状態
値 | 説明 |
---|---|
Revoked |
ユーザーの支払いが返還され、ユーザーの権利を取り消そうとしましたが、成功しませんでした。 消耗品の場合、これは、注文が返品される前に、サービスによって商品が完了したことを示します。 独自の記録とデータとの調整が必要になります。 「消費型アイテムの Clawback イベントの調整」を参照してください |
Returned |
ユーザーの支払いは返金され、資格はアカウントから削除されました。 サービスの調整は必要ありません。 消耗品の場合、これは購入したアイテムがまだサービスによってフルフィルメントされていない場所です。 |
Refunded |
ユーザーの支払いは返還されましたが、製品の権利を保持することが許可されました。 サービスでの調整は必要ありませんが、このユーザー アカウントを追跡する必要があり、この種類のイベントが頻繁に発生している場合は詐欺行為を示している可能性があります。 |
ChargebackReversal |
このアイテムは当初、支払い手段 (クレジット カード、銀行など) から開始されたチャージバックにより、取り消し済みまたは返品済みとして報告されました。 Microsoft はチャージバックに異議を申し立て、その申し立てが認められました。 アイテムのコストは Microsoft に復元され、アイテムの状態はユーザーのアカウントに復元されました。 チャージバックの詳細については、「チャージバックとチャージバックの取り消し」を参照してください。 さらに、開発で管理される消費型アイテムとストアで管理される消費型アイテムの特定のビヘイビアーについては、「チャージバックの取り消し中の、開発で管理される消費型アイテムの固有のビヘイビアー」を参照してください。 |
ClawbackEventSubscriptionData 構造体
パラメーター | 型 | 説明 | 必須 |
---|---|---|---|
recurrenceId |
string |
ユーザーのサブスクリプション期間に対する一意の ID。サブスクリプション管理 API で使用できます。 | はい |
durationIntervalStart |
datetime |
サブスクリプションの間隔が発注書に関連付けられた UTC の日付と時刻。 | はい |
durationInDays |
int |
注文のサブスクリプション間隔に対して購入した日数。 | はい |
consumedDurationInDays |
int |
使用され、払い戻しされなかった日数/ユーザーに返された日数。 | はい |
Clawback イベントの例
{
"id": "5ef37bd1-8b4b-48c4-9b67-be458d8ab9de",
"source": "/Purchase/Refund",
"type": "ClawbackEventContractV2",
"data": {
"lineItemId": "230e9063-bffe-411a-8aa1-6f99ca091452",
"orderId": "70fd35f2-7e4a-4f27-8df3-a673a5a4d9d9",
"productId": "9N0297GK108W",
"productType": "UnmanagedConsumable",
"purchasedDate": "2023-01-24T21:59:19.5725585+00:00",
"eventDate": "2023-01-26T08:18:52.246847+00:00",
"eventState": "Revoked",
"sandboxId": "XDKS.1",
"skuId": "0010"
},
"time": "2023-01-26T08:18:56.7103057+00:00",
"specversion": "1.0",
"datacontenttype": "application/json",
"subject": "/Purchase/Refund/907eb4af-57bf-4ff6-b040-e9296d169436",
"traceparent": "00-6d2a86a53e8cae15cddaadc43f4d9670-4821cba073c416c1-00"
}
払い戻しと返品
イベントが /Purchase/Refund
ソースから来た場合、これはイベントが顧客の refund
または return
要求に関連付けられていることを示します。
これら 2 つの用語は同義語として使用されることがありますが、Microsoft Store サービスのコンテキストでは、それぞれがサービスによって処理される一意の動作を持ちます。
どちらの場合も、ユーザーは注文から支払いを受け取りますが、購入から付与された権利または数量の動作が異なります。
返品操作では、ユーザーのアカウントから権利または数量の削除が試行されます。
ただし、払い戻しを行うと、ユーザーのアカウントは購入の権利または数量を保持します。
Microsoft カスタマー サポートまたは自動ツールを使用した要求は、通常、返品要求として扱われます。
ただし、まれに、顧客の問題に関連する状況に基づく '埋め合わせ' の措置として、前向きな顧客サービスを提供するためにイベントの状態が Refund
になっている場合があります。
また、Refund
の状態は、チャージバック処理料金を回避するために購入がチャージバックとして報告される可能性がある場合に、顧客に対して先んじて行う払い戻しとして使用されることもあります。
サービスは eventState
値を確認し、「クローバック イベントの状態」で説明されている各値の調整に関する推奨事項に従う必要があります。
シナリオの例については、「消費型製品の Clawback の戻り値の状態のビヘイビアー」と、「ストアで管理されたサブスクリプション製品の Clawback の戻り値のビヘイビアー」を参照してください。
チャージバックとチャージバックの取り消し
イベントが /Purchase/Chargeback
ソースから発生した場合、これは支払機関が注文の請求を取り消し、支払いを取り戻したことを示します。
チャージバックの一般的な原因は、支払い手段に対する不正な請求に関する争いです。
チャージバック イベントが発生すると、Clawback サービスは、ユーザーのアカウントから権利または数量を削除しようとする試みに基づいて、Revoked
または Returned
の状態でイベントを報告します。
イベントの発生時に、サービスは /Purchase/Refund
からのイベントと同じ調整アクションでチャージバック イベントを処理する必要があります。
Microsoft は、購入が正当であり、使用された量であると思われる場合、通常、情報に基づいてチャージバックに対して異議を申し立てます。
異議申し立てが認められた場合、支払いは Microsoft に返送され、ChargebackReversal
イベントが Clawback キューに記録されます。
このイベントには、最初のチャージバック イベントと同じ OrderID が含まれます。
ChargebackReversal
が発生すると、購入したアイテムはユーザーのアカウントに復元されます。
したがって、購入したアイテムを取り消すか削除するためにサーバー上で行われたアクションは、支払いが復元されたため、取り消される必要があります。
チャージバックとチャージバック取り消しのタイムラインは異なる場合があります。 チャージバックは通常、購入から 90 日以内にトリガーされますが、一部は購入後 180 日以内に発生する場合があります。 Microsoft がチャージバックに対して異議を申し立てた場合、プロセスと最終的な申し立て結果には 3 から 6 か月かかる場合があります。
消費型アイテムの Clawback イベントの調整
既に履行または消費されたアイテムの Clawback イベントが検出された場合、開発チームまたは発行元は、ユーザーのアカウントに対する適切な行動方針を自由に決定できます。 次のような操作を行うことができますが、これらのみに限定されません。
- 可能であれば、ユーザーの残高から同等の消費価値 (通常はゲーム内通貨) を削除します。
- ゲーム内の消費価値を使用して最後に購入したアイテムを削除します (残高から数量を削除できない場合)
- 現時点ではユーザーに対して何も措置を講じませんが、アカウントを追跡して、これが詐欺または返品の悪用の可能性のあるパターンであるかどうかを確認します (例: 大量の消耗品を購入し、ゲーム内で消費した後に返品される)。
さらなるカスタマー サポートへの電話や紛争を避けるために、実行された調整アクションとその理由をユーザーに通知し、この情報をサービスに記録することをお勧めします。 例: "Microsoft を通じてお客様のアカウントに返品が発行されたため、お客様のアカウント残高から [製品] の [数量] を削除しました。"
消費型製品の Clawback イベントを管理するための要件
ストア管理および開発管理の消耗品に関連するイベントを適切に管理および調整するには、サービスで各消費トランザクションを追跡し、includeOrderIds
パラメーターを TRUE として使用する必要があります。
このパラメーターは、消費要求を満たすために使用される注文書と数量に関連する ID を返します。
これらと同じ OrderID が Clawback イベントで提供され、イベント内のデータに基づいて、独自のデータベース内のどの消費トランザクションとユーザーを調整する必要があるかを検索し、正確に特定するために使用できます。
サービスでの消費トランザクションを追跡するための推奨事項とフローの詳細については、「サービスからの消費型製品の管理」を参照してください
消費型製品の Clawback の戻り値の状態のビヘイビアー
消費型アイテム タイプ | 消費量 | eventStatus | 消費型アイテムのユーザーの権利への影響 | 開発者サービスに推奨されるアクション |
---|---|---|---|---|
Store-managed |
いいえ | Return |
数量は購入から付与された金額だけ減らされます。 例: 返却前の数量 = 1、イベント後の数量 = 0。 | アクションはありませんでした。アイテムは消費されませんでした。 |
Store-managed |
はい | Revoked |
アイテムは以前に消費/履行されたため、数量は減りません。 例: 返却前の数量 = 0、イベント後の数量 = 0。 | 完了したトランザクション データベースで一致する OrderID、LineItemID、ProductID を検索します。 ゲーム サーバーで追跡されているユーザーの残高から購入額を取り消します。 |
Dev-managed |
いいえ | Return |
数量は購入から付与された金額だけ減らされます。 例: 返却前の数量 = 1、イベント後の数量 = 0。 | アクションはありませんでした。アイテムは消費されませんでした。 |
Dev-managed |
はい | Revoked |
アイテムは以前に消費/履行されたため、数量は減りません。 例: 返却前の数量 = 0、イベント後の数量 = 0。 | 完了したトランザクション データベースで一致する OrderID、LineItemID、ProductID を検索します。 ゲーム サーバーで追跡されているユーザーの残高から購入額を取り消します。 |
消費型製品の Clawback の払い戻し状態のビヘイビアー
払い戻しのイベント状態は、ユーザーに支払いが返されるだけでなく、アイテムに対する権利を保持することもできる特殊なケースです。 このイベント状態に至る主なシナリオは 2 つあります。
- カスタマー サービスが、払い戻しに至るユーザーの不便や問題に対する '埋め合わせ' の措置として行う払い戻し。
- 購入がチャージバックとして報告される可能性が高い場合に、先んじて行われる払い戻し。 これにより、発生する可能性が高いチャージバック イベントを処理する際の費用やリソース コストの増加を防ぐことができます。
このため、払い戻しのイベント状態を確認した場合の適切な処置は、サービス上のリンクされたアカウント情報を含めてイベントを記録することです。 その後、1 つのアカウントで、そのアカウントでの詐欺や不正使用の可能性を示すパターンまたは繰り返される払い戻しのイベント状態がないか監視します。
消費型アイテム タイプ | 消費量 | eventStatus | 消費型アイテムのユーザーの権利への影響 | 開発者サービスに推奨されるアクション |
---|---|---|---|---|
Store-managed |
いいえ | Refund |
数量は減りません | 失効アクションはありません。ユーザーは権利を保持することができますが、イベントと他のリンクされたユーザー情報をログに記録し、繰り返されるパターンがないか監視します |
Store-managed |
はい | Refund |
数量は減りません | 失効アクションはありません。ユーザーは権利を保持することができますが、イベントと他のリンクされたユーザー情報をログに記録し、繰り返されるパターンがないか監視します |
Dev-managed |
いいえ | Refund |
数量は減りません | 失効アクションはありません。ユーザーは権利を保持することができますが、イベントと他のリンクされたユーザー情報をログに記録し、繰り返されるパターンがないか監視します |
Dev-managed |
はい | Refund |
数量は減りません | 失効アクションはありません。ユーザーは権利を保持することができますが、イベントと他のリンクされたユーザー情報をログに記録し、繰り返されるパターンがないか監視します |
消費型製品のクローバック チャージバック動作
消費型アイテム タイプ | 消費量 | eventStatus | 消費型アイテムのユーザーの権利への影響 | 開発者サービスに推奨されるアクション |
---|---|---|---|---|
Store-managed |
いいえ | Return |
数量は購入から付与された金額だけ減らされます。 例: 返却前の数量 = 1、イベント後の数量 = 0。 | アクションはありませんでした。アイテムは消費されませんでした。 |
Store-managed |
はい | Revoked |
アイテムは以前に消費/履行されたため、数量は減りません。 例: 返却前の数量 = 0、イベント後の数量 = 0。 | 完了したトランザクション データベースで一致する OrderID、LineItemID、ProductID を検索します。 ゲーム サーバーで追跡されているユーザーの残高から購入額を取り消し、追跡データベースのエントリを更新して、それがチャージバックであったことを記録します。 |
Dev-managed |
いいえ | Return |
数量は購入から付与された金額だけ減らされます。 例: 返却前の数量 = 1、イベント後の数量 = 0。 | アクションはありませんでした。アイテムは消費されませんでした。 |
Dev-managed |
はい | Revoked |
アイテムは以前に消費/履行されたため、数量は減りません。 例: 返却前の数量 = 0、イベント後の数量 = 0。 | 完了したトランザクション データベースで一致する OrderID、LineItemID、ProductID を検索します。 ゲーム サーバーで追跡されているユーザーの残高から購入額を取り消し、追跡データベースのエントリを更新して、それがチャージバックであったことを記録します。 |
消費型製品のクローバック チャージバックの取り消し動作
消費型アイテム タイプ | 消費量 | eventStatus | 消費型アイテムのユーザーの権利への影響 | 開発者サービスに推奨されるアクション |
---|---|---|---|---|
Store-managed |
いいえ | ChargebackReversal |
チャージバックの数量は、チャージバック イベント前に消費されていなかったため、ユーザーの数量に復元されます。 例: 取り消し前の数量 = 0、取り消し後の数量 = 1。 | 数量は、通常のクエリ フローによって通常どおりに表示および消費されます。 完了したトランザクション データベースで一致する OrderID、LineItemID、ProductID を検索します。 一致がラウンドでない場合、またはチャージバックを経たことが記録に示されていない場合は、何もしません。 |
Store-managed |
はい | ChargebackReversal |
チャージバックの数量は、チャージバック イベント前にすでに消費されたため、ユーザーの数量に復元されません。 例: 取り消し前の数量 = 0、取り消し後の数量 = 0。 | 完了したトランザクション データベースで一致する OrderID、LineItemID、ProductID を検索します。 一致が見つかり、それがシステムにチャージバックとして記録されている場合は、ユーザーの残高に対して以前に実行されたチャージバック アクションを取り消します。 次に、追跡エントリを更新して、チャージバックが取り消されたことを記録します。 |
Dev-managed |
いいえ | ChargebackReversal |
チャージバックの数量は、チャージバック イベント前に消費されていなかったため、ユーザーの数量に復元されます。 ただし、数量が 1 を超えることはありません。以下の「注」を参照してください。 | 下記の「注」をご覧ください。 |
Dev-managed |
はい | ChargebackReversal |
チャージバックによる数量は、既に消費されている場合でも、ユーザーの数量に復元されます。 下記の「注」をご覧ください。 | 下記の「注」をご覧ください。 |
注意
開発者が管理する消耗品は、チャージバックの取り消しに関して独自に動作するため、これらのイベントを処理するには追加のロジックが必要です。 詳細については、以下をご覧ください。
チャージバック取り消し中の開発管理の消耗品の一意の動作
開発者が管理する消耗品がチャージバック イベント前に消費されたかどうかに関係なく、チャージバックの取り消しがある場合は、購入時の消耗品の数量がユーザーのアカウント残高に追加されます。 ただし、開発管理の消耗品に有効な権利が複数ある場合でも、開発管理の消耗品は 1 より大きい数量を報告しません。 これは、開発者が管理する消耗品は、ゲーム サービスによって消費/履行されたことが報告されるまで、ユーザーが消耗品を再度購入できないようにすることを目的としているためです。 ユーザーのアカウントに既にゼロ以外の残高があるときにチャージバックが取り消された場合、複数の権利は引き続き有効であり、通常どおり個別に消費できます。 すべてのアクティブな権利が消費/履行されるまで、各消費要求の後、ユーザーの残高は '1' のままであることに注意してください。 したがって、開発管理の消耗品に対するユーザーの残高が '0' と報告されるまで、システムは通常どおり消費フローを実行する必要があります。
消費するときに、同じ OrderID、LineItemID、ProductId に一致するレコードが見つかった場合は、そのレコードがチャージバック調整中としてマークされているかどうかを確認します。
チャージバックから調整済みとしてマークされている場合は、ユーザーのアカウント残高に対して実行されたアクションを取り消し、アイテムをチャージバック取り消しとしてマークします。
例: 取り消し前は Qty = 1、取り消し後は Qty = 1 ですが、実際にはアクティブな権利が 2 つあります。 サービスは消耗品を 1 つ消費しますが、消費後もユーザーの数量は '1' のままです。 サービスはさらに 1 消費します。ユーザーの数量は '0' として報告されます。
ストアで管理されるサブスクリプション製品のクローバックの戻り値のビヘイビアー
ストアで管理されるサブスクリプションの Clawback イベントが検出されると、そのサブスクリプションに関連する追加情報が、ClawbackEventSubscriptionData 構造を介して Clawback イベントに追加されます。 具体的には、ユーザーが、対応するサブスクリプション間隔の支払いの全額または一部を発行されたかどうかです。 サブスクリプションがユーザーのアカウントに対して毎月のゲーム内リワードまたは通貨を付与する場合は、支払いが返された日数と保持された日数に応じて、それらの報酬を取り消すことができます。
注 開発チームと発行元は、ストアで管理されたサブスクリプションの Clawback イベントを受け取ったときに、ユーザーのアカウントに対する適切な処置を自由に決定できます。 アイテムや特典を取り消すための措置が講じられた場合は、追加のカスタマー サポートの呼び出しや異議の申し立てを避けるために、実行された調整措置、理由、および情報をサービス内に記録する旨をユーザーに通知することをお勧めします。 例: "Microsoft を通じてお客様のアカウントに返品が発行されたため、[サブスクリプション製品] の特典が調整されました。"
ストアで管理されるサブスクリプションのクローバック イベントの動作
eventStatus | シナリオ | 開発者サービスに推奨されるアクション |
---|---|---|
Revoked | サブスクリプションの間隔には、既に使用されている日数が含まれます。サブスクリプションの権利はユーザーのアカウントから削除されています。 | 返品が一部なのか全てなのかを確認します。 支払われていない権利を取り消すか、一部の支払いが行われた金額に基づいて部分的な価値を付与するための適切な措置を講じます。 |
戻り値 | まだ使用/開始されていない今後のサブスクリプション間隔が、ユーザーのアカウントから削除されました。 | アクションはありません。インターバルは開始されませんでした。 |
払い戻し | 現在アクティブなサブスクリプション間隔の支払いがユーザーに送り返されました。 | 失効アクションはありません。ユーザーは権利を保持することができますが、イベントと他のリンクされたユーザー情報をログに記録し、繰り返されるパターンがないか監視します。 定期サービスを使用して、通常の状態とロジックに従います。 「サービスからのサブスクリプション製品の管理」を参照してください。 |
ChargebackReversal | 以前の失効状態からのサブスクリプション間隔がユーザーのアカウントに復元されました。 | アイテムが取り消し済みとして調整されたときに実行されたすべてのアクションを元に戻します。 定期サービスによって報告されたサブスクリプションの状態の通常の状態とロジックに従います。 「サービスからのサブスクリプション製品の管理」を参照してください。 |
完全な返品と一部の返品に対する ClawbackEventSubscriptionData の例
シナリオ: 月次サブスクリプション、ユーザーは 2023 年 7 月 6 日に日割り計算 (一部) の返品を行いました。 ユーザーは未使用分として 25 日間の価格を返金されました。Microsoft は、使用された 6 日間分の価格を受け取りました。
"subscriptionData": {
"recurrenceId": "mdr:0:ae5cad80acf2428fa64c38529996a3fd:df3763c2-36f8-4bde-8fa5-a29fb6058d62",
"durationIntervalStart": "2023-07-01T00:00:00+00:00",
"durationInDays": 31,
"consumedDurationInDays": 6,
"refundType": "Partial"
}
シナリオ: 月次サブスクリプション、ユーザーは 2023 年 7 月 6 日に完全な返品を行いました。 ユーザーは月のサブスクリプションに対して支払われた全額を返されました。Microsoft は支払いを一切受け取りませんでした。
"subscriptionData": {
"recurrenceId": "mdr:0:0dc7194514404dd3bf0f678e21716774:23a454d5-f240-4dad-9923-9c3f53f515cc",
"durationIntervalStart": "2023-07-01T00:00:00+00:00",
"durationInDays": 31,
"consumedDurationInDays": 6,
"refundType": "Full"
}
シナリオ: 年間サブスクリプション、ユーザーは 2024 年 1 月 15 日に日割り計算 (一部) の返品を行いました。 ユーザーは未使用分として 199 日間の価格を返されました。Microsoft は、使用された 168 日間分の価格を受け取りました。
"subscriptionData": {
"recurrenceId": "mdr:0:9ed0a48236404b78a017e9e226da94c6:22aa4f3c-1ffc-4dd3-8801-cb2a227a5c46",
"durationIntervalStart": "2023-07-31T00:00:00+00:00",
"durationInDays": 367,
"consumedDurationInDays": 168,
"refundType": "Partial"
}
注 上記の例の年間サブスクリプションの durationInDays は 365 ではなく 367 です。 2024 年はうるう年であるために 1 日が追加されます。もう 1 つは、29 日、30 日、または 31 日が発生しない月の問題を回避するために、ユーザーの更新日を翌月の 1 日に移動するために追加されます。 詳細については、「サブスクリプションの開始日、更新日、有効期限について」を参照してください。
後者の例では、Clawback イベントの前の時間の支払いが保持されていました。 サブスクリプションに毎月のリワードまたはゲーム内アイテムが付与されている場合は、ユーザーがその期間、付与されたアイテムを確実に保持することをお勧めします。
開発サンドボックス内での製品返品のテスト
サンドボックスの開発アカウントは、support.xbox.com の自動製品返品リクエスト ツールにアクセスできません。 したがって、返品のシナリオと Clawback の実装をテストするには、次の手順に従って、Microsoft 開発者アカウント マネージャーまたは Microsoft の担当者の助けを借りて、テスト購入の返品を要求する必要があります。
- テスト商品の価格がゼロ以外に設定されていることを確認します ($0.01 で十分です)。
- テスト アカウントで開発サンドボックスにログインします。
- テスト アカウントで製品を購入します。
- 消費リクエストの
includeOrderIds: true
オプションを使用して、購入したアイテムをフルフィルメント / 消費します。 - 消費応答で返される OrderIds に注意してください。
- Microsoft Developer Partner Manager または Microsoft の担当者に電子メールを送信して、製品の返品をリクエストしてください。 電子メールには、次のテンプレートの例にある次の情報を含める必要があります。
要求の種類 | OrderID | OrderLineItemId | テスト アカウント (メール) | 購入商品名 | 購入日 | リクエストの概要、追加情報 |
---|---|---|---|---|---|---|
戻り値 | 8060a406-85c8-4d01-a105-ff11725499c9 | cb054aa0-7392-4cc6-af06-53b285e39259 | XDKS-RefundTest0001@xboxtest.com |
消費型アイテム 1 | 2021-08-30T21:53:08.2565331+00:00 | アイテムの Clawback テスト |
注: リクエストが '払い戻し' ではなく '返品' としてリストされていることを確認してください。 「払い戻し」に使用されるツールは、支払いを払い戻しますが、ユーザーのアカウントの資格は保持します。 ツールで「返品」すると、資格が取り消され、Clawback イベント メッセージがキューに書き込まれます。
Xbox サポート チームの担当者が、リクエストが処理されたことを確認するために 3 営業日以内に返信します。
その後、クエリで正しい Clawback 情報を確認できるはずです。
デベロッパー パートナー マネージャーによって承認された場合は、将来のリクエストを直接行うための Xbox サポート チームのメール アドレスが提供される場合があります。
このエイリアスを組織内で広範に共有しないでください。今後直接リクエストがあった場合は、Developer Partner Manager に Cc を付けることを忘れないでください。
注: 返品と返金は、ゼロ以外の価格の製品でのみ Clawback イベントを引き起こします。 したがって、商品の価格は少なくとも $0.01 である必要があります。 新しく作成されたすべてのテスト アカウントにテスト用の支払い方法が追加され、サンドボックス内でテスト購入を行うことができるため、これが有効になりました。 テスト用の支払い方法がない古いアカウントを使用している場合は、このフローを実行できるように新しいアカウントを作成します。