30
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Google Play Developer API を使用してAndroidのin-app billingのレシート検証を行う(メモ)

Posted at

Google Play Developer APIを使ってレシート検証

※完全に個人的な備忘録のため、内容は新しくないし、そもそも書いている時点でもベストなものでない可能性があります。

前提

・in-app billingにて消費型アイテムを販売した際のレシート情報が正しいかを検証する
・レシート情報の取得等は既に実装できている

準備

  1. デベロッパーコンソールに契約アカウントでサインインし、デベロッパーアカウント -> APIアクセス
  2. Google Play Android Developerのリンクを行う
  3. OAuth クライアントを作成する
  4. Google Developers Consoleにて作成したクライアントのクライアントID、シークレットを確認

OAuth認証

ブラウザにて下記URLにアクセス

https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/androidpublisher&response_type=code&access_type=offline&redirect_uri=http://localhost&client_id=<準備.4で確認したクライアントID>

Googleのアカウントリンク画面が出るので許可する

http://localhost/?code=4/AACyzBvuCgBZQKv8VKPvCQl5Szt6U47GClAPLk0qTuItTUmUoFKJWqUfSyJN2bTCqLDXXXXXXXXXXXXXXXXXXXX#
のようなURLにリンクされるので、code=の部分を取得

アクセストークン取得

POSTリクエストのためCurlで実行


$ curl -v -X POST 'https://accounts.google.com/o/oauth2/token' -d 'grant_type=authorization_code&code=<上記OAuth認証で取得したCode#まで>&client_id=<準備.4で確認したクライアントID>&client_secret=準備.4で確認したクライアントシークレット>&redirect_uri=http://localhost'

image.png

上記のような結果が返るので、access_token / refresh_token を確認しておく

レシート検証

やっと本題

レシート情報から、
・packageName
・productId
・purchaseToken
を確認しておく

とりあえずまずは検証を手動で。。。

$ curl -v 'https://www.googleapis.com/androidpublisher/v3/applications/<packageName>/purchases/products/<productId>/tokens/<purchaseToken>?access_token=<アクセストークン取得で取得したaccess_token>'

image.png

上記のような結果が返ってきたらOK

結果の詳細は https://developers.google.com/android-publisher/api-ref/purchases/products#resource
要するに、
consumptionState:1
developerPayload:決済時に送信したペイロードと一致しているか
purchaseState:0
あたりを確認して検証したら良さそう

ここまで確認したら、同様の処理を実装する訳ですが、
問題はaccess_tokenが取得から1時間で有効期限切れしてしまいます。

access_tokenの更新

$ curl -v -X POST 'https://accounts.google.com/o/oauth2/token' -d 'grant_type=refresh_token&client_id=<クライアントID>&client_secret=<クライアントシークレット>&refresh_token=<アクセストークン取得時に確認したrefresh_token>'

image.png

新しいaccess_tokenが取得できます

実装フロー

上記を踏まえて

  1. レシート情報の取得
  2. access_tokenの更新
  3. レシート検証
  4. アイテム付与

という流れを実装することで良さそうです。

参考

https://groups.google.com/forum/#!topic/android-group-japan/jaaIGAl2lPE
http://d.hatena.ne.jp/fkm/20130504
https://developers.google.com/android-publisher/api-ref/purchases/products

30
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?