###決済サービスAPIのStipeをRailsで使う
Stripeとは:クレジットカード決算のためにカード情報さえ取得すれば、あとは引き落としがRailsサイドでできるようになるものです。
本家のサイトはこちら
前提
クレジットカードなどプライベートな個人情報は、直接サーバーに保管することは法律で禁止されている(らしい)です
なので、railsのsecure_passwordでユーザーからうけとったpasswordをめちゃめちゃな文字列に変換すること同様にクレカ情報はStripe側のサーバにのみしか渡りません
まずは、
gem 'stripe'
でbundle install
します
Stripeが利用できる大きなフローとしては4つあり
1. クレカ情報をユーザがStripeが提唱してるjsで送信する
2. それを受け取ったStripe側が(上の通り)、情報をめちゃめちゃな文字列に入れる
3. StripeのAPIが提供してるクラス、Stripe::Customerクラスで`:email`, `:source` のハッシュでその情報を受け取る
4. Stripe::Chargeクラスで、決めた金額を引き落とす
では、流れに沿ってコメントを入れながら実装していきます
###まずはコントローラを作成
$ rails g controller charges
config/routes.rb
resources :charges
app/controller/charges_controller.rb
def new
end
def create
# Amount in cents
@amount = 500#引き落とす金額
###この操作で、Stripe から帰ってきた情報を取得します
customer = Stripe::Customer.create(
:email => params[:stripeEmail], #emailは暗号化されずに受け取れます
:source => params[:stripeToken] #めちゃめちゃな文字列です
)
###この操作で、決済をします
charge = Stripe::Charge.create(
:customer => customer.id,
:amount => @amount,
:description => 'Rails Stripe customer',
:currency => 'usd'
)
rescue Stripe::CardError => e
flash[:error] = e.message
redirect_to new_charge_path
end
###Stripeでアカウントを作って、API_keyを環境変数にいれる
config/initializers/stripe.rb
Rails.configuration.stripe = {
:publishable_key => ENV['PUBLISHABLE_KEY'],#stipeのページに行って自分のアカウントから取ってくる
:secret_key => ENV['SECRET_KEY']
}
Stripe.api_key = Rails.configuration.stripe[:secret_key]
###Viewでjsのformを実装
app/views/charges/new.html.erb
<%= form_tag charges_path do %>
<article>
<% if flash[:error].present? %>
<div id="error_explanation">
<p><%= flash[:error] %></p>
</div>
<% end %>
<label class="amount">
<span>Amount: $5.00</span>
</label>
</article>
<script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-key="<%= Rails.configuration.stripe[:publishable_key] %>"
data-description="A month's subscription"
data-amount="500"
data-locale="auto"></script>
<% end %>
フローとしては、以上ですm(_ _)m