1. ホーム
  2. android

[解決済み] Android : アプリ内課金レシート検証 google play

2022-11-12 01:44:01

質問

Googleウォレットを決済に使っているのですが、製品を購入した後、Googleから以下のような返答がありました。

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

を利用しようとしています。 領収書バリデーション を使おうとしているのですが、Google Developer consoleで 証明書キー をPermissionのService Accountで作成しました。しかし、Google Play-storeで商品を購入した後、Receipt Validationをどのように利用すればいいのか困っています。

そこで、どなたか教えていただけないでしょうか。 領収書の検証 InApp 購入する。

どのように解決するのですか?

Google では、領収書の検証を行うために Google Play 開発者向け API で、その API 内には、最も関心のある 2 つのエンドポイントがあります。 Purchases.products:取得 購入.購読: 取得 .

Purchases.products: get は、自動更新でない製品の購入を確認するために使うことができます。 Purchases.subscriptions: get は自動更新の製品サブスクリプションの検証および再検証のために使用されます。

どちらのエンドポイントも使用するには packageName , productId , purchaseToken は、購入時にお渡しするペイロードに含まれています。また access_token が必要で、これは Google API サービスのアカウントを作成することで取得できます。

サービスアカウントを取得するには、まず Google play の開発者コンソールにアクセスします。 APIアクセス設定ページ にアクセスし、「新しいプロジェクトを作成する」ボタンをクリックします。

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

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

新しいクライアントIDの作成」をクリックし、オプションから「サービスアカウント」を選択して「クライアントIDの作成」をクリックします。

JSON ファイルがダウンロードされ、これが JSON ウェブ トークンになります。 access_token との交換に使用するJSON Web Tokenですので、大切に保管してください。

次に、タブを切り替えて Google play Developer コンソールに戻り、情報ボックスの [完了] をクリックします。リストに新しいサービス アカウントが表示されるはずです。サービス アカウントの電子メールの横にある [アクセスを許可] をクリックします。

次に、「このユーザーの役割を選択する」で「財務」を選択し、「ユーザーの追加」をクリックします。

これでサービスアカウントが設定され、レシート検証を行うために必要なすべてのアクセス権が付与されました。次は、JWTをaccess_tokenに交換します。

このとき access_token は交換後 1 時間で期限切れとなるため、これを処理するサーバーコードが必要です。Google はこれを処理するためのライブラリを多くの言語で提供しています (リストは完全ではありません)。

これらのライブラリの使用方法については多くのドキュメントがあるので、詳しくは説明しませんが、あなたが使用したいのは https://www.googleapis.com/auth/androidpublisher を OAuth2 のスコープとして使用したいこと、そして client_email を JWT の 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のレスポンスコードが返ってきた場合は、すべてが計画通りに進み、購入が有効であったことを意味します。404 は、トークンが無効であることを意味し、購入は詐欺の可能性が高いです。401はアクセストークンが無効であることを意味し、403はサービスアカウントへのアクセスが不十分であることを意味します。 ファイナンス を指定すると、Google Play Developer コンソールのアクセスアカウントになります。

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 は、購読期間に応じて変更されることがあります。

検証をよろしくお願いします。