TH's Notes
  • Home
  • Categories
  • Tags
  • Archives

查看交易記錄的後台功能

這裡將以 Stripe 金流服務為例, 介紹如何為網站後台新增查看交易記錄的功能。

安裝套件

在 Gemfile 裡面加入

gem 'stripe_event'

然後執行 bundle install。

設定 routes

在 routes.rb 加入

config/routes.rb:

namespace :admin do
  resources :payments, only: [:index]
end

mount StripeEvent::Engine, at: '/stripe_events'

新增 payments table

在資料庫中新增 payments table 如下

db/schema.rb:

create_table "payments", force: true do |t|
  t.integer "user_id"
  t.integer "amount"
  t.string  "reference_id"
end

設定 initializer

在 config/initializers/stripe.rb 裡面處理付款成功的事件

config/initializers/stripe.rb:

Stripe.api_key = ENV['STRIPE_SECRET_KEY']

StripeEvent.configure do |events|

  # 付款成功
  events.subscribe 'charge.succeeded' do |event|
    user = User.where(customer_token: event.data.object.customer).first
    # 產生交易記錄
    Payment.create(user: user, amount: event.data.object.amount,
                   reference_id: event.data.object.id)
  end
end

倘若不清楚如何使用 Stripe 提供交易機制, 可以參考這裡。

新增 Model/View/Controller

新增 Payment model

app/models/payment.rb:

class Payment < ActiveRecord::Base
  belongs_to :user
end

新增 PaymentsController

app/controllers/admin/payments_controller.rb:

class Admin::PaymentsController < AdminsController

  def index
    @payments = Payment.all
  end

end

新增 view 以查看交易記錄,如下

app/views/admin/payments/index.html.haml:

%section.admin_payments
  .container
    .row
      .col-sm-10.col-sm-offset-1
        %section.payment_history
          %ul.nav.nav-tabs
            %li.active
              = link_to "Recent Payments", admin_payments_path
            %li
              = link_to "Add a New Video", new_admin_video_path

          %table.table
            %thead
              %tr
                %th Name
                %th Email
                %th Amount
                %th Reference ID
            %tbody
              - @payments.each do |payment|
                %tr
                  %td
                    = payment.user.full_name
                  %td
                    = payment.user.email
                  %td
                    = "$#{payment.amount/100.0}"
                  %td
                    = payment.reference_id

設定 Stripe Webhooks

最後,在 Stripe 的 Webhook Settings 裡面, 新增要接收 webhook requests 的 URL; 例如,倘若我們的網站位址是 th-myflix.herokuapp.com, 那麼新增的 URL 即為 th-myflix.herokuapp.com/stripe_events

在本機開發時, 可以使用免費的 ngrok 服務產生 public 位址, 以接收 webhook requests 進行測試。

Comments
comments powered by Disqus

  • « 依照簽署方案進行收費
  • 在 Rails 中處理信用卡付款失敗 »

Published

Feb 7, 2015

Category

Web

Tags

  • rails 63
  • stripe 4
  • Powered by Pelican. Theme: Elegant by Talha Mansoor