開発者コンソール

消費型アイテムおよび非消費型アイテム用RVS

消費型アイテムおよび非消費型アイテム用RVS

Appstore請求サービス対応SDK用レシート検証サービス(RVS)を使用すると、アプリのユーザーが行った購入を検証できます。RVSの概要については、レシート検証サービスの概要を参照してください。

Appstore請求サービス対応SDK用RVSには、2つのREST APIがあります。1つは消費型アイテムと非消費型アイテムの購入を検証するもので、もう1つは定期購入型アイテムの購入を検証するものです。このページでは、消費型アイテムと非消費型アイテムの購入に使用されるREST APIのリクエストとレスポンスについて説明します。

purchases.products.get APIリクエスト

Appstore請求サービス対応SDKを通じて実行された消費型アイテムまたは非消費型アイテムの購入のレシートを検証するには、purchases.products.get APIを使用します。アイテムの購入に成功すると、Appstore請求サービス対応SDKからPurchaseオブジェクトが返されます。サーバー側で購入の検証を実行するには、このオブジェクトから購入トークンを抽出し、それをアプリパッケージ名、商品ID(IAPアイテムの作成に使用したSKU値)、共有シークレットと共にRVSサーバーに渡します。セキュリティ上の理由から、アプリサーバーからリクエストを行うときは、身元を確認するために共有シークレットを渡す必要があります。

リクエストは以下の形式を使用します。

https://appstore-sdk.amazon.com/version/{operation-version-number}/get/developer/{shared-secret}/applications/{package-name}/purchases/products/{product-id}/tokens/{token}

中かっこには、リクエストパラメーターのプレースホルダーが含まれています。リクエストでは、検証対象のトランザクションに応じた値に置き換えてください。次の表は、リクエストパラメーターの説明をまとめたものです。

