開発者コンソール

価格帯別の定期購入型アイテムのレシート検証

価格帯別の定期購入型アイテムのレシート検証

リアルタイム通知(RTN)とレシート検証サービス(RVS)を組み合わせて使用すると、価格帯の変更を検出して検証できます。

  • RTNを使用すると、アプリのユーザーが行った定期購入型アイテムの価格帯や期間の変更を検出できます。
  • RVSを使用すると、アプリのユーザーが行った購入を検証できます。

価格帯別の定期購入型アイテムのRTN

RTNは、価格帯が変更された際にリアルタイムのサーバープッシュ通知を提供します。次の表は、価格帯の変更通知の詳細を示しています。

通知タイプ 説明
SUBSCRIPTION_MODIFIED_DEFERRED 定期購入プランが比例配分の「繰延」モードで変更されました。定期購入プランは、次の更新日に変更される予定です。現在のプランは更新日まで有効です。
SUBSCRIPTION_MODIFIED_IMMEDIATE 定期購入プランが比例配分の「即時」モードで変更されました。既存のプランは日割り計算による払い戻しでキャンセルされ、新しいプランがすぐに有効になります。通知には、キャンセルされたレシートIDが含まれます。

RTNでこれらのイベントをキャプチャし、RVSを使用して定期購入型アイテムの変更を確認します。通知タイプの一覧については、サポートされている通知タイプを参照してください。

RTNレスポンスの例

Amazonでは、プランの変更が即時か繰延かによって処理の方法が異なります。

  • プランの変更が即時の場合:
    • Amazonは現在のプランをキャンセルし、すぐに新しいプランを有効にします。
    • Amazonは現在のレシートIDをキャンセル済みとしてマークします。
    • RTNペイロードのrelatedReceiptsフィールドには、キャンセルされたレシートIDが含まれます。
  • プランの変更が繰延の場合:
    • 現在のレシートは引き続き有効で、Amazonは次の請求サイクルに向けてプランの変更を予定します。
    • RTNペイロードのrelatedReceiptsフィールドは空の配列です。

次の例は、SUBSCRIPTION_MODIFIED_IMMEDIATE通知タイプとSUBSCRIPTION_MODIFIED_DEFERRED通知タイプのRTNレスポンスを示しています。

SUBSCRIPTION_MODIFIED_IMMEDIATEの例

{
  "Type" : "Notification",
  "MessageId" : "723acf52-cb22-57f5-b13e-afa29908f61d",
  "TopicArn" : "arn:aws:sns:us-east-1:033616359524:MyTopic",
  "Message" : "{\"appPackageName\":\"com.example.amazonsdkapivalidator3\",\"notificationType\":\"SUBSCRIPTION_MODIFIED_IMMEDIATE\",\"appUserId\":\"io9oFdzmCSMuKk_pp9pYccoIHRfc6kSAAYaNo51xZrg=\",\"receiptId\":\"R4TWNm8Uspo4Ujio51B5_7xBnRFzr4B2k9Bv48_7mRY=:3:11\",\"relatedReceipts\":{"cancelledReceiptId": "IgThFebRSngPTn9JntrLMby52NqMjyMMQnrUFlczwV0=:3:11"},\"timestamp\":1752584166563,\"betaProductTransaction\":false}",
  "Timestamp" : "2025-07-15T12:56:10.667Z",
  "SignatureVersion" : "1",
  "Signature" : "EXAMPLEw6JRN...",
  "SigningCertURL" : "https://sns.us-east-1.amazonaws.com/SimpleNotificationService-9c6465fa7f48f5cacd23014631ec1136.pem",
  "UnsubscribeURL" : "https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:033616359524:MyTopic:3c2cebb7-5dc3-4eca-9d55-4e8922144131"
}

JSON形式のMessageフィールドの内容は次のようになります。

{
  "appPackageName": "com.example.amazonsdkapivalidator3",
  "notificationType": "SUBSCRIPTION_MODIFIED_IMMEDIATE",
  "appUserId": "io9oFdzmCSMuKk_pp9pYccoIHRfc6kSAAYaNo51xZrg=",
  "receiptId": "R4TWNm8Uspo4Ujio51B5_7xBnRFzr4B2k9Bv48_7mRY=:3:11",
  "relatedReceipts": {
    "cancelledReceiptId": "IgThFebRSngPTn9JntrLMby52NqMjyMMQnrUFlczwV0=:3:11"
  },
  "timestamp": 1752584166563,
  "betaProductTransaction": false
}

