製品googleを購入した後、支払いゲートウェイにGoogleウォレットを使用しています。
{
"orderId":"12999763169054705758.1371079406387615",
"packageName":"com.example.app",
"productId":"exampleSku",
"purchaseTime":1345678900000,
"purchaseState":0,
"developerPayload":"bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ",
"purchaseToken":"rojeslcdyyiapnqcynkjyyjh"
}
私はReceipt Validationを使用して、Google Playが新しく導入しました。GoogleDeveloper Consoleでcertificate keyをPermissionのサービスアカウントで作成しました。しかし、Google Playストアから製品を購入した後、領収書検証を利用する方法がわかりません。
だから誰でも領収書の検証 of InApp
購入の方法を教えてください。
Googleは Google Play Developer API を介してレシート検証を提供します。APIには、最も関心のある2つのエンドポイントがあります: Purchases.products:get および Purchases。サブスクリプション:get 。
Purchases.products: get
は、自動更新されていない製品の購入を確認するために使用できます。Purchases.subscriptions: get
は、自動更新された製品のサブスクリプションを確認および再確認するためのものです。
いずれかのエンドポイントを使用するには、packageName
、productId
、purchaseToken
を知っている必要があります。これらはすべて、購入時に受け取ったペイロードに含まれています。また、Google APIサービスアカウントを作成して取得できるaccess_token
も必要です。
サービスアカウントの使用を開始するには、まずGoogle Playデベロッパーコンソール APIアクセス設定ページ に移動し、[新しいプロジェクトを作成]ボタンをクリックします。
これで、新しいリンクプロジェクトといくつかの新しいセクションが表示され、[サービスアカウント]セクションで[サービスアカウントの作成]ボタンをクリックします。
サービスアカウントの作成手順が記載された情報ボックスが表示されます。 Google Developers Consoleへのリンクをクリックすると、新しいタブが表示されます。
[新しいクライアントIDの作成]をクリックし、オプションから[サービスアカウント]を選択して、[クライアントIDの作成]をクリックします。
JSONファイルがダウンロードされます。これはaccess_token
との交換に使用するJSON Webトークンなので、安全に保管してください。
次に、タブをGoogle Playデベロッパーコンソールに切り替え、情報ボックスで[完了]をクリックします。リストに新しいサービスアカウントが表示されます。サービスアカウントのメールの横にある[アクセスを許可]をクリックします。
[このユーザーの役割を選択してください]の下で、[財務]を選択し、[ユーザーの追加]をクリックします。
これでサービスアカウントが設定され、受信確認を実行するために必要なすべてのアクセス権が与えられました。次は、JWTをaccess_tokenに交換します。
access_token
は1時間の交換後に期限切れになるため、これを処理するためにサーバーコードが必要であり、Googleはこれを処理するために多くの言語でいくつかのライブラリを提供しています(完全ではありません):
これらのライブラリの使用方法に関するドキュメントはたくさんあるので詳細には触れませんが、OAuth2スコープとしてhttps://www.googleapis.com/auth/androidpublisher
を使用し、JWTからclient_email
を使用したいことを述べます。 issuer
およびprivate_key
から取得できる公開鍵とパスフレーズnotasecret
はsigning_key
に使用されます。
access_token
が得られたら(少なくとも次の1時間は、上記の同じプロセスに従って新しいものを要求します)。
消耗品(非自動更新)の購入のステータスを確認するには、http get
リクエストを行って:https://www.googleapis.com/androidpublisher/v2/applications/com.example.app/purchases/products/exampleSku/tokens/rojeslcdyyiapnqcynkjyyjh?access_token=your_access_token
200のHTTP応答コードを受け取った場合、すべてが計画どおりに進み、購入は有効でした。 404はトークンが無効であることを意味するため、購入は不正行為である可能性があります。 401はアクセストークンが無効であることを意味し、403はサービスアカウントに十分なアクセス権がないことを意味します。GooglePlayデベロッパーコンソールでアクセスアカウントに対してFinanceを有効にしたことを確認してください。
200からの応答は次のようになります。
{
"kind": "androidpublisher#productPurchase",
"purchaseTimeMillis": long,
"purchaseState": integer,
"consumptionState": integer,
"developerPayload": string
}
各プロパティの説明については、 https://developers.google.com/Android-publisher/api-ref/purchases/products をご覧ください。
サブスクリプションは似ていますが、エンドポイントは次のようになります。
https://www.googleapis.com/androidpublisher/v2/applications/packageName/purchases/subscriptions/subscriptionId/tokens/token?access_token=you_access_token
そして、応答には次のプロパティが含まれている必要があります。
{
"kind": "androidpublisher#subscriptionPurchase",
"startTimeMillis": long,
"expiryTimeMillis": long,
"autoRenewing": boolean
}
プロパティの説明については https://developers.google.com/Android-publisher/api-ref/purchases/subscriptions を参照し、startTimeMillis
およびexpiryTimeMillis
が対象になることに注意してくださいサブスクリプションの期間に応じて変更します。
幸せな検証!
マークの答えは素晴らしい。サーバーからGoogle Playサーバーに接続するときに Java用Google Play開発者APIクライアントライブラリ を使用すると、より簡単になります。ライブラリは自動的に認証トークンの更新を処理し、タイプセーフAPIも提供するため、URLをいじる必要はありません。
Publisher
シングルトンを設定する方法は次のとおりです。
httpTransport = GoogleNetHttpTransport.newTrustedTransport();
jsonFactory = JacksonFactory.getDefaultInstance();
credential = GoogleCredential.fromStream(getClass().getResourceAsStream("/path/to/your/key.json")).createScoped(Collections.singleton(AndroidPublisherScopes.ANDROIDPUBLISHER));
publisher = new AndroidPublisher.Builder(httpTransport, jsonFactory, credential).setApplicationName(APP_NAME).build();
次のコードは、製品の購入を照会します。
ProductPurchase product = publisher.purchases().products().get(PACKAGE_NAME, sku, token).execute();
Integer purchaseState = product.getPurchaseState();
product.getPurchaseTimeMillis();
product.getConsumptionState();
product.getDeveloperPayload();
同様に、サブスクリプションを照会できます。
SubscriptionPurchase sub = publisher.purchases().subscriptions().get(PACKAGE_NAME, sku, token).execute();
sub.getAutoRenewing();
sub.getCancelReason();
...
この答えは素晴らしいです。指示に従うときに発生したもう1つの問題は、サービスアカウントがGoogle Playコンソールに表示されなかったことです。最終的に、この解決策を見つけることができました: 作成後にサービスアカウントがGoogleコンソールに表示されない
基本的に、Google API ConsoleのIAMにアクセスして新しいサービスアカウントを追加すると、Google Play Consoleに表示されます。 スクリーンショット