EX-決済API と Ruby 🍣 時々 Rails

EX-Omise JapanのLead Developerです。

オンライン決済 Omise で円決済の実装

Omiseが昨年の2016年06月14日(火)から日本向けに円決済を提供していることを皆さんはご存知でしょうか? 日本の法人・個人向けに日本円での決済ができるのです。

細かいこと抜きで、ゲストアカウントでささっと円決済をOmise Rubyライブラリで試す方法をまとめてみます。

ゲストアカウントでサインアップ!

テストアカウントを作る手間を省くため、ゲストサインアップを利用します。

Omiseの登録ぺージ へ移動し、 ゲストとしてサインアップする のテキストリンクをクリック。 f:id:akinrt:20170307152345p:plain

アカウント作成のページへ移動した後に、日本を選択し、契約内容に同意にチェックをつけてアカウント作成ボタンをクリックします。 f:id:akinrt:20170307152355p:plain

その後 テストキー を取得します! 公開鍵(パブリックキー)と秘密鍵(シークレットキー)があるので、これを後ほど利用します! f:id:akinrt:20170307152404p:plain

PryでChargeをしてみよう

ruby2.3.1以降とpryがインストールされている状態をイメージして話をしていきます。 Omise Ruby の公式ライブラリを使ってChargeをしていきます。 gemで配布しているので、下記のようにインストールします。

gem install omise

それでは、 pry をターミナルで実行してrubyを書いていきましょう!

APIキーの設定(公開鍵・秘密鍵)

ここでは、先ほどの テストキー から秘密鍵と公開鍵を使っていきます。 下記の、秘密鍵と公開鍵はご自身のキーを入れてください。

Omise.api_key = "秘密鍵"
Omise.vault_key = "公開鍵"

Omise.vault_key は、Tokenを作成する時に利用します。 クレジットカードデータを扱うので、本番利用時には使用しないようにしましょう。(※Omise.jsでトークンを作るようにしましょう。)

Tokenを作成

ここではVISAカードのテストカード番号である 4242424242424242 を利用してテストのトークンを作成します。

token = Omise::Token.create(card: {
  name: "TARO OMISE",
  number: "4242424242424242",
  expiration_month: 3,
  expiration_year: 2019,
  city: "Tokyo",
  postal_code: "1510051",
  security_code: 123
})

これにより、Charge を行うためのTokenが取得できました。 次に3種類あるChargeの方法を一つずつ見ていきます。

1. TokenだけをつかったCharge

さきほど作った token のidを参照させてChargeを行うには下記になります。 わずかこれだけで課金ができてしまっています。

charge = Omise::Charge.create({
  amount: 100000,
  currency: "jpy",
  card: token.id
})

しかし、トークンは一度だけ使えるといった性質があるため、このコードを再利用するとエラーが返ってきます。 次に同じカードを再利用する方法を見ていきましょう。

2. CustomerにCard(Token)を保存してCharges

Customerオブジェクトにはカード(Token)を複数持たせることができます。 最初に登録したカードをデフォルトカードとして所有する性質があります。 さきほどのTokenは再利用できなくなってしまっているので、再度新しいTokenを発行します。

token = Omise::Token.create(card: {
  name: "TARO OMISE",
  number: "4242424242424242",
  expiration_month: 3,
  expiration_year: 2019,
  city: "Tokyo",
  postal_code: "1510051",
  security_code: 123
})

customer = Omise::Customer.create({
  email: "taro.omise@omise.co",
  description: "taro omiseさんに関するメモなどを書ける場所",
  card: token.id
})

こうすうることで、Customerオブジェクトへカード(Token)を紐づけることができ、Customerオブジェクトを使ったChargeができるようになります。 この場合のChargeは下記のように行います。

charge = Omise::Charge.create({
  amount: 100000,
  currency: "jpy",
  customer: customer.id
})

こうすることで Customerに紐づけたカードを使って、再利用可能なChargeができるようになりました。

3. Customerの所有するカードを明示的に指定してCharge

Customerには複数カードを持たせることができますが、2枚目以降のカードを使うようにするには、Card IDを指定して利用します。 ここでは、先ほどの customer へ Mastercardのテストクレジットカード 5555555555554444 を追加してMastercard(2枚目のクレジットカード)でChargeをやってみましょう!

token = Omise::Token.create(card: {
  name: "TARO OMISE",
  number: "5555555555554444",
  expiration_month: 3,
  expiration_year: 2019,
  city: "Tokyo",
  postal_code: "1510051",
  security_code: 123
})

# Mastercardを先ほどのcustomerへ登録
customer.update(card: token.id)

# cardsの中身はarrayにhashでCardオブジェクトが入っています、2個目のCard IDを取得
mastercard_id = customer.cards.data[1]["id"]

charge = Omise::Charge.create({
  amount: 100000,
  currency: "jpy",
  customer: customer.id,
  card: mastercard_id
})

こんな感じでOmiseのChargeができます。 やってみるとすごく簡単だと思いますので、ぜひゲストアカウントからさくっと動かして見てください。

動作検証用のテストカードはこちらにたくさんあります。 正常動作とCharge時に各種エラー(failure code)がレスポンスに含まれるカードが整っています。

テストカードのGem omise_test_cards を作りました

これを使えばテストカードをウェブサイトから探さなくても簡単に利用できるようになります!

akinrt.hatenablog.com