読者です 読者をやめる 読者になる 読者になる

決済API と Ruby 🍣 時々 Rails

Omise JapanのLead Developerです。OmiseやRubyのことをメインに書きます。

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

Omiseのテストカードをウェブサイトから調べる手間を省く方法としてGem(omise_test_cards)を公開しました。

f:id:akinrt:20170310170758p:plain

omise_test_cards のインストール

gem install omise_test_cards

Pryでちょっと動かしてみる

cards = OmiseTestCards.test_cards

cards.successful_charge.code
# => "successful_charge"

cards.successful_charge.description
# => "these credit card numbers can be used in test mode"

cards.successful_charge.cards
# => <Hashie::Array [#<Hashie::Mash brand="Visa" number="4242424242424242">, #<Hashie::Mash brand="Visa" number="4111111111111111">, #<Hashie::Mash brand="MasterCard" number="5555555555554444">, #<Hashie::Mash brand="MasterCard" number="5454545454545454">, #<Hashie::Mash brand="JCB" number="3530111333300000">, #<Hashie::Mash brand="JCB" number="3566111111111113">]>

cards.successful_charge.cards.first.brand
# => Visa

cards.successful_charge.cards.first.number
# => 4242424242424242

ちなみに、Omiseのテストカードは10種類のステータス別のカードがあります。

cards = OmiseTestCards.test_cards

cards.successful_charge
cards.invalid_security_code
cards.fail_3ds_card_enrollment
cards.fail_3ds_card_validation
cards.insufficient_fund
cards.stolen_or_lost_card
cards.failed_processing
cards.payment_rejected
cards.failed_fraud_check
cards.invalid_account_number

このうちの cards.successful_charge に含まれるカードのいずれも、正常にテストでChargeができるカードになります。 それ以外のカードは、利用できないステータスなので、charge.paid? でChargeに失敗して入れば、 charge.failure_code を見て、エラー処理を入れてあげるといいでしょう!

Omise RubyライブラリはOmiseErrorをraiseするので、こんな感じでテストするといいですね。

require "omise"
require "omise_test_cards"

Omise.api_key = "SET_YOUR_TEST_SECRET_KEY"
Omise.vault_key = "SET_YOUR_TEST_PUBLIC_KEY"

# get sampla card
sample_card = OmiseTestCards.test_cards.successful_charge.cards.first

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

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

  if charge.paid
    # handle success
    puts "thanks"
  else
    # handle failure
    raise charge.failure_code
  end
rescue OmiseError => e
  # handle OmiseError raised by omise library
  raise e.message
end

リンク

github.com

omise_test_cards | RubyGems.org | your community gem host