決済を行う

WebPayでは安全かつ簡単にクレジットカード決済を行うためのAPIやツール、ライブラリを提供しています。

ここではWebPayのAPIの基本となる

  • クレジットカード情報を代替するトークンを作成する
  • 課金を行う
  • クレジットカードの情報などを顧客情報として保存する
という3つの操作について紹介します。

クレジットカード情報の代替トークンを作成する

ECサイトやウェブサービスのサーバで直接クレジットカード情報を取り扱うことで、情報漏洩時のリスクが増大します。

WebPayでは安全なカード決済の仕組みを簡単に導入できるよう、 カード所有者のブラウザやアプリケーション上から直接WebPayと通信して、クレジットカード情報を代替するトークンを作成し、 直接クレジットカード情報に触れずにカード情報を取り扱える仕組みを提供しています。

まずは、実際にトークンを作ってみましょう。下に表示されている「カード情報を入力する」ボタンをクリックして下さい。

表示されたフォームには

  • カード番号:4242 4242 4242 4242
  • 有効期限:08 / 17
  • カード名義:TARO YAMADA
  • CVC:123
と記入して、「トークンを作成してみる」のボタンをクリックしてください。

作成されたトークンのid: 未作成

作成されたトークンのidを、課金を行う際や、顧客情報として保存しておく際に card パラメータとして与えることで 入力されたカード情報をあなたのECサイトやウェブサービスのサーバ、ネットワーク上で取り扱うことなく 目的の処理を果たすことができます。

トークン決済の詳細についてはトークン決済で、 このボタンとフォームの導入方法についてはCheckoutHelperで、 iOSやAndroidのスマートフォンアプリケーション用のライブラリはライブラリ一覧で紹介しています。

クレジットカードに課金を行う(Chargeを作成する)

作成したトークンを用いてAPI呼び出しを行い、課金を行ってみましょう。

WebPayでは カードトークン、金額(通貨) をパラメータとしてリクエストするだけで、課金を行うことができます。 下の例は 400円をトークン作成時に入力したカードに課金する例です。 curlならターミナルなど、その他のプログラミング言語なら次の例を保存して実行するか、irbなどのインタラクティブ環境に入力して試してみてください。

$
curl "https://api.webpay.jp/v1/charges" \
-u "test_secret_eHn4TTgsGguBcW764a2KA8Yd": \
-d "amount=1554" \
-d "currency=jpy" \
-d "card=tok_SampleCardToken"
>>
require 'webpay'
webpay = WebPay.new('test_secret_eHn4TTgsGguBcW764a2KA8Yd')
webpay.charge.create(
   amount: 1554,
   currency: "jpy",
   card: "tok_SampleCardToken"
)
php >
require "vendor/autoload.php";
use WebPay\WebPay;
$webpay = new WebPay('test_secret_eHn4TTgsGguBcW764a2KA8Yd');
$webpay->charge->create(array(
   "amount"=>1554,
   "currency"=>"jpy",
   "card"=>"tok_SampleCardToken"
));
>
import jp.webpay.webpay.WebPay;
WebPay webpay = new WebPay("test_secret_eHn4TTgsGguBcW764a2KA8Yd");
webpay.charge.createRequest()
        .amount(1554)
        .currency("jpy")
        .card("tok_SampleCardToken")
        .execute();
>>>
import webpay
client = webpay.WebPay('test_secret_eHn4TTgsGguBcW764a2KA8Yd')
client.charge.create(
  amount=1554,
  currency="jpy",
  card="tok_SampleCardToken"
  )
>
var WebPay = require('webpay');
webpay = new WebPay('test_secret_eHn4TTgsGguBcW764a2KA8Yd');
webpay.charge.create({
  amount: 1554,
  currency: "jpy",
  card: "tok_SampleCardToken"
}, function(err, res) { ... });

これだけで、クレジットカードへの課金の処理は完了します。 課金(Charge)の情報は後から取得したり、一覧したりすることも可能です。 課金(Charge)について詳しく知りたい場合は APIドキュメント をご覧ください。

顧客の情報を保存しておく(Customerを作成する)

トークンは安全のため、一度しか使えません。 課金の度にクレジットカード情報を入れるのはとても煩わしいことでしょう。 カード情報を保持する「顧客」を登録しておけば、次からはその顧客のidを指定して課金を作成できます。

$
curl "https://api.webpay.jp/v1/customers" \
-u "test_secret_eHn4TTgsGguBcW764a2KA8Yd": \
-d "card=tok_SampleCardToken"
>>
require 'webpay'
webpay = WebPay.new('test_secret_eHn4TTgsGguBcW764a2KA8Yd')
webpay.customer.create(card: "tok_SampleCardToken")
php >
require "vendor/autoload.php";
use WebPay\WebPay;
$webpay = new WebPay('test_secret_eHn4TTgsGguBcW764a2KA8Yd');
$webpay->customer->create(array("card"=>"tok_SampleCardToken"));
>
import jp.webpay.webpay.WebPay;
WebPay webpay = new WebPay("test_secret_eHn4TTgsGguBcW764a2KA8Yd");
webpay.customer.createRequest()
        .card("tok_SampleCardToken")
        .execute();
>>>
import webpay
client = webpay.WebPay('test_secret_eHn4TTgsGguBcW764a2KA8Yd')
client.customer.create(card="tok_SampleCardToken")
>
var WebPay = require('webpay');
webpay = new WebPay('test_secret_eHn4TTgsGguBcW764a2KA8Yd');
webpay.customer.create({card: "tok_SampleCardToken"}, function(err, res) { ... });

実行すると顧客オブジェクトが得られます。 顧客オブジェクトのidプロパティには cus_4lOag156Rfh10nU というような cus_ で始まるユニークなidが記載されています。 このidを使って顧客に結びついたカードに対して課金を行うことが出来ます。

ここで得られたidをcardのパラメータの代わりに、 customer というパラメータに、idを渡すだけです。

$
curl "https://api.webpay.jp/v1/charges" \
-u "test_secret_eHn4TTgsGguBcW764a2KA8Yd": \
-d "amount=1554" \
-d "currency=jpy" \
-d "customer=cus_4lOag156Rfh10nU"
>>
require 'webpay'
webpay = WebPay.new('test_secret_eHn4TTgsGguBcW764a2KA8Yd')
webpay.charge.create(
   amount: 1554,
   currency: "jpy",
   customer: "cus_4lOag156Rfh10nU"
)
php >
require "vendor/autoload.php";
use WebPay\WebPay;
$webpay = new WebPay('test_secret_eHn4TTgsGguBcW764a2KA8Yd');
$webpay->charge->create(array(
   "amount"=>1554,
   "currency"=>"jpy",
   "customer"=>"cus_4lOag156Rfh10nU"
));
>
import jp.webpay.webpay.WebPay;
WebPay webpay = new WebPay("test_secret_eHn4TTgsGguBcW764a2KA8Yd");
webpay.charge.createRequest()
        .amount(1554)
        .currency("jpy")
        .customer("cus_4lOag156Rfh10nU")
        .execute();
>>>
import webpay
client = webpay.WebPay('test_secret_eHn4TTgsGguBcW764a2KA8Yd')
client.charge.create(
  amount=1554,
  currency="jpy",
  customer="cus_4lOag156Rfh10nU"
  )
>
var WebPay = require('webpay');
webpay = new WebPay('test_secret_eHn4TTgsGguBcW764a2KA8Yd');
webpay.charge.create({
  amount: 1554,
  currency: "jpy",
  customer: "cus_4lOag156Rfh10nU"
}, function(err, res) { ... });

顧客のidさえ分かっていれば、次から好きな時にその顧客のカードへ課金を行えます。 idだけを記録しておいて、新しいアイテムの購入の度に課金したり、バッチ処理で定期課金にしたり使い方は様々でしょう。

顧客(Customer)の情報は、後から一覧を取得したり、更新、削除することも可能です。 顧客(Customer)について詳しく知りたい場合は APIドキュメント をご覧ください。

非公開鍵

今回コード中に入っていた test_secret_eHn4TTgsGguBcW764a2KA8Yd は、ゲスト向けのテスト環境用非公開鍵ですが、 無料のユーザ登録 を行うことで自分だけのテスト環境を利用することができます。 また、これらの操作はAPI経由からだけでなくウェブ上からも操作、確認することも出来ます。