2016-02-01 55 views
35

をプレイ私は領収書の検証を利用するようにしようとしていますアンドロイド:inApp購入時の領収書の検証Googleが

{ 
"orderId":"12999763169054705758.1371079406387615", 
"packageName":"com.example.app", 
"productId":"exampleSku", 
"purchaseTime":1345678900000, 
"purchaseState":0, 
"developerPayload":"bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ", 
"purchaseToken":"rojeslcdyyiapnqcynkjyyjh" 
} 

こと応答の下に私を与える製品グーグルを購入した後、私の支払いゲートウェイのためのGoogleウォレットを使用しています私はGoogle Developerのコンソールで、証明書キーをサービスアカウントごとに作成しました。しかし、私はGoogle Playストアから商品を購入した後、領収書の妥当性検査をどのように利用するのか混乱しています。

だから、誰もがInApp購入の領収書の検証を行う方法を私を助けてくださいすることができます。

+0

こんにちはBinil:

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(); 

をあなたは同様にサブスクリプションを照会することができます。ここ

Publisherシングルトンどのようにセットアップですあなたはサブスクリプションの購入のためにそれを完了しましたか? –

+0

その管理製品@Anshul Tyag –

+0

@BinilSurendran ..私の質問はあなたの質問とは異なりますが、私はアプリ内購入に使用された電子メールIDを知る必要があります。あなたは私のアプリでさらに参照するために必要なので、私はどのように私はその電子メールを得ることができます助けてください – Pallavi

答えて

87

GoogleはGoogle Play Developer APIを通じて領収書の有効性を確認していますが、API内で最も興味のある2つのエンドポイントはPurchases.products: getPurchases.subscriptions: getです。

Purchases.products: getは、オートアップデート以外の製品購入を確認するために使用できます。Purchases.subscriptions: getは、自動更新製品の購読を確認して再確認するためのものです。

いずれかのエンドポイントを使用するには、packageName,productIdpurchaseTokenが必要です。これらはすべて、購入時に受け取ったペイロードにあります。また、Google APIサービスアカウントを作成して取得できるaccess_tokenが必要です。最初のサービスアカウントを始めるために

デベロッパーコンソールAPI access settings pageをGoogle Playにアクセスし、新規プロジェクトの作成]ボタンをクリックします。

Create a new Google API Project

あなたは今、新しいリンクされたプロジェクトといくつかの新しいセクションが表示されます[サービスアカウント]セクションで、[サービスアカウントの作成]ボタンをクリックします。

Create a new Service Account

あなたは、あなたのサービスアカウントを作成する手順と情報ボックスが表示されます。 Google Developers Consoleへのリンクをクリックすると、新しいタブが生成されます。今

Open the Google Developers Console

、新しいクライアントIDを作成]をクリックしますオプションからサービスアカウントを選択して、クライアントIDを作成]をクリックします。 JSONファイルがダウンロードされます

Create a new Client ID

、これはあなたがaccess_tokenのためにそれを安全に保つために交換するために使用するあなたのJSONウェブトークンです。

次に、タブをGoogle Playデベロッパーコンソールに戻し、情報ボックスで[完了]をクリックします。新しいサービスアカウントがリストに表示されます。サービスアカウントのメールの横にある[アクセスを許可する]をクリックします。

Grant access

次に、このユーザの役割を選択して財政を選択し、[ユーザーの追加]をクリックします下。

Set the role to Finance

今、あなたのサービスアカウントを設定していると、それは領収書の検証を実行するために必要なすべてのアクセス権を持っています。次に、あなたのJWTをaccess_tokenのために交換しています。

これらのライブラリの使用方法については多くのドキュメントがありますが、をOAuth2スコープ、client_emailissuer、公開鍵private_keyから入手できます。パスフレーズnotasecretは、signing_keyに使用されます。

あなたが持ってたらaccess_tokenあなたは(少なくともあなたは上記の段落に同じプロセス、次の新しいものを要求することになるでしょう、その時点で次の時間のために)行ってもいいです。消耗品(非自動更新)購入のステータスをチェックするには

がします。http get要求を行います。あなたは200 HTTPレスポンスコードを取得する場合https://www.googleapis.com/androidpublisher/v2/applications/com.example.app/purchases/products/exampleSku/tokens/rojeslcdyyiapnqcynkjyyjh?access_token=your_access_token

、かんななどすべてが行って、あなたの購入が有効でした。 404はあなたのトークンが無効であることを意味するため、購入はおそらく不正行為の可能性が高いです。 401はアクセストークンが無効であることを意味し、403はサービスアカウントのアクセスが不十分であることを意味します。FinanceがGoogle Playデベロッパーコンソールのアクセスアカウントに対して有効になっていることを確認してください。

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を参照し、そのstartTimeMillisexpiryTimeMillisに注意し

サブスクリプションは、しかし、エンドポイントは次のようになります似ていますサブスクリプション期間に応じて変更されることがあります。

妥当性を確認してください!

+0

私は開発者コンソールに新しいユーザーを追加しました。ダウンロードしたファイルで受信確認を行う方法を私に教えてください.Mark Greenstock –

+0

@BinilSより具体的に言えば、あなたのコードを書こうとしているサーバサイドの言語は何ですか? –

+0

サーバー側でJavaを使用しています@Marc Greenstock –

7

マークの回答が優れています。私は、サーバーからGoogle Playサーバーに接続するときには、Google Play Developer API Client Library for Javaを使用するほうがはるかに簡単だと付け加えておきます。 ライブラリは自動的にauthトークンの更新を処理し、タイプセーフなAPIを提供するので、URLで悩む必要はありません。 、

SubscriptionPurchase sub = publisher.purchases().subscriptions().get(PACKAGE_NAME, sku, token).execute(); 
sub.getAutoRenewing(); 
sub.getCancelReason(); 
... 
+0

これはJavaサーバー上のコードですか、Android上で実行された後に任意のサーバーに呼び出されますか? – user

+0

PHPの場合この回答を確認するhttps://stackoverflow.com/a/46582528/1046909 – MingalevME

+0

優れた答え! – vanomart