LoginSignup
81
75

More than 5 years have passed since last update.

StripeがRailsで動く仕組み

Posted at

決済サービス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

81
75
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
81
75