Computer >> Máy Tính >  >> Lập trình >> Ruby

Cách bán hàng mua một lần bằng đường ray có sọc

Được sử dụng bởi hàng triệu công ty, Stripe cung cấp cơ sở hạ tầng thanh toán cho các ứng dụng để xử lý đăng ký và mua hàng một lần. Stripe Checkout cho phép chúng tôi dễ dàng chấp nhận thanh toán bằng thẻ thông qua trang thanh toán được lưu trữ, được thiết kế để tăng chuyển đổi. Kết hợp điều này với webhook cho phép các nhà phát triển bán sản phẩm và đăng ký, sau đó phân phối chúng dưới dạng kỹ thuật số.

Mặc dù về mặt kỹ thuật, có thể tự xử lý các khoản thanh toán bằng cách sử dụng một nhà cung cấp hiện có, nhưng Stripe cung cấp một số lợi ích. Đối với người mới bắt đầu, nó nhanh hơn. Stripe có hơn 4.000 người đang làm việc để thực hiện thanh toán đơn giản, an toàn và thuận tiện nhất có thể.

Hơn nữa, việc thanh toán của bạn được 'hỗ trợ bởi Stripe' là một cách dễ dàng để xây dựng lòng tin của khách hàng và tăng chuyển đổi. Khách hàng thường do dự khi cung cấp thông tin thẻ hoặc thông tin ngân hàng của họ cho mọi trang web họ truy cập và đúng như vậy.

Stripe không phải là nhà cung cấp duy nhất trong không gian thanh toán trực tuyến. Paddle là một người chơi lớn khác trong không gian thanh toán trực tuyến. Paddle cung cấp rất nhiều tính năng tương tự như Stripe, nhưng với mức phí cao hơn một chút và trải nghiệm của nhà phát triển theo giai thoại tồi tệ hơn. Mặc dù một số đối thủ cạnh tranh khác là lựa chọn thay thế cho Stripe, nhưng sự phổ biến tuyệt đối của các sản phẩm dành cho thanh toán trực tuyến khiến họ trở thành một lựa chọn dễ dàng.

Các công ty SaaS thường xử lý các đăng ký định kỳ, nhưng nhiều sản phẩm sẽ được hưởng lợi từ việc bán các sản phẩm kỹ thuật số một lần. Điều này cũng dễ dàng không kém với cơ sở hạ tầng của Stripe, nhưng tài liệu của họ dường như né tránh chủ đề này.

Thiết lập

Để giải thích quá trình này, chúng tôi sẽ xây dựng một ứng dụng cho phép người dùng trả tiền để đăng quảng cáo trên một bảng kiểu craigslist. Đối với ví dụ cụ thể của chúng tôi, ứng dụng của chúng tôi sẽ là một trang web dành cho những người đang tìm kiếm bạn cùng phòng. Người dùng có thể duyệt bảng miễn phí nhưng phải trả phí để đăng quảng cáo của chính họ.

Tạo tài khoản Stripe

Để bắt đầu, bạn cần truy cập trang web của Stripe để tạo tài khoản. Đăng ký bằng thông tin của bạn hoặc thông tin doanh nghiệp của bạn nếu có.

Cách bán hàng mua một lần bằng đường ray có sọc Ảnh chụp màn hình trang đăng ký Stripe

Bài viết này sẽ không hướng dẫn bạn chi tiết chính xác về việc tạo tài khoản, nhưng tài liệu của họ có thể sẽ trả lời bất kỳ câu hỏi nào của bạn. Chúng tôi đặc biệt quan tâm đến khoản thanh toán và các khoản thanh toán của họ sản phẩm hoặc cụ thể hơn là Stripe Checkout .

Tạo ứng dụng Rails cơ bản

Sau khi tài khoản Stripe của bạn được thiết lập, đã đến lúc tạo một ứng dụng Rails cơ bản mà chúng tôi sẽ sử dụng để tích hợp. Nếu bạn đang tích hợp một ứng dụng hiện có hoặc chỉ quan tâm đến phần Stripe của hướng dẫn, hãy chuyển đến phần "Tích hợp sọc cơ bản".

Tôi sẽ sử dụng các phiên bản sau cho ví dụ này:

  • Đường ray 6.1
  • Ruby 3.0.0

Giả sử bạn đã cài đặt cả Ruby và Rails, hãy tiếp tục và chạy như sau:

rails new roommate-board

