Android Voided Purchasesを使ってみた。

@wkddn50 です。

初めてQiitaを書きますがよろしくお願いします。

Google Playから [Voided Purchases API](https://developers.google.com/android-publisher/voided-purchases)が追加されまして、どのユーザーが払い戻ししたかをわかるようになりましたね。

自分の場合、v1.1を既に使っていたので v2のapiを使うためには何かを変更しないと行けないと思っていましたが、Voided Purchases APIを使うのはそもそも リンクされているプロジェクトになるため、アップデートとかは必要ではありませんでした。

そこら辺の作業を 既に projectはある前提で さくっとやってみようと思います。

## リンクされているプロジェクトの確認

[Google Play Console](https://play.google.com/apps/publish/)にはいると 自分のアプリが見えると思います。
ここで、「設定」->「APIアクセス」をおします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/83289/7123a7f5-b541-8f7c-92ff-820760b1cd37.png)

こういう画像が見えると思います。
Voided Purchases APIは v2から入っているapiなので
リンク済みプロジェクトでは無い場合、持っているトークンで接続しようとすると下記のようなエラーがでますので 注意してください。

※ Voided Purchases 以外は v2 APIをまだ触ってないので全部がそうなのかわよくわかっておりませんのでご了承お願いします。

```
{
 "error": {
  "errors": [
   {
    "domain": "androidpublisher",
    "reason": "projectNotLinked",
    "message": "The project id used to call the Google Play Developer API has not been linked in the Google Play Developer Console."
   }
  ],
  "code": 403,
  "message": "The project id used to call the Google Play Developer API has not been linked in the Google Play Developer Console."
 }
}
```

ちなみに リンクされてない場合は 下記のような感じになります。
自分はここで プロジェクトは多いがリンクは一個しかできなかったから 「リンクはどうするんだろう？」でかなりハマっていました(笑)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/83289/4cc705b5-9a4d-197e-03f7-a51481672191.png)

自分のgoogle accountの [API MANAGER](https://console.developers.google.com/apis/dashboard) プロジェクトで IDが apiから始まるものが出るらしいです。 おそらく昔google play consoleから作ったものだと思います。

新規プロジェクトでやってみようかなと思いますので
下記にある `新しいプロジェクトを作成`を押しましょう。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/83289/820df9e4-74aa-8f3d-9490-bb0679c08784.png)
このような プロジェクトが生成されます。
先リストにあったのと名前は同じなんですが、[API MANAGER](https://console.developers.google.com/apis/dashboard) を見てみると IDが違うので別物です。

押せそうな色になっている `Google Play Android Developer`を押してみましょう。
API Managerに移動し、押したプロジェクトが選択されていることを確認できます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/83289/b8db647b-8465-7c23-b25b-a59b4e239a52.png)

名前がわかりづらいので 変更したいと思います。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/83289/1396f6b7-f9b7-e7b9-2f77-8bc4ca56c696.png)

右上にある開けそうなボタンを押してみると`プロジェクトを設定`ボタンがあります。

押してみると プロジェクトの名が出て、変更できることを確認できます。
今回は `giita project`にします。
保存すると名前が変わったことを確認できました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/83289/66c72568-97a6-8406-7d82-84119be04f25.png)

これで[Google Play Console](https://play.google.com/apps/publish/)から「API アクセス」を見てみると リンクされているプロジェクトの名前が
`qiita project`になっていることがわかります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/83289/f6414e7b-a4d2-166f-1e46-242306f70140.png)

## Google developer apiの設定
今回使うものは [Google Play Developer API](https://developers.google.com/android-publisher/)なので 先の生成時に既に追加されていると思います。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/83289/4b49b84d-cc4d-bb65-3f03-4bc040a07157.png)

なかった場合は ライブラリから「google play developer api」などを検索してみると出てくると思いますので 有効にして上げましょう。

apiは有効になりました。ただ、認証情報がないと使えないと思いますので
認証情報を追加しようと思います。

## 認証情報の設定
※ OAuthに関してはググればたくさん出るのでそんな詳しくは書いておりません。

認証情報は「API アクセス」からある程度できるので「API アクセス」に戻ります。
「リンク済みプロジェクト」の下に「OAuth クライアント」があります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/83289/388478c5-f891-b627-5aeb-1de2387725d5.png)

OAuthクライアントを作成を押してみると
クライアントIDがでて、シークレットはGoogle Developers Consoleで表示が出ます。

中身を見てみると分かりますと思いますが リンクされたプロジェクトのOAuth 2.0 クライアント ID/SECRETを作ってくれたのです。

ここで `「クライアントID」、「クライアントシークレット」`が
得ることができます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/83289/e4137a39-24e2-402a-e0c2-32f56274efec.png)


後は`「リダイレクトURI」` を取得しましょう。
何も設定していなければ JSONダウンロードのなかに redirect_uriが入っているのを使えばいいです


## Refresh Tokenをもらう
Access Tokenをもらうためまずは Refresh Tokenをもらう必要があります。
```
https://accounts.google.com/o/oauth2/auth?
client_id={クライアント ID }&
redirect_uri={ リダイレクト URI }&
scope=https://www.googleapis.com/auth/androidpublisher&
response_type=code&
approval_prompt=force&
access_type=offline
```

これは 1回やっておけば 次からはやらなくていいです。

## Access Tokenをもらう
APIを使うために必要な Access Tokenです。
```
curl -k -d client_id={クライアント ID} 
-d client_secret={クライアント Secret} 
-d redirect_uri={ リダイレクト URI } 
-d grant_type=refresh_token 
-d refresh_token={ リフラッシュトークン } https://accounts.google.com/o/oauth2/token | jq .
```

## VoidedPurchasesの APIを使う

```
curl https://www.googleapis.com/androidpublisher/v2/applications/{見たいプロジェクト}/purchases/voidedpurchases
?access_token={ 上から取ってきた アクセストークン}
```

これでようやくできますー

```
{
 "voidedPurchases": [
  {
   "kind": "androidpublisher#voidedPurchase"
   "purchaseToken" : "XXX : 課金する時の情報にあるトークンですこれでユーザーの特定ができます。"
   "purchaseTimeMillis" : "課金した時間"
   "voidedTimeMillis" : "払い戻した時間" 
  }
 ]
}
```


ここまでです。
思ったより長くなりましたが、ご覧になっていただきありがとうございましたー