relatedReceiptsフィールドにキャンセルされたレシートIDが含まれていることに注意してください。プランの変更が即時の場合、Amazonは現在のプランをすぐにキャンセルし、新しいプランを有効にします。

SUBSCRIPTION_MODIFIED_DEFERREDの例

{
  "Type" : "Notification",
  "MessageId" : "64140cd1-13e4-57d8-baf6-6c2141c2646f",
  "TopicArn" : "arn:aws:sns:us-east-1:033616359524:MyTopic",
  "Message" : "{\"appPackageName\":\"com.example.amazonsdkapivalidator3\",\"notificationType\":\"SUBSCRIPTION_MODIFIED_DEFERRED\",\"appUserId\":\"io9oFdzmCSMuKk_pp9pYccoIHRfc6kSAAYaNo51xZrg=\",\"receiptId\":\"PnkS4FtcuGLylYyc_vNjrN_ucm9hhaur43iCacRAd14=:3:11\",\"relatedReceipts\":{},\"timestamp\":1752584161620,\"betaProductTransaction\":false}",
  "Timestamp" : "2025-07-15T12:56:06.409Z",
  "SignatureVersion" : "1",
  "Signature" : "EXAMPLEw6JRN...",
  "SigningCertURL" : "https://sns.us-east-1.amazonaws.com/SimpleNotificationService-9c6465fa7f48f5cacd23014631ec1136.pem",
  "UnsubscribeURL" : "https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:033616359524:MyTopic:3c2cebb7-5dc3-4eca-9d55-4e8922144131"
}

JSON形式のMessageフィールドの内容は次のようになります。

{
  "appPackageName": "com.example.amazonsdkapivalidator3",
  "notificationType": "SUBSCRIPTION_MODIFIED_DEFERRED",
  "appUserId": "io9oFdzmCSMuKk_pp9pYccoIHRfc6kSAAYaNo51xZrg=",
  "receiptId": "PnkS4FtcuGLylYyc_vNjrN_ucm9hhaur43iCacRAd14=:3:11",
  "relatedReceipts": {},
  "timestamp": 1752584161620,
  "betaProductTransaction": false
}

relatedReceipts配列が空であることに注意してください。プランの変更が繰延の場合、Amazonは既存のレシートを維持し、次の請求サイクルに向けてプランの変更を予定します。

価格帯別の定期購入型アイテムのRVS

ほかのアプリの場合と同様に、価格帯別の定期購入型アプリのRVSをセットアップします。詳細については、 Appstore SDK IAP用レシート検証サービスを参照してください。

価格帯別の定期購入型アイテムを含むアプリの場合、RVSはキャンセルされた定期購入型アイテムについて、追加のcancelReasonレスポンスコードを使用します。

キャンセル理由のレスポンスコード

cancelReasonレスポンスコードは、商品のキャンセル理由を示す長整数です。指定できる値は、null、0、1、2、4です。各整数はキャンセル理由を表します(下表参照)。

cancelReasonコード 説明
null 購入はキャンセルされていません。
0 現時点ではキャンセル理由が特定されていないため、後で表示されます。
1 ユーザーが注文をキャンセルしました。
2 Amazonのシステムによって購入がキャンセルされました。たとえば、ユーザーが定期購入型アイテムの購入に使用した支払い方法が無効で、購入が猶予期間内に完了しませんでした。
4 定期購入型アイテムが、新しい定期購入型アイテムに置き換えられました。たとえば、ユーザーが新しい価格帯に移行した場合、元のレシートはキャンセルされ、新しいレシートが提供されます。

レスポンスフィールドの一覧については、RVSのドキュメントを参照してください。

RVSレスポンスの例

以下のコードは、完全なRVSレスポンスの例です。

{
 "autoRenewing":false,
 "betaProduct":true,
 "cancelDate":1400784371000,
 "cancelReason":4,
 "countryCode":"US",
 "freeTrialEndDate":null,
 "gracePeriodEndDate":null,
 "parentProductId":null,
 "productId":"sub1",
 "productType":"SUBSCRIPTION",
 "purchaseDate":1400784241000,
 "quantity":null,
 "receiptId":"JyGJ5iEtYgFu1ngnQovTqSIHQxR53GsMLqkR1tKLp5c=:3:11",
 "renewalDate":null,
 "term":"1 Week",
 "termSku":"sub1-weekly",
 "testTransaction":true
}

このcancelReasonは、アプリが別の価格帯に変更されたことにより、以前の定期購入型アイテムがキャンセルされたことを示しています。

RVSのその他の例については、Appstore SDK IAP用RVSの例を参照してください。


Last updated: 2025年7月22日