【Google】アプリ内課金の注文情報(orders)を取得する
Google Play のアプリ内課金には、購入によって発生した「注文(Order)」の情報を扱う API が用意されています。
定期購入や 1 回限りの購入の状態を見る API とは別に、注文という単位で取引の情報を取得できるのが特徴です。
このページでは、注文情報(orders)で何が取得できるのか、その全体像をまとめていきます。
アプリ内課金全体の中での位置づけは、以下のまとめページもあわせてご覧ください。
注文情報(orders)とは
注文情報(orders)は、Google Play 上で行われた 1 回の取引をまとめて表す情報です。
定期購入の状態は purchases.subscriptionsv2.get、1 回限りの購入の状態は purchases.products.get で確認します。
ですが、これらは「いま購入がどういう状態か」を見るための API です。
一方の注文情報は、金額・税・返金・購入者の所在地といった、取引そのものの情報を扱います。
注文情報(Order)に含まれる主な情報
注文情報を取得すると、Order というリソースが返ります。
Order には、おもに次のような情報が含まれます。
| フィールド | 内容 |
|---|---|
| orderId | 注文ID |
| purchaseToken | 購入時にユーザーの端末へ渡される購入トークン |
| state | 注文の状態 |
| createTime | 注文が作成された日時 |
| lastEventTime | 注文に最後の変更が加わった日時 |
| lineItems | 注文に含まれる個々の商品 |
| total / tax | 支払い総額と税額 |
| buyerAddress | 購入者の所在地情報(国・地域・郵便番号など) |
| orderHistory | 返金やキャンセルなど、注文に加わったイベントの履歴 |
1 つの注文に、金額・税・履歴までまとまっているのがポイントです。
注文の状態(state)
注文の state には、取引の進み具合を表す値が入ります。
| 状態 | 内容 |
|---|---|
| PENDING | 処理待ちの注文 |
| PROCESSED | 正常に処理された注文 |
| CANCELED | 処理される前にキャンセルされた注文 |
| PENDING_REFUND | 返金の処理待ちの注文 |
| PARTIALLY_REFUNDED | 一部返金が適用された注文 |
| REFUNDED | 全額返金が適用された注文 |
注文情報を取得する API
注文情報は、Google Play Developer API の orders リソースから取得します。
取得方法は、用途に応じて 2 つあります。
| メソッド | 内容 |
|---|---|
| orders.get | 注文IDを 1 つ指定して、その注文の詳細を取得する |
| orders.batchget | 注文IDを複数(1〜1000 件)指定して、まとめて取得する |
多数の注文を扱う場合は、1 件ずつ呼び出すよりも orders.batchget でまとめて取得する方が効率的です。
購入トークン系 API との使い分け
注文情報の API は、購入の状態を管理する API とは役割が異なります。
| API | 主な用途 |
|---|---|
| subscriptionsv2.get / products.get | 購入トークンから、購入が「いまどういう状態か」を確認する |
| orders.get / orders.batchget | 注文IDから、金額・税・返金・履歴といった取引情報を取得する |
コンテンツへのアクセス権を付与・剥奪する判断は、これまでどおり購入トークン系の API で行います。
注文情報は、その取引が「いくらで、いつ、どう返金されたか」を後から把握したいときに活躍します。
利用上の注意(クォータ)
注文情報の API 呼び出しは、Google Play Developer API のクォータ(利用上限)を消費します。
クォータはデフォルトで 1 日あたり 20 万回、1 回の呼び出しで取得できる注文は最大 1000 件です。
大量の注文履歴を同期したい場合は、orders.batchget でページサイズを大きめにとり、呼び出し回数を抑えるのがコツです。
まとめ
Google Play のアプリ内課金における注文情報(orders)について、全体像を紹介してきました。
注文情報は、購入の状態管理ではなく、金額・税・返金といった取引そのものを扱う API です。
比較的新しい API なので、今後このテーマでは、実際の取得例や活用方法を少しずつ追記していく予定です。
