Android向けライブラリwebpay-token-androidを公開しました

Android向けに、クレジットカード情報からWebPayのTokenオブジェクトを作成するライブラリを公開しました

Androidアプリケーション上で、端末が直接WebPayとクレジットカード情報をやり取りし、代替となるトークンを作成することで サーバサイドにはクレジットカードの情報を送信せずに決済クライアントのトークン決済を簡便なコードで実現可能になります。

images

本ライブラリでは

  • ボタンを設置するだけで、処理を全てライブラリで行う方式
  • アプリケーションから独自にカード情報入力ダイアログを表示する方式
  • ユーザインタフェースはアプリケーションで独自に実装し、通信だけを行う方式

の3種類の方式が提供されており、実装時のニーズに合わせて使い方を選択することが可能です。

また、これらのデモを試すことができる、サンプルアプリケーションをGoogle Playにて公開しています

サンプルアプリケーションには、クレジットカードを端末のカメラで撮影することでカード情報の入力を実現するcard.ioと組み合わせた例も含まれています。

インストール

ソースコードに加えてMaven Centralで公開しているので、 repositoriesmavenCentral()を指定している前提で、アプリケーションのbuild.gradle

1
2
3
dependencies {
  compile 'jp.webpay.android:webpay-token:1.0.0@aar'
}

と記述することで利用可能となります。

利用方法

以下3種類の利用方法について紹介します。

A. トークン化に関する処理を全てを担うボタン

FrameLayoutを埋め込み、Activity上でそのidを指定することで、 クレジットカード情報のトークン化を行うユーザインタフェースおよび、その成功可否に合わせて文言が切り替わるボタンを利用出来ます。

動作としては、ウェブブラウザ向けに提供している、CheckoutHelperとほぼ同様のものとなります。

  1. ActivityでWebPayTokenCompleteListenerのインタフェースを実装する

    + public class MyFragmentActivity implements WebPayTokenCompleteListener {
    - public class MyFragmentActivity {
    
    @Override
    public void onTokenCreated(Token token) {
        // トークンが作成された際の処理
    }
    
    @Override
    public void onCancelled(Throwable lastException) {
        // トークンを作成せずにダイアログを閉じた際の処理
    }
    
  2. カード情報入力を行うためのボタンを入力

    <FrameLayout
        android:id="@+id/webpay_token_button_fragment"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    
  3. ActivityのonCreate()で2.のFrameLayoutWebPayTokenFragmentのインスタンスを指定してreplace()する

    WebPayTokenFragment tokenFragment =
        WebPayTokenFragment.newInstance(WEBPAY_PUBLISHABLE_KEY);
    getFragmentManager().beginTransaction()
        .replace(R.id.webpay_token_button_fragment, tokenFragment)
        .commit();
    

トークン化処理の終了後に、WebPayTokenCompleteListeneronTokenCreatedもしくはonCancelledが呼び出されます。 問題なくトークンが得られた場合にはonTokenCreatedにてTokenを受け取ることが出来ますので、id()メソッドでトークンのidを示す文字列を取り出して下さい。

トークンidはサービスのサーバに送信し、課金や顧客の作成に利用します。 詳しい実装方法はトークン決済で紹介しています。

サンプルに含まれるTokenCreateActivity が実装例にあたります。

B. トークン化およびそのユーザインタフェースのみ

A.のボタン部分のインタフェースは独自で実装し、トークン化を行うユーザインタフェースを利用出来ます。

  1. ActivityでWebPayTokenCompleteListenerのインタフェースを実装する

    + public class MyFragmentActivity implements WebPayTokenCompleteListener {
    - public class MyFragmentActivity {
    
    @Override
    public void onTokenCreated(Token token) {
        // トークンが作成された際の処理
    }
    
    @Override
    public void onCancelled(Throwable lastException) {
        // トークンを作成せずにダイアログを閉じた際の処理
    }
    
  2. 必要な箇所でCardDialogFragmentを呼び出す

    // 利用可能なカードブランドをコード上で指定します
    List<CardType> supportedCardTypes = CardType.VM();
    
    CardDialogFragment fragment =
        CardDialogFragment.newInstance(WEBPAY_PUBLISHABLE_KEY, supportedCardTypes);
    fragment.setSendButtonTitle(R.string.your_button_title);
    fragment.show(getFragmentManager(), CARD_DIALOG_FRAGMENT_TAG);
    

A.と同様に、WebPayTokenCompleteListenerのインタフェースでトークンの作成完了をハンドリングして下さい。 サンプルに含まれるCardDialogActivity が実装例にあたります。

C. トークン化を行うクライアントのみ

A.,B.で内部的に利用しているWebPayとの通信を行うクライアントを直接利用することも可能です。 中に含めるデータをユーザより取得する方法は、開発者に委ねられます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
RawCard rawCard = new RawCard()
    .number(cardNumber)
    .expMonth(cardExpMonth)
    .expYear(cardExpYear)
    .cvc(cardCvc)
    .name(cardName);


new WebPay(WEBPAY_PUBLISHABLE_KEY).createToken(rawCard, new WebPayListener<Token>() {
    @Override
    public void onCreate(Token result) {
        // トークンの作成に成功した際の処理
    }

    @Override
    public void onException(Throwable cause) {
        // 作成中にエラーが発生した際の処理
    }
});

サンプルのHandleWebPayActivity が実装例にあたります。

また、サンプルのCardIOIntegrationActivity は、この方法にcard.ioを組み合わせた場合の例となっています。

デザイン

ユーザインタフェースについては基本的にアプリケーションのテーマに従うようになっています。 ダイアログの背景を除いて、EditTextButton向けに定義されているデザインが概ねそのまま適用されます。

なお、サンプルアプリケーションはAppCompatで提供されている、Theme.AppCompat.Light.DarkActionBarを定義した場合のものです。

おわりに

iOS向けのトークン化ライブラリのリリースより長らくお待たせ致しました。

モバイル環境向けにもWebPayを利用するための手段の充実に努めてまいります。 実際の利用時にこういう箇所で困ったといったフィードバックや、こういう機能が欲しいといったご要望等ございましたら是非ご連絡ください