Tên tôi đã chọn cho ứng dụng là roommate-board , nhưng bạn có thể tự do chọn cái khác. Chỉ cần hoán đổi tên ở bất kỳ nơi nào khác mà bạn thấy nó được đề cập trong mã ví dụ.

Thay đổi vào thư mục vừa được tạo với như sau:

cd roommate-board

Sau đó, chạy ứng dụng với phần sau:

rails s

Nếu bạn thấy trang chào mừng Rails điển hình khi bạn truy cập localhost:3000 , thì xin chúc mừng, chúng tôi đã sẵn sàng để viết mã!

Đầu tiên, chúng tôi sẽ thêm Devise để xử lý xác thực người dùng cho chúng tôi. Chỉ cần thêm gem 'devise' vào Gemfile của bạn và sau đó chạy như sau:

bundle install

Tiếp theo, sử dụng trình tạo Devise để thiết lập mọi thứ bằng cách chạy như sau:

rails generate devise:install

Tiếp theo, kết nối Devise với mô hình Người dùng bằng cách chạy như sau:

rails generate devise User

Và cuối cùng, chạy quá trình di chuyển như sau:

rails db:migrate

Tạo Hội đồng quản trị cùng phòng

Nếu bạn đang đọc bài này, có lẽ bạn quan tâm đến việc tích hợp Stripe hơn là thiết kế giao diện người dùng, vì vậy chúng tôi sẽ không lo lắng về việc tạo kiểu cho ví dụ của mình.

Bước tiếp theo của chúng tôi là tạo mô hình để đăng ! Chúng tôi sẽ sử dụng các trình tạo tiện dụng của Rails để tạo mô hình, chuyển đổi, bộ điều khiển và các tuyến đường. Chỉ cần chạy như sau:

rails generate scaffold Post address:string rent:integer content:text

Mô hình này không chứa mọi thứ chúng ta cần để tích hợp Stripe. Chúng tôi sẽ thêm nó sau trong trường hợp bạn đang tham khảo hướng dẫn này cho một dự án mà bạn không có đủ điều kiện để bắt đầu lại từ đầu. Chạy quá trình di chuyển để tạo bảng cơ sở dữ liệu như sau:

rails db:migrate

Tiếp theo, chúng tôi sẽ đặt chế độ xem chỉ mục cho các bài đăng làm thư mục gốc của ứng dụng của chúng tôi cho thuận tiện. Trong config/routes.rb , thêm dòng sau:

root 'posts#index'

Hiện tại, nó khá trống và không có cách nào rõ ràng để đăng nhập, đăng xuất hoặc đăng ký. Chức năng đã có sẵn, vì vậy hãy chỉ thêm một số liên kết trong tiêu đề để làm rõ ràng cho người dùng. Trong app/views/layouts/application.html.erb , chúng tôi sẽ thêm các liên kết cần thiết. Tệp của tôi trông giống như thế này sau khi thực hiện các thay đổi:

<!DOCTYPE html>
<html>
  <head>
    <title>RoommateBoard</title>
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <%= csrf_meta_tags %>
    <%= csp_meta_tag %>

    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
  </head>

  <body>
    <header>
      <nav>
        <a href="/#" class="block">
          <h1>Roommate Board</h1>
        </a>
        <% if user_signed_in? %>
          <%= link_to "Manage Posts", manage_posts_url %>
          <%= link_to "Sign Out", destroy_user_session_url, :method => 'delete' %>
        <% else %>
          <%= link_to "New Post", new_user_registration_url %>
        <% end %>
      </nav>
    </header>
    <%= yield %>
  </body>
</html>

Điều này cung cấp một liên kết đến trang chủ và khi người dùng nhấp vào "Bài đăng mới", họ sẽ được đưa đến trang đăng ký. Nếu họ đã đăng nhập, nút này sẽ thay đổi thành nút "Quản lý bài đăng" và nút "Đăng xuất". Không có bất kỳ kiểu dáng nào và không cần đăng nhập, trang gốc bây giờ trông giống như sau:

Cách bán hàng mua một lần bằng đường ray có sọc Ảnh chụp màn hình trang chỉ mục bài đăng cơ bản

Tiếp theo, chúng tôi muốn giới hạn mỗi bài đăng cho một người dùng duy nhất . Về cơ bản, chúng tôi sẽ tạo một liên kết thuộc về giữa Người đăng và Người dùng, cùng với một số logic có liên quan. Chúng tôi sẽ bắt đầu với trình tạo di chuyển tiện dụng của Rails; chỉ cần chạy như sau:

