Java
webpay

WebPayも少し弄ってみる

More than 1 year has passed since last update.

昨日はPayPalのsandboxを使えるようにアカウントを作るところまでやりました。

そのあとドキュメントみたりWebで調べたりしていたのですが、「日本語のドキュメントは信用するな」「見るなら英語」というコメントが多いように見受けられたのでめんどくさくなりました。初めてやるペイメントなんで「英語の理解に齟齬があったら洒落にならん」という判断で日本製のWebPayも使ってみようと思いました。最終的な支払いシステムは、PayPalもWebPayも最近API公開したらしいVisaを個別に扱うことも、逐次全部やっちゃえばいいですし。

というわけで今回はWebPay。こちらもまずはアカウント作成から。
https://webpay.jp/
こちらはsandboxを使うのが非常にわかりやすい。
公式通りにやればサンプルが動きます。

アカウントを作ったら、Java側を実装。
私はMaven使いなので、Mavenでライブラリを取得。最新は2.2.2でした。

<dependency>
  <groupId>jp.webpay</groupId>
  <artifactId>webpay</artifactId>
  <version>[2.2.2,3.0.0)</version>
</dependency>

ここからはまだ試していないのですが、多分問題なく動くはず。
HTMLに以下のスクリプトを貼り付けます。

<form action="/purchase" method="post">
  <script src="https://checkout.webpay.jp/v3/" class="webpay-button" data-key="test_public_2nAdAMdum5p44cM6Nhc1r5hI" data-lang="ja"></script>
</form>

前提として自分のサーバーのバックエンドがJavaで、エンドポイントとしてhttp://xxxx.xxx:xxxx/purchaseがあるとします。

WebPayの上で説明したデフォルトの設定では、/purchasewebpay-tokenというnameで値が渡されます(はずです)。それをJava側で

WebPay webpay = new WebPay([your-token-secret]);
webpay.charge.createRequest()
        .amount(400)
        .currency("jpy")
        .card([webpay-token])
        .execute();

という形で実行してやると、あなたのアカウントにお客様から400円の支払いが実行されます。your-token-secretはあなたのアカウントに紐付いた秘密鍵です。webpay-tokenは一回限りで利用できなくなるので、万が一これが漏れても悪用されることはないとのことです。

ただし、このままだとお客様は支払いのたびに毎回クレジットカード情報を入力する必要が出てきます。それを避けるために、WebPayにお客様情報を登録することができます。以下のようにやります。

<form action="/register" method="post">
  <script src="https://checkout.webpay.jp/v3/" class="webpay-button" data-key="test_public_2nAdAMdum5p44cM6Nhc1r5hI" data-lang="ja"></script>
</form>
WebPay webpay = new WebPay([your-token-secret]);
webpay.customer.createRequest()
        .card([webpay-token])
        .execute();

新たに/registerというエンドポイントを作りました。入力されたお客様クレジットカード情報はまずWebPayにセキュアに接続されwebpay-tokenをもらって/registerに届けられます。そしてサーバー側でWebPayにお客様情報を登録してくれと依頼を出します。確認していないので申し訳ないですが、多分execute()の返り値にCustomerResponseを取るので、そこにお客様に紐付いたアクセストークンが入っているのだと思います。私はWebPayのダッシュボードからお客様のアクセストークンを取得しました。

仮にお客様のアクセストークンをcustomer-tokenとします。このcustomer-tokenを自分のサーバーで保管しておけば、何かとトラブルの素になるクレジットカード情報を自分のサーバーで全く持たずに、支払い機能を作れます。

customer-tokenを使った支払いは

WebPay webpay = new WebPay([your-token-secret]);
webpay.charge.createRequest()
        .amount(400)
        .currency("jpy")
        .customer([customer-token])
        .execute();

という形で、400円を請求できます。
ちなみに、これらはすべて公式サイトに情報が載っています。

今回少し使ってみた印象は「非常にわかりやすい」です。
ただ、私の作っているサービスの特徴上、双方向に送金ができたほうがありがたいです。WebPayはそれには対応していません(たぶん)。そのうち対応するのでしょうか?そうだとありがたいのですが。

PayPalは双方向の送金もできるみたいです。
・・・めんどうですが、もう少しPayPal情報を調べてみようと思います。

一回覚えてしまえばなんてことはないと思うのですが、、、spring frameworkもそうだったし。気に入らないのは、英語版の機能が日本版では使えないことがあって、せっかく調べてもいざ実践しようとしたら「日本では使えません」とか言われたら・・・ムキー。