リクエストパラメーター 説明
operation-version-number purchases.products.getオペレーションのバージョン番号。このバージョン番号は、Appstore請求サービス対応SDKのバージョン番号とは関係ありません。現在のpurchases.products.getのバージョン番号は「1.0」です。
shared-secret リクエストを発行した開発者を識別するための共有シークレット。共有シークレットは、開発者コンソールの [共有キー] ページ(https://developer.amazon.com/sdk/shared-key.html)で確認できます。
package-name アプリ内課金アイテムが販売されたアプリのパッケージ名。「com.amazon.sample.iap.consumable」などです。パッケージ名は、getApplicationContext().getPackageName()を呼び出してアプリから取得することも、AndroidManifest.xmlファイルで確認することもできます。
product-id 開発者コンソールでアプリ用に作成したアプリ内課金アイテムのSKU。「iapsamplev2.gold_medal」などです。定期購入型アイテムの場合は、期間SKUを使用します。Purchase.getSkus().get(0)メソッドを使用して、Purchaseオブジェクトから商品IDを取得できます。
token PurchaseオブジェクトのgetPurchaseToken()メソッドから取得した、購入を一意に識別するID。

purchases.products.get APIレスポンス

purchases.products.get APIは、RESTful JSON APIインターフェイスを提供します。ベストプラクティスとして、RVSサーバーからJSONレスポンスを読み取るには、OkHttp(英語のみ)やApache HttpClient(英語のみ)などのJSONパーサークラスを使用することをお勧めします。

トランザクションを検証するリクエストをRVSサーバーに送信すると、RVSサーバーから、リクエストが成功したかどうかを示すレスポンスコードが返されます。成功した場合、JSONレスポンスにはトランザクションに関する情報が含まれています。

以下は、リクエストに成功した場合のレスポンスの例です。

{
    "cancelDate": null,
    "cancelReason": null,
    "kind": "androidpublisher#productPurchase",
    "parentProductId": null,
    "productId": "com.amazon.iapsamplev2.expansion_set_1",
    "productType": "ENTITLED",
    "purchaseState": 0,
    "purchaseTimeMillis": "1399070753509",
    "purchaseToken": "mINy5VRd1FqjVOz-WBtTqw9FBGWhnuVx07kzTBMR600=:2:11",
    "purchaseType": null,
    "quantity": 1,
    "testTransaction": false
}

レスポンスコードとエラーメッセージ

レシート検証サービスは、応答として次のいずれかのコードを返します。各コードは、検証チェックの結果を示しています。

HTTPレスポンスコード 説明
200 購入は有効です。
400 購入トークンまたは商品IDが無効です。
401 開発者シークレットが無効か、指定された購入トークンと一致しません。
404 パッケージ名が無効か、指定された購入トークンと一致しません。
410 このreceiptIdで表されるトランザクションは無効になりました。キャンセルされたレシートとして処理してください。
429 リクエストがスロットリングされました。呼び出しの頻度を減らして、しばらくしてから再試行してください。
500 内部サーバーエラーが発生しました。

成功したトランザクションのレスポンスフィールド

次の表では、成功したトランザクションのpurchases.products.getレスポンスに含まれるフィールドについて説明します。一部のフィールドの名前とデータ型は、Googleのpurchases.products.get APIと同じです。これに該当するフィールドは、Googleのpurchases.products.get APIと一致するフィールドの下に記載されています。その他のフィールドの下に記載されたフィールドは、Google APIとは異なるもので、Amazonアプリストアによって提供される購入の詳細を示します。

フィールド データ型 説明
Googleのpurchases.products.get APIと一致するフィールド
kind 文字列 androidpublisherサービスのProductPurchaseオブジェクトを表します。
purchaseTimeMillis 文字列 商品の購入時刻。エポック(1970年1月1日)からのミリ秒数で表されます。
purchaseState 整数 注文の購入ステータス。有効な値は次のとおりです。
0 - 購入済み
1 - キャンセル済み
purchaseType 整数 アプリ内課金アイテムの購入タイプ。このフィールドは、標準のアプリ内課金フローを使用して行われた購入でない場合にのみ設定されます。有効な値は次のとおりです。
0 - テスト(ライセンステストアカウントから購入された場合)
purchaseToken 文字列 購入の一意の識別子。
productId 文字列 アプリ内でこのアイテムに対して定義したSKU。
quantity 整数 購入された数量。常にnullまたは1になります。
その他のフィールド
parentProductId 文字列 null。将来使用するために予約されています。
productType 文字列 購入された商品のタイプ。有効な商品タイプは、CONSUMABLE(消費型アイテム)およびENTITLED(非消費型アイテム)です。
cancelDate 長整数 購入がキャンセルされた日付。時間はミリ秒数で表されます。有効なレシートでは、キャンセル日はnull値になります。キャンセル日フィールドがnullでない場合、その値は、Amazonカスタマーサービスが購入をキャンセルした日付を表します。
cancelReason 整数 商品がキャンセルされた理由を示します。有効な値は、null012のいずれかです。それぞれの整数はキャンセルの理由を表します。
null - 購入はキャンセルされていない。
0 - 現時点ではキャンセル理由が特定されていないため、後で表示される。
1 - ユーザーが注文をキャンセルした。
2 - Amazonのシステムによって購入がキャンセルされた。このコードは、Amazonカスタマーサポートがユーザーのリクエストに応じて注文をキャンセルした場合にも返されます。
testTransaction ブール型 この購入が、Amazonによる公開・テストプロセスの一部として実行されたものかどうかを示します。

purchases.products.get APIでサポートされないフィールド

Google Play Developer APIで利用できる以下のフィールドは、Appstore請求サービス対応RVS APIではサポートされません。

  • consumptionState
  • regionCode
  • orderId
  • developerPayload
  • acknowledgementState
  • obfuscatedExternalAccountId
  • obfuscatedExternalProfileId

このページの一部は、Googleによって作成・共有されている文書を基に編集したもので、Creative Commons 4.0 Attribution Licenseに記載されている条件に従って使用しています。ソースはhttps://developers.google.com/android-publisher/api-ref/rest/v3/purchases.products/getおよびhttps://developers.google.com/android-publisher/api-ref/rest/v3/purchases.productsです。


Last updated: 2024年10月14日