sử dụng Stripe checkout trong ROR
Bài đăng này đã không được cập nhật trong 2 năm
Giới thiệu Stripe là một cổng thanh toán cung cấp API được dùng để tích hợp Stripe vào các ứng dụng Ruby on Rails. Bài viết này sẽ hướng dẫn bạn qua toàn bộ quá trình tích hợp ứng dụng Stripe với một ứng dụng Rails.Stripe là 1 chuẩn PCI, rất dễ sử dụng.. Stripe sẽ lưu dữ tự động các dữ liệu thanh toán quan trọng trên các máy chủ của chính nó và thực hiện các tiêu chuẩn bảo mật cần thiết, chẳng hạn như mã hóa dữ liệu thẻ tín dụng. To add the Stripe Checkout gateway to your Rails app, follow these steps:
- Đăng kí account trên hệ thống Stripe
- Install Stripe gem.
- Config các Stripe keys trong hệ thống
- Khởi tạo routes, controller, và các Stripe service
Đăng kí account trên hệ thống Stripe Như chúng tôi đã đề cập trước đó, bạn sẽ cần có hồ sơ của riêng bạn trên trang web của Stripe để có được các API. Các API của Stripe là cần thiết để kiểm tra sự tích hợp của các phương thức thanh toán.Khi bạn đã tạo một tài khoản , hãy đăng nhập vào Stripe để lấy đc các thông tin về Secret Key, publish key để cung cấp cho các hệ thống ROR để sử dụng :
Install Stripe gem
Đăng kí Gemfile trong Ruby on Rails project và add new gem:
gem 'stripe'
Install gemfile với command line :
bundle install
Khởi tạo form payment Bạn sẽ không thể tính phí khách hàng của mình mà không có form thanh toán. Các tạo ra 1 form thanh toán sử dụng Stripe trong ROR :
<%= 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: $<%= @order.price %></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="<%= @order.price %>"
data-locale="auto"></script>
<% end %>
Trong form trên bạn cần lưu ý Stripe yêu cầu sự dụng thư viện checkout.js của stripe , thêm nữa ,Stripe yêu cầu đưa publish key vào làm param của attribute data key.
Lưu ý rằng nếu bạn muốn có một hình thức thanh toán tùy chỉnh hoàn toàn, bạn sẽ phải tạo ra một mã thông báo và trình xử lý để gửi Stripe Token này tới máy chủ của bạn. Bạn cũng cần phải thêm một vài kịch bản như :
- sử dụng api v2 với stripe
<script src="https://js.stripe.com/v2/"></script>
- Add publish key trong biến toàn cục của hệ thống :
<script> Stripe.setPublishableKey(‘pk_test_SAfpkFB2WVKLbQVukGCTVq5Z’); </script>
- Your main script must accept payment data from the payment form and run a callback function – a handler – that will add another input field to your payment form:
Trình xử lý cũng sẽ gửi biểu mẫu tới máy chủ của bạn. Nếu bạn không thêm input hiddent này thì Stripe sẽ không thể thực hiện đc quá trính thanh toán trên hệ thống. Để đơn giản và tăng tốc sự tích hợp của Stripe vào ứng dụng Rails của bạn, chúng tôi khuyên bạn nên sử dụng Stripe Checkout. Sau đó, khi tất cả mọi thứ hoạt động tốt, bạn có thể thiết kế mẫu thanh toán tùy chỉnh của riêng bạn.<input type=”hidden” name=”stripeToken” />
Khởi tạo routes, controller, và các Stripe servicet Khởi tạo charges controller trong ROR :
class ChargesController < ApplicationController
rescue_from Stripe::CardError, with: :catch_exception
def new
end
def create
StripeChargesServices.new(charges_params, current_user).call
redirect_to new_charge_path
end
private
def charges_params
params.permit(:stripeEmail, :stripeToken, :order_id)
end
def catch_exception(exception)
flash[:error] = exception.message
end
end
Khởi tạo Charge services:
class StripeChargesServices
DEFAULT_CURRENCY = 'usd'.freeze
def initialize(params, user)
@stripe_email = params[:stripeEmail]
@stripe_token = params[:stripeToken]
@order = params[:order_id]
@user = user
end
def call
create_charge(find_customer)
end
private
attr_accessor :user, :stripe_email, :stripe_token, :order
def find_customer
if user.stripe_token
retrieve_customer(user.stripe_token)
else
create_customer
end
end
def retrieve_customer(stripe_token)
Stripe::Customer.retrieve(stripe_token)
end
def create_customer
customer = Stripe::Customer.create(
email: stripe_email,
source: stripe_token
)
user.update(stripe_token: customer.id)
customer
end
def create_charge(customer)
Stripe::Charge.create(
customer: customer.id,
amount: order_amount,
description: customer.email,
currency: DEFAULT_CURRENCY
)
end
def order_amount
Order.find_by(id: order).amount
end
end
Khi bạn đã hoàn tất tất cả các bước được mô tả ở trên, bạn đã tích hợp thành công tính năng Checkout trong ứng dụng Rails của bạn. Bây giờ, bạn có thể tạo một mẫu thanh toán tùy chỉnh và sử dụng các API trực tiếp và bạn có thể cho phép khách hàng thanh toán bằng Stripe trên trang web của bạn.
All rights reserved