rails g migration AddUserIdToPosts

Bây giờ, hãy chỉnh sửa tệp di chuyển trong db/migrate/ trông như thế này:

class AddUserIdToPosts < ActiveRecord::Migration[6.1]
  def change
    add_column :posts, :user_id, :integer
  end
end

Cuối cùng, chạy quá trình di chuyển như sau:

rails db migrate

Tiếp theo, chúng tôi sẽ thêm các liên kết vào chính các mô hình . Trong app/models/post.rb , thêm dòng sau:

belongs_to :user

Và trong app/models/user.rb , thêm phần sau:

has_many :posts

Sự liên kết hai chiều này cung cấp cho chúng ta một số phương thức Rails tiện dụng, như những phương thức chúng ta sắp sử dụng trong phương thức tạo và phương thức mới. Điều hướng đến app/controllers/posts_controller.rb (bộ điều khiển bài đăng) và xem qua mới phương pháp. Thay vì @post = Post.new , sử dụng @post = current_user.posts.build .

Trong tạo phương pháp, chúng tôi sẽ làm một cái gì đó tương tự. Thay thế @post = Post.new(post_params) với @post = current_user.posts.build(post_params) . Cùng với nhau, phương thức mới và phương thức tạo sẽ giống như sau:

# GET /posts/new
def new
  @post = current_user.posts.build
end

  # POST /posts or /posts.json
def create
  @post = current_user.posts.build(post_params)

  respond_to do |format|
    if @post.save
      format.html { redirect_to @post, notice: "Post was successfully created." }
      format.json { render :show, status: :created, location: @post }
    else
      format.html { render :new, status: :unprocessable_entity }
      format.json { render json: @post.errors, status: :unprocessable_entity }
    end
  end
end

Điều này đảm bảo rằng thuộc tính id của người dùng được lưu trữ trong mọi bài đăng, nhưng nó không ngăn người dùng khác chỉnh sửa hoặc xóa bài đăng không phải của họ! Trong cùng một PostsController, hãy viết một phương thức cung cấp cho chúng ta chỉ báo Boolean về việc người dùng có sở hữu một bài đăng hay không. Thêm cái này vào cuối bộ điều khiển:

def user_owns_post?
  @post.user == current_user
end

Trong chỉnh sửa , hãy thêm mã sau (nó sẽ là mã duy nhất trong đó):

unless user_owns_post?
  # Redirect them to an error page
  redirect_to posts_path, flash: { error: "You are not the owner of that post!" }
end

Trong tiêu diệt , hãy thêm cái này vào đầu:

unless user_owns_post?
  # Redirect them to an error page
  redirect_to posts_path, flash: { error: "You are not the owner of that post!" }
end

Tiếp theo, chúng tôi sẽ cần một số chức năng để người dùng quản lý các bài đăng hiện có của họ . Mục tiêu cuối cùng là để người dùng có thể tạo một bài đăng và đặt nó ở trạng thái nháp trước khi họ trả tiền. Sau khi họ thanh toán, nó được đặt thành hoạt động cho họ! Trong PostsController, thêm một phương thức mới:

def manage
  @posts = current_user.posts
end

Tiếp theo, thêm một tuyến đường để người dùng có thể đến đó! Trong config/routes.rb , thêm phần sau:

get "/manage_posts/" =>'posts#manage'

Cuối cùng, chúng tôi sẽ tạo chế độ xem cho quản lý bài đăng! Thêm một tệp mới, app/views/posts/manage.html.erb . Sau đó, sao chép toàn bộ nội dung của app/views/posts/index.html.erb vào nó. Chỉ cần thay đổi tiêu đề từ "Bài đăng" thành "Quản lý bài đăng". Đây về cơ bản là một trang chỉ mục, nhưng với các bài đăng của người dùng cá nhân là những bài viết duy nhất được lập chỉ mục nhờ logic bộ điều khiển của chúng tôi. Về mặt kỹ thuật, chúng tôi có thể thực hiện việc này trên trang chỉ mục riêng lẻ, nhưng sự tách biệt này giúp việc thêm các chức năng khác sau này dễ dàng hơn. Ví dụ:bây giờ chúng tôi sẽ thêm liên kết để tạo bài đăng mới trên trang quản lý này.

