/ stripe

Rails中集成Stripe支付 — 信用卡

Stripe是硅谷的新晋支付领域的独角兽。Stripe提供信用卡,比特币,近期又提供了支付宝和微信支付接口。

本文不涉及如何申请Stripe账号,简单的说就是你需要一张美国的银行卡和社保卡,如果有亲朋好友在美国可以拜托他们帮忙申请。

言归正传,在Stripe中集成信用卡付款非常简单。

首先新建一个rails项目:
rails new stripe-credit-card

Gemfile中添加gem 'stripe',终端运行bundle安装stripe的gem。

生成控制器:
rails g controller charges

app/controllers/charges_controller.rb,添加如下代码

class ChargesController < ApplicationController
  def new
  end
  def create
    @amount = 500
    customer = Stripe::Customer.create(
      :email => params[:stripeEmail],
      :source  => params[:stripeToken]
     )
     stripe::Charge.create(
       :customer    => customer.id,
       :amount      => @amount,
       :description => 'Rails Stripe customer',
       :currency    => 'usd'
     )
   end
 end

配置路由:
config/routes.rb中添加resources :charges

然后配置Stripe的Publishable key和Secret key:

到Stripe后台面板,点击API

dashboard-1

可以看到Publishable key和Secret key

apikey

注意API有两种模式,一种是Live(线上),一种是Test(测试)模式。这里我们是用测试模式的key。

config/initializers/下创建文件stripe.rb,填入Publishable key和Secret key。

Rails.configuration.stripe = {
  :publishable_key => 'your_publishable_key',
  :secret_key      => 'your_secret_key'
}

Stripe.api_key = Rails.configuration.stripe[:secret_key]

注意:这里不推荐直接将你的publishable key和secret key直接填到stripe.rb下,最好使用dotenvfigaro这两个gem,把环境变量填写到单独的文件。如果使用git,把这个文件写入.gitignore,这样假若使用git提交到公开仓库,就不会暴露key,而且放在单独的文件中也更容易管理。

这里我们使用dotenv(你也可以使用figaro),在Gemfile中添加gem 'dotenv-rails', groups: [:development, :test],运行bundle安装gem。

在rails程序所在目录创建.env文件,写入

PUBLISHABLE_KEY=your_publishable_key
SECRET_KEY=your_secret_key

然后修改config/initializers/

Rails.configuration.stripe = {
  :publishable_key => ENV['PUBLISHABLE_KEY'],
  :secret_key      => ENV['SECRET_KEY']
}

接下来到app/views/charges下新建new.html.erb文件,填入

<%= form_tag charges_path do %>
  <article>
    <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-locale="auto"></script>
<% end %>

这里使用Stripe的checkout.js提供的默认样式。

访问http://localhost:3000/charges/new, 可以看到
-----2017-09-04---1.21.32

最后别忘了在app/views/charges下创建create.html.erb:

<h2>Thanks, you paid <strong>$5.00</strong>!</h2>

回到浏览器,点击Pay with Card,会看到
-----2017-09-04---12.59.19

输入邮箱(随意填写),信用卡信息(stripe提供测试用卡号4242424242424242)

-----2017-09-04---1.14.46

点支付后跳出

-----2017-09-04---1.10.46

就代表支付成功了。

产品上线时只要把在.env文件下把publishable key和secret key替换为live模式下对应的key就可以了。

之后我会写一篇如何在Rails中集成Stripe的支付宝付款方式,和信用卡支付使用的checkout有些不同,stripe提供的支付宝集成使用的是sources