LoginSignup
20

More than 5 years have passed since last update.

ポイントカードやクーポンを半日でAndroid Pay対応する - Save to Android Pay APIガイド

Last updated at Posted at 2017-09-27

まえがき

昨年12月に日本でもローンチしたAndroid Pay。メインの決済機能の他にも、ポイントカード事業者など向けにSave to Android Pay APIを提供している。このAPIを使うと(審査さえ通れば)誰でも、「ユーザが自社のポイントカードをAndroid Payに保存する」ような機能を実装できる。最近だとTカードやDocomoのdポイントが対応していた。

ユーザ目線での具体的な流れとしては以下のような感じ。

  1. ポイント事業者からのメールやWebサイトなどで "Android Payに保存"ボタンをクリックする
  2. Android Payがあればアプリが、そうでなければブラウザが開いてカード情報がGoogleサーバに保存される
  3. カードが保存されたあとは、Android Payアプリ上でバーコード表示したり、ポイント残高を確認したりできる

Screen Shot 2017-08-30 at 8.59.16 PM.png

去年のGoogle I/Oでも紹介してたりしたのだけど、日本語の記事が見当たらないようなので、APIを使ってみた様子を紹介してみる。
(API利用申請の返事を待ってる時間を除けば)半日ほどで保存ボタンを実装するところまでいけた。

Android Payは日本でも一部の端末にプレインストールされ始めている。

事前準備

API利用申請

https://developers.google.com/save-to-android-pay/ から "SIGN UP"ボタンをクリックする。会社名や利用の目的などを聞かれるので適宜回答する。数日後に、API利用に必要な情報がメールで送られてくるはず。以下のプロジェクト作成のステップに進む前に、この申請が承認されるのを待つ必要がある。

プロジェクトの作成

https://developers.google.com/save-to-android-pay/guides/basic-setup
に従ってGoogle API Consoleからプロジェクトの作成、APIの利用設定、OAuthの設定などを行う。

概念の理解: ClassとObject

先に進む前に簡単に概念を整理していく。詳しくは公式サイトを読むのが良い。

Save to Android Pay APIではClassという概念でポイントカードプログラムなどを扱う。

作成出来るClassは以下の三種類

  1. Loyalty Card (ポイントカード、会員証)
  2. Gift Card (ギフトカード、商品券)
  3. Offer (クーポン、割引券)

Classはプログラムで共通の要素(ポイントプログラム名称など)を規定し、ユーザそれぞれに個別の要素(会員番号など)を規定するのがObjectとなる。

また、特定の会員に限定したクーポンなどのためにLoyalty Linked Offerというものも提供されているようだ。

今回はLoyalty Cardを作成してみることにする。

実装編

とりあえずサンプルプロジェクトを動かす

"Android Payに保存"ボタンを実装する方法は二通りある。

  1. JavaScriptをサイトに埋め込む
  2. 特別な形式のリンクを作成する

今回はとりあえず試してみることが目的なので、まず(1)のJavaScript方式を、Googleが提供しているサンプルプロジェクトを利用して使ってみる。
サンプルプロジェクトはJava, Python, C#, Ruby, PHPなどなどで提供されているが、積極的にサポートされているのはJava, PHP, Pythonの3つぽい
今回はJavaのプロジェクトを利用する。

git clone https://github.com/android-pay/s2ap-quickstart-java.git

でプロジェクトを落としてきて、秘密鍵を src/main/resources にコピーした後、src/main/webapp/WEB-INF/web.xmlをよしなに更新する。

mvn appengine:devserver

でサーバを起動し、 http://localhost:8080/ にアクセスする。

Screen Shot 2017-09-05 at 10.02.27 PM.png

Step1のボタンをクリックするとサンプル Loyalty Class が保存され、その後Step2のボタンを押すと、会員証のプレビューが表示され、さらにボタンをクリックすると会員証がAndroid Payに保存される。

sketch-1504675021984.png

メールに埋め込めるリンクを作成する

サンプルプロジェクトも無事動いたので、冒頭のスクリーンショットにあったような、Eメールに埋め込めるような形でのボタンを作成していく。Eメールクライアントでは通常JavaScriptは使えないので、上で説明した(2)リンク形式を使うことになる。いずれにせよJson Web Token (JWT)形式でエンコードされたLoyalty Card情報を取得することが肝になる。

新しいClassを作成する

Loyalty Classは先に示したようにAPI経由で作成することも出来るが、最初に一度だけ作成すれば良いものなので、Android Pay Merchant Console経由で作成するのが良さそう。Android Pay Merchant Console にアクセスし、classesから"CREATE CLASS"を選択する。

ここで、Issuer NameおよびProgram Nameは後にユーザ向けに表示されるのでそれを考慮して決めるのが良い。Class IDはユニークでさえあればなんでも良い。

Class status は開発中は DRAFT にしておき、開発が終了したら UNDER_REVIEW にせよとのことらしいが、実際は最初から UNDER_REVIEW にしてもいいようなきがする。 DRAFT 状態のClassは開発用のアカウントからしかアクセス出来ないので、もし情報リークなどが気になるならDRAFTで開発すると良い。

sketch-1504675970979.png

JWTを取得する

先のサンプルプロジェクトのsrc/main/java/com/google/wallet/objects/verticals/Loyalty.javaおよびsrc/main/webapp/WEB-INF/web.xmlをよしなに編集する。ここで上ですでに保存したものとは違うclassIdおよびobjectIdを指定すること。

ふたたびサーバを立ち上げ、http://localhost:8080/jwt?type=loyaltyにアクセスすると、このloyalty cardのJWTが手に入る。

ところでJWTはただの署名付きJSONで特に暗号化などはされていないので、https://jwt.io/ みたいなサイトに突っ込むとデコードして中見を見ることが出来る。

sketch-1504673588866.png
(モザイクをうまくかけれなかった結果異次元なかんじになった)

ともあれ、生成したJWTを利用して、以下のようなURLを作成する。

https://www.android.com/payapp/savetoandroidpay/{jwt_generated}

これをメールに埋め込むと、以下のような事ができる。

output.gif

という訳でサンプルコードほぼそのままで動かすことができた。ユーザが保存してくれたあとは、REST APIでポイント残高などを更新することができる。

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
20