WebPay.jsとCheckoutHelperにテストモードを搭載しました

ブラウザ上でクライアントサイドトークンを作成するWebPay.jsとCheckoutHelperにテストモードに切り替える機能を追加しました。

WebPay.jsとCheckoutHelper(以降まとめてトークン化ライブラリと呼びます)は、 利用者のブラウザからWebPayのサーバに直接カード情報を送信し、 カード番号やCVCがわからないトークンデータに変換するライブラリです。

トークン化ライブラリを利用することで、手軽にカード情報をWebPayと連携させられる、 サービス提供者のサーバにカード番号を送信しないため、セキュリティ上のリスクを軽減できるなどのメリットがあります。

しかし、直接WebPayのサーバにデータを送信するため、トークン化ライブラリの挙動の範囲まで結合された自動テストを行い難い、トークン化ライブラリの仕様が公開されておらず改変が難しい(かつ、改変をWebPayとしては推奨しておりません)ため、 今回、この問題を軽減するためテストモードを利用可能にしました。

テストモードは、トークン化ライブラリをロードした後に

1
WebPay.testMode = true

とすることで利用できます。 自動テストでは上述のコードを<script>タグに入れて動的にページに挿入したり、 Seleniumなどのテストエンジンが持つ、ページ上でJavaScriptを実行する機能を用いて実行することで有効化できます。

テストモードを有効にすると、すべての通信のタイミングでダミーのレスポンスを返します。 ダミーレスポンスは入力されたカード情報に基づき、実際にWebPayサーバが返却するレスポンスに似たものを、トークン化ライブラリの内部で生成しています。

たとえば、

  • カード番号: 4242-4242-4242-4242
  • 有効期限: 01/19
  • 利用者名: KEI KUBO
  • CVC: 123

を指定した場合、次のようなレスポンスになります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
  "id":"tok_deX7ll2yKFjhCFz",
  "object":"token",
  "livemode":false,
  "created":1410397560,
  "used":false,
  "card":{
    "object":"card",
    "exp_year":"2019",
    "exp_month":"1",
    "fingerprint":"0000000000000000000000000000000000000000",
    "name":"KEI KUBO",
    "country":"JP",
    "type":"Visa",
    "cvc_check":"pass",
    "last4":"4242"
  }
}

性質上、実際のWebPayと統合したときのレスポンスとは異なる場合があります。 たとえば、fingerprintはWebPayのサーバ上でしか取得できないので、つねに0000000000000000000000000000000000000000という値になります。 必ずWebPayと完全に統合した状態での確認も行ってください

テストモードを無効にする時はtrue以外の値、falsenullなどを指定してください。

なお、テストモードはカード情報入力が成功した時の動作をテストすることのみを目的としているため、レスポンスの内容は成功ケースに固定しており、カスタマイズする方法は用意していません。 エラーが発生した場合のJavaScriptのコードの挙動をテストしたい場合、 コールバックを受け取る関数にテストしたいケースのレスポンスを渡し、その振る舞いを確かめるという単体テストの利用を想定しています。

テストモードの機能は開発者の利便性のために提供しております。 より便利に利用していただけるよう、予告なく互換性のない動作の変更を行う場合があります。 その際は新しい方法で利用するよう、テストを変更してください。

いままで統合テストでトークン化の処理を回避したいという声をいくつかいただいており、今回の変更はこれらの要望に応えるものとなります。 ぜひテストの効率化、安定化に役立てていただければと思います。