[解決済み] Android : アプリ内課金レシート検証 google play
質問
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 はこれを処理するためのライブラリを多くの言語で提供しています (リストは完全ではありません)。
- Ruby。 https://github.com/google/google-api-ruby-client
- Node.js。 https://github.com/google/google-api-nodejs-client
- Javaです。 https://github.com/google/google-api-java-client
- Pythonです。 https://github.com/google/google-api-python-client
これらのライブラリの使用方法については多くのドキュメントがあるので、詳しくは説明しませんが、あなたが使用したいのは
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
を参照してください。
startTimeMillis
と
expiryTimeMillis
は、購読期間に応じて変更されることがあります。
検証をよろしくお願いします。
関連
-
[解決済み] BottomSheetDialogFragmentの状態をexpandedに設定する。
-
[解決済み] プログラムでソフトキーボードを開く
-
[解決済み] handler.postDelayed()を停止する。
-
[解決済み] アプリ内課金テスト:android.test.purchased already owned
-
[解決済み] Gmailの3分割アニメーションシナリオの完全動作サンプル?
-
[解決済み] TabLayoutに対応したandroidデザインでタブテキストのフォントを変更する
-
[解決済み] Androidのadb logcatでTAG名で特定のメッセージを除外する方法は?
-
[解決済み] Android端末がHDPI画面かMDPI画面かを確認する方法は?
-
[解決済み] EditTextの右側のDrawableにonClickListenerを設定する [重複] [重複
-
[解決済み] proguard hell - 参照されているクラスが見つかりません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] サーバーサイドでアンドロイドアプリの購入を確認する方法 (google play in app billing v3)
-
[解決済み] AndroidにおけるViewPager2の適切な実装
-
[解決済み] データベースでリサイクルビューを使用する
-
[解決済み] Gmailの3分割アニメーションシナリオの完全動作サンプル?
-
[解決済み] RecyclerViewのアイテムに波及効果を追加する
-
[解決済み] アダプタからActivityメソッドを呼び出す
-
[解決済み] BottomNavigationViewを新しいNavControllerで使用する際に、フラグメントを生かす方法はありますか?
-
[解決済み] Androidの環境設定。ユーザーが環境設定画面を使用していない場合、デフォルト値を読み込むにはどうすればよいですか?
-
[解決済み] Android: xml リソースからの整数値
-
[解決済み] 文字列リソースにHTML?