activemerchant + paypal sandboxを試してみた

rubypaypalを組み込みたい!

ということでいろいろ調べてactivemerchantを試してみました。

paypal sandboxの設定

Home | PayPal Developer https://developer.paypal.com/webapps/developer/index

Account type = Business の作成

paypal sandboxにログインしてApplications > Sandbox accounts > Create Accountと遷移し、

Account typeをBusinessに設定して登録します。

メールは既に登録済みのものは使えないので、accountname.@gmail.comのようにドットをつけて設定するといいです。

+はエラーになります。

active merchantのインストール

Shopify/active_merchant · GitHub https://github.com/Shopify/active_merchant

gem install activemerchant

sample.rbの作成

githubにあるサンプルコードを流用して、以下のように書き換えます。

require "rubygems"
require "activemerchant"

ActiveMerchant::Billing::Base.mode = :test

# paypal sandboxにログインしてApplications > Sandbox accounts > 作成したbusinessユーザ > Profile > API credentialの情報を入力する
gateway = ActiveMerchant::Billing::PaypalGateway.new(
  :login => "[Username]",
  :password => "[password]",
  :signature => "[signature]",
)

# typeだとエラー、brandに変更する
# paypal sandboxにログインしてApplications > Sandbox accounts > 作成したbusinessユーザ > Profile > FundingのCredit card numberを入力する
# verification_valueはpaypal sandboxのどこにも見当たらないが、必須なので適当な三桁の数字を入力する
credit_card = ActiveMerchant::Billing::CreditCard.new(
  # :type               => "Visa",
  :brand              => "Visa",
  :first_name         => "[first_name]",
  :last_name          => "[last_name]",
  :number             => "[Credit card number]",
  :month              => 4,
  :year               => 2018,
  :verification_value => "999",
)

if credit_card.valid?
  response = gateway.authorize(10, credit_card, :ip => "127.0.0.1")
  if response.success?
    gateway.capture(5, response.authorization)
    puts "Purchase complete!"
  else
    puts "Error: #{response.message}"
  end
else
  puts "Error: credit card is not valid. #{credit_card.errors.full_messages.join('. ')}"
end

実行

 ruby sample.rb

動作確認

Purchase complete!と表示されたら、

paypal sandboxにログインしてApplications > Sandbox accounts > 作成したbusinessユーザのNotificationsを選択します。

SubjectにNotification of payment received

と表示されていればOK。

まとめ

paypal sandboxの仕組みがわかっておらず、

activemerchantのエラーメッセージをググったりしてなんだかんだと半日ハマった。。

今回試したのはsignatureだったのですが、

payment buttonsとかのほうが簡単に組み込めそうな感じがしたので、そっちも試してみます。