Dưới tiêu đề, chỉ cần thêm thông tin sau:

<%= link_to "New Post", new_post_url%>

Đây là tất cả những gì chúng tôi cần thiết lập! Bạn nên xem qua nó để đảm bảo mọi thứ hoạt động bình thường. Bây giờ bạn có thể thực hiện những việc sau:

  • Tạo tài khoản người dùng
  • Đăng nhập
  • Đăng xuất
  • Xem chỉ mục của các bài đăng hiện có
  • Tạo một bài đăng mới

Nếu tất cả đều hoạt động theo cách bạn mong đợi, thì đã đến lúc chuyển sang tích hợp Stripe!

Tích hợp sọc

Thêm Đá quý Sọc Ruby

Để bắt đầu, chúng tôi sẽ chỉ thêm đá quý Stripe Ruby. Trong Gemfile của bạn, thêm dòng sau:

gem 'stripe'

Làm theo điều đó với chạy:

bundle install

Đối với phần tiếp theo, bạn sẽ cần khóa API sọc của mình . Trên bảng điều khiển Stripe, nhấp vào "Nhà phát triển" trên thanh bên. Một tùy chọn cho "Khóa API" sẽ tự hiển thị, vì vậy hãy tiếp tục và nhấp vào tùy chọn đó tiếp theo. Hãy ghi chú lại "Khóa bí mật" của bạn vì chúng tôi sẽ sớm cần đến.

Nhưng trước tiên, hãy tạo một trình khởi tạo trong config/initializers . Tạo một cái tên là stripe.rb . Trong tệp này, hãy thêm một dòng giống như thế này (nhưng với khóa bí mật của bạn được thay thế):

Stripe.api_key = <insert your key here as a string>

Lưu trữ thông tin đăng nhập Stripe

Tuy nhiên, phương pháp lưu trữ thông tin đăng nhập của chúng tôi không an toàn. Chúng ta không nên lưu trữ bí mật sản xuất trong văn bản rõ ràng, nơi chúng được theo dõi bằng git và bất kỳ ai đọc cơ sở mã đều có thể truy cập được. May mắn thay, Rails cung cấp một cách để lưu trữ thông tin đăng nhập một cách an toàn.

Trong trình bao của bạn, hãy chạy EDITOR=vim bin/rails credentials:edit để giải mã và mở tệp thông tin xác thực trong vim. Nhấn phím 'i' trên bàn phím của bạn để chuyển sang chế độ chèn. Thêm một phần mới trông giống như sau:

stripe:
  secret: your-secret-key
  public: your-public-key

Tiếp theo, lưu tệp và thoát khỏi vim. Có một số cách để làm điều này, nhưng tôi thích nhất là nhấn phím thoát (để thoát khỏi chế độ chèn) và sau đó nhập :wq , tiếp theo là phím enter. Nếu bạn muốn biết thêm về cách Rails xử lý thông tin đăng nhập được mã hóa, đây là một tài nguyên tốt.

Bây giờ thông tin đăng nhập đã được lưu trữ an toàn, hãy hoán đổi mã khởi tạo không an toàn bằng mã này:

Stripe.api_key = Rails.application.credentials[:stripe][:secret]

Có một số cách khác nhau để chúng ta có thể tận dụng Stripe để thanh toán, nhưng một lựa chọn tuyệt vời là Stripe Checkout. Stripe Checkout là một trang thanh toán được lưu trữ , nghĩa là bạn không tạo bất kỳ giao diện người dùng nào cho giao dịch thực tế. Người dùng sẽ nhấp vào một nút, được chuyển hướng đến Stripe và sau đó được chuyển hướng trở lại ứng dụng của bạn sau khi thanh toán hoàn tất. Điều này làm cho việc quản lý bối cảnh trở thành một chút thách thức, nhưng nó loại bỏ gánh nặng của việc tạo hình thức thanh toán và cho phép Stripe thực hiện nhiều công việc để tối đa hóa chuyển đổi. Bạn có thể dễ dàng chấp nhận các hình thức thanh toán ngoài thẻ, bao gồm cả giao dịch ACH hoặc nhiều phương thức thanh toán quốc tế.

Để bắt đầu, hãy tạo bộ điều khiển để xử lý quy trình thanh toán . Tạo app/controllers/checkout_controller.rb . Trong đó, chúng tôi sẽ viết một phương thức để xử lý việc tạo một phiên thanh toán.

