sử dụng Stripe checkout trong ROR
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 ...
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:
<input type=”hidden” name=”stripeToken” />
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.
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.