def create
  @session = Stripe::Checkout::Session.create({
    success_url: root_url,
    cancel_url: manage_posts_url,
    payment_method_types: ['card'],
    line_items: [{
        name: "Roommate Posting",
        amount: 2000,
        currency: "usd",
        quantity: 1
    }],
    mode: 'payment',
    metadata: {post_id: params[:post_id]},
    customer_email: current_user.email,
    success_url: manage_posts_url,
    cancel_url: manage_posts_url
  })

  respond_to do |format|
    format.js
  end
end

Điều này tạo ra một Phiên thanh toán với bối cảnh cần thiết để Stripe thực hiện điều kỳ diệu của nó. Chúng tôi chuyển một mục hàng duy nhất mà chúng tôi đã mã hóa ở đây vì ứng dụng của chúng tôi chỉ có một sản phẩm. Nhưng đây sẽ là một nơi dễ dàng để sử dụng một tham số đã truyền để tùy chỉnh thanh toán cho một sản phẩm cụ thể. Biến "Số tiền" là chi phí của sản phẩm tính bằng xu . Cũng cần nhắc lại rằng chúng tôi chuyển email của người dùng hiện tại vì mục đích đơn giản. Điều cuối cùng quan trọng cần gọi là chúng tôi chuyển id của một bài đăng dưới dạng siêu dữ liệu . Điều này sẽ giúp chúng tôi dễ dàng thực hiện giao dịch mua của người dùng trong phần kết nối web!

Tiếp theo, rõ ràng chúng ta sẽ cần một cách để phương thức được gọi.

Trong config/routes.rb , thêm dòng sau để tạo đường dẫn đến bộ điều khiển.

post 'checkout/create' => 'checkout#create', as: "checkout_create"

Tiếp theo, chúng tôi sẽ thêm nút để gửi thanh toán cho bất kỳ bài đăng nào trong chế độ xem bài viết quản lý. Trong app/views/manage.html.erb , thêm một cột bổ sung vào tiêu đề bằng cách thêm cột này vào cuối cùng:

<th>Payment</th>

Ngoài ra, hãy chuyển đổi <th colspan="3"></th> tới <th colspan="4"></th> .

Tiếp theo, thêm một mục khác vào nội dung bảng cho chính nút thanh toán. Là mục thứ tư trong phần nội dung, hãy thêm phần sau:

<td><%= button_to "Submit Payment", checkout_create_path, params: {:post_id => post.id }, remote: true %></td>

Nhìn chung, chế độ xem bài đăng quản lý bây giờ trông giống như sau:

<p id="notice"><%= notice %></p>

<h1>Manage Posts</h1>
<%= link_to "New Post", new_post_url%>

<table>
  <thead>
    <tr>
      <th>Address</th>
      <th>Rent</th>
      <th>Content</th>
      <th>Payment</th>
      <th colspan="4"></th>
    </tr>
  </thead>

  <tbody>
    <% @posts.each do |post| %>
      <tr>
        <td><%= post.address %></td>
        <td><%= post.rent %></td>
        <td><%= post.content %></td>
        <td><%= button_to "Submit Payment", checkout_create_path, params: {:post_id => post.id }, remote: true %></td>
        <td><%= link_to 'Show', post %></td>
        <td><%= link_to 'Edit', edit_post_path(post) %></td>
        <td><%= link_to 'Destroy', post, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>
</table>

<br>

<%= link_to 'New Post', new_post_path %>

JavaScript

Đừng quên thêm gói JavaScript Stripe bao gồm vào app/views/application.html.erb với dòng này:

<script src="https://js.stripe.com/v3/"></script>

Tiếp theo, bạn sẽ cần thêm một tệp mới (và thư mục!) Trong app/views/checkout/create.js.erb . Trong tệp này, chỉ cần thêm phần sau để cho phép tạo phiên thanh toán khi nhấp vào nút với sự trợ giúp của bộ điều khiển.

var stripe = Stripe("<%= Rails.application.credentials[:stripe][:public] %>")

stripe.redirectToCheckout({
    sessionId: '<%= @session.id %>'
}).then(function (result) {
    console.log(result.error_message)
});

Thiết lập Webhooks

Bây giờ, chúng tôi có một cách để người dùng trả tiền cho các bài đăng! Tuy nhiên, chúng tôi không có cách nào để ứng dụng biết liệu một bài đăng có được trả tiền hay không hoặc kích hoạt bài đăng đó khi nào. Để bắt đầu, hãy thêm Boolean vào mô hình bài đăng để cho biết liệu bài đăng đã được trả tiền chưa. Để sử dụng trình tạo di chuyển Rails, hãy chạy như sau:

rails g migration AddPaymentDetailsToPost

Mở quá trình di chuyển này và thêm dòng sau vào đó:

add_column :posts, :is_paid, :boolean, :default => false

Thao tác này sẽ thêm một thuộc tính / cột vào bảng / mô hình bài đăng được gọi là is_paid . Thuộc tính này là một Boolean được mặc định là false, có nghĩa là bất cứ khi nào một bài đăng được tạo, nó được đánh dấu là chưa được thanh toán cho . Khi một bài đăng được trả tiền, chúng tôi sẽ lật Boolean theo cách thủ công. Nhưng trước tiên, hãy chạy quá trình di chuyển mà bạn vừa viết:

rails db:migrate

Bởi vì các khoản thanh toán không được xử lý ngay lập tức, chúng tôi không thể dựa vào phản hồi API thành công từ Stripe để xác định rằng một công việc đã được thanh toán. Thay vào đó, chúng tôi có thể chỉ ra một điểm cuối trên ứng dụng của chúng tôi để Stripe thực hiện yêu cầu đăng khi một khoản thanh toán hoàn tất xử lý. Quá trình này thường được gọi là webhooks và thực sự đơn giản hơn so với âm thanh của nó!

Để bắt đầu, hãy tạo một bộ điều khiển mới trong app/controllers/ được gọi là WebhooksController. Trong app/controllers/webhooks_controller.rb này , viết như sau:

class WebhooksController < ApplicationController
  skip_before_action :verify_authenticity_token

  def create
    payload = request.body.read
    sig_header = request.env['HTTP_STRIPE_SIGNATURE']
    event = nil

    begin
    event = Stripe::Webhook.construct_event(
      payload, sig_header, Rails.application.credentials[:stripe][:webhook]
    )
    rescue JSON::ParserError => e
      status 400
    return
    rescue Stripe::SignatureVerificationError => e
      # Invalid signature
      puts "Signature error"
      p e
      return
    end

    # Handle the event
    case event.type
    when 'checkout.session.completed'
      session = event.data.object
      post = Post.find_by(id: session.metadata.post_id)]
      post.is_paid = true
      post.save!
    end

    render json: { message: 'success' }
  end
end 

Ngoài bảng soạn sẵn cần thiết, phương pháp này sẽ đưa ra một loại sự kiện cụ thể, được gọi là checkout.session.completed . Tất cả những gì còn lại ở phía Rails của mọi thứ là thêm tuyến đường vào config/routes.rb :

resources :webhooks, only: [:create]

Cuối cùng, bạn sẽ cần kết nối tài khoản Stripe của mình với điểm cuối này trong chính trang tổng quan Stripe. Bởi vì bạn sẽ cung cấp một URL cho trang tổng quan Stripe, điều này sẽ không hoạt động cục bộ! Bạn phải triển khai điều này tới một điểm cuối có thể truy cập internet để các webhook hoạt động bình thường.

Quay lại "Nhà phát triển" trên bảng điều khiển Stripe, nhưng lần này, hãy chọn "Webhooks" trên bảng điều khiển bên trái. Trong phần "Điểm cuối", hãy nhấp vào "Thêm điểm cuối". Cung cấp URL ứng dụng của bạn được nối với /webhooks và gán cho nó sự kiện "checkout.session.completed".

Và đó là nó để tích hợp Stripe! Bước thực tế cuối cùng cho ứng dụng giả của chúng tôi là để trang chỉ mục chỉ hiển thị các bài đăng đã được trả tiền. Điều này có thể dễ dàng được thực hiện trong phương thức chỉ mục của app/controllers/posts_controller.rb . Thay đổi phương thức này thành:

def index
  @posts = Post.where(:is_paid => true)
end

Giờ đây, người dùng có thể tạo một bài đăng, thanh toán cho nó bằng tính năng Stripe checkout và nó sẽ tự động hiển thị trên trang chủ của ứng dụng!

Chuyển sang Sản xuất

Bởi vì webhook của bạn chỉ hoạt động khi được triển khai đến một trang web trực tiếp, nên bạn cần thảo luận về những thay đổi cần thiết để triển khai. Đối với người mới bắt đầu, thông tin liên lạc của bạn phải là HTTPS để thanh toán Stripe hoạt động. Nếu bạn đang gặp bất kỳ sự cố nào, hãy kiểm tra bảng điều khiển JavaScript để biết một số gợi ý từ Stripe.

Rất có thể trong thiết lập ban đầu, bạn đã sử dụng các khóa kiểm tra của Stripe. Nếu bạn đã làm như vậy, phần API Keys của trang tổng quan Stripe sẽ trông giống như thế này.

Cách bán hàng mua một lần bằng đường ray có sọc Ảnh chụp màn hình Khóa API của bảng điều khiển sọc

Chỉ cần nhấp vào nút bật / tắt bên cạnh "xem dữ liệu thử nghiệm" để tiết lộ khóa công khai và bí mật sản xuất của bạn. Bạn sẽ cần mở trình quản lý thông tin đăng nhập Rails theo cách giống như trước đây và thay thế các khóa kiểm tra bằng khóa này để ứng dụng của bạn xử lý dữ liệu trực tiếp. Tuy nhiên, môi trường thử nghiệm rất hữu ích để chạy các giao dịch thử nghiệm với số thẻ tín dụng giả. Nếu bạn có nhiều môi trường hoặc dự định chuyển đổi môi trường này thường xuyên, bạn nên tạo một cặp khóa / giá trị khác trong trình quản lý thông tin xác thực và sử dụng động nó trong mã của bạn.

Kết luận

Chúng tôi đã dành rất nhiều thời gian để tạo ứng dụng mẫu của mình và không quá lâu để tích hợp Stripe. Nhờ có Stripe checkout, chúng tôi đã vượt qua rất nhiều trách nhiệm, bao gồm cả giao diện người dùng, giúp chúng tôi tiết kiệm được nhiều mã. Điều này tạo ra trải nghiệm nhất quán cho người dùng, nhờ sự chấp nhận rộng rãi của Stripe trên thị trường trực tuyến. Nhiệm vụ của Stripe là tăng GDP của Internet và họ cần các ứng dụng như của bạn để làm điều đó. Vì điều này, họ luôn tìm kiếm thậm chí dễ dàng hơn cách để bạn xử lý các khoản thanh toán. Mặc dù Stripe Checkout khá dễ thực hiện, nhưng gần đây họ đã nghĩ ra một cách thậm chí còn nhanh hơn.

Stripe Payment Links là một sản phẩm hoàn toàn mới của Stripe có khả năng làm cho việc tích hợp Checkout của chúng tôi gần như không cần thiết. Tất cả những gì chúng tôi thực sự đã làm là chuyển hướng người dùng đến trang thanh toán được lưu trữ và một liên kết đơn giản có khả năng làm điều đó dễ dàng hơn. Liên kết thanh toán là một giải pháp không có mã dường như hướng đến các nhà bán lẻ nhưng có khả năng hoạt động cho trường hợp sử dụng này. Bất chấp điều đó, Stripe Checkout vẫn tự hào có một chút linh hoạt và được áp dụng nhiều hơn trên thị trường, vì vậy điều quan trọng là phải hiểu đầy đủ.

Một điều mà nhiều doanh nghiệp gặp khó khăn là xử lý thuế, đặc biệt là quốc tế. Stripe gần đây đã giới thiệu một tính năng mới để tự động xử lý việc này cho các doanh nghiệp, nhưng nó vẫn đang trong giai đoạn thử nghiệm. Sau khi có sẵn, nó sẽ giảm đáng kể gánh nặng kế toán của bất kỳ ai sử dụng Stripe để xử lý thanh toán!

Tài liệu của Stripe và các bài viết hiện có hướng đến Ruby on Rails nghiêng về đăng ký hơn là mua một lần. Đăng ký là khoản phí định kỳ gắn liền với một người dùng và một sản phẩm. Về phía Stripe, việc triển khai trông giống như mua một lần. Tuy nhiên, về phía ứng dụng, chúng tôi sẽ phải tích hợp quản lý đăng ký, cho phép người dùng quản lý đăng ký của họ và kiểm tra định kỳ trạng thái đăng ký. Bài viết này tập trung vào các giao dịch mua một lần, nhưng có rất nhiều tài nguyên trong cộng đồng mà bạn cần để quản lý đăng ký.