Stripe và sử dụng stripe trong RoR
Bài đăng này đã không được cập nhật trong 3 năm
I. Stripe là gì
- Stripe là một công ty công nghệ của Mỹ hoạt động tại hơn 25 quốc gia, cho phép cả cá nhân và doanh nghiệp tư nhân thực hiện thanh toán qua Internet.
- Stripe tập trung vào việc cung cấp các hạ tầng kỹ thuật, chống gian lận và các biện pháp cần thiết để vận hành các hệ thống thanh toán trực tuyến.
II. Gem stripe:
1. Đăng ký tài khoản stripe và lấy stripe key:
- Truy cập https://dashboard.stripe.com/register và thực hiện đăng ký stripe account.
- Vào email đã sử dụng để đăng ký stripe account, kích hoạt stripe account.
- Sau khi kích hoạt tài khoản thành công, đăng nhập vào stripe, truy cập https://dashboard.stripe.com/account/apikeys để lấy stripe secret key.
2. Cài đặt gem stripe:
- Trong Gemfile, thực hiện thêm gem "stripe".
gem "stripe"
- Chạy lệnh "bundle install".
bundle install
- Tạo file config/initializers/stripe.rb để config stripe secret key. Ví dụ với stripe secret key là "sk_test_D6f5APOl1ypBsSIbCNCkXzom", file stripe.rb sẽ có nội dung lại như sau:
Stripe.api_key = "sk_test_D6f5APOl1ypBsSIbCNCkXzom"
3. Sử dụng gem stripe:
- Trong việc thanh toán có 2 đối tượng tham gia chính, trong bài viết này sẽ được gọi là user (bên thực hiện thanh toán) và shop (bên nhận được tiền sau khi hoàn tất thanh toán)
a. Các thao tác với shop
- Đăng ký shop (tạo Stripe::Account object)
- Thực hiện gọi API tạo account sử dụng gem stripe.
account = Stripe::Account.create(
type: "standard",
country: "US",
email: "bob@example.com"
)
- Lấy thông tin shop đã đăng ký (lấy Stripe::Account obejct)
- Trong Stripe::Account object trả về có attribute "id" chứa thông tin về id của shop đã đăng ký .
- Sử dụng attribute "id" và gọi API lấy Stripe::Account sử dụng gem stripe (giả sử id = "acct_1AzN9IKHsiMWhoyS").
account = Stripe::Account.retrieve("acct_1AzN9IKHsiMWhoyS")
- Đăng ký bank account cho shop (tạo Stripe::BankAccount object)
- Trong Stripe::Account object trả về có attribute "external_accounts" chứa thông tin về các bank account của shop.
"external_accounts": {
"object": "list",
"data": [
],
"has_more": false,
"total_count": 0,
"url": "/v1/accounts/acct_1AzN9IKHsiMWhoyS/external_accounts"
},
- Sử dụng "external_acounts" và gọi API tạo bank account sử dụng gem stripe.
account = Stripe::Account.retrieve("acct_1AzN9IKHsiMWhoyS")
account.external_accounts.create(
object: "bank_account",
account_number: "0123456789",
country: "US"
currency: "$"
)
- Lấy thông tin bank account shop đã đăng ký (lấy Stripe::BankAccount object)
- Trong Stripe::BankAccount object trả về có attribute "id" chứa thông tin về id của bank account mà shop đã đăng ký .
- Sử dụng attribute "id" và gọi API lấy Stripe::BankAccount sử dụng gem stripe (giả sử id = "ba_1BJzxlKHsiMWhoySsAwvRHJX").
account = Stripe::Account.retrieve("acct_1AzN9IKHsiMWhoyS")
bank_account = account.external_accounts.retrieve("ba_1BJzxlKHsiMWhoySsAwvRHJX")
b. Các thao tác với customer
- Đăng ký user (tạo Stripe::Customer object)
- Thực hiện gọi API tạo customer sử dụng gem stripe.
customer = Stripe::Customer.create()
- Lấy thông tin user đã đăng ký (lấy Stripe::Customer object)
- Trong Stripe::Customer object trả về có attribute "id" chứa thông tin về id của user đã đăng ký .
- Sử dụng attribute "id" và gọi API lấy Stripe::Customer sử dụng gem stripe (giả sử id = "cus_BhOl6cXJ4LVKMP").
customer = Stripe::Customer.retrieve("cus_BhOl6cXJ4LVKMP")
- Đăng ký card cho shop (tạo Stripe::BankAccount object)
- Trong Stripe::Customer object trả về có attribute "sources" chứa thông tin về các card của user.
"sources": {
"object": "list",
"data": [
],
"has_more": false,
"total_count": 0,
"url": "/v1/customers/cus_BhOl6cXJ4LVKMP/sources"
},
- Sử dụng sources và gọi API tạo card sử dụng gem stripe.
customer = Stripe::Customer.retrieve("cus_BhOl6fT9m0i96t")
customer.sources.create(
object: "card",
exp_month: "12",
exp_year: "2017",
number: "01234567"
)
- Lấy thông tin card user đã đăng ký (lấy Stripe::Card object)
- Trong Stripe::Card object trả về có attribute "id" chứa thông tin về id của card user đã đăng ký .
- Sử dụng attribute "id" và gọi API lấy Stripe::Card sử dụng gem stripe (giả sử id = "card_1BJzxiKHsiMWhoyS46RgZDNl").
customer = Stripe::Customer.retrieve("cus_BhOl6fT9m0i96t")
card = customer.sources.retrieve("card_1BJzxiKHsiMWhoyS46RgZDNl")
c. Các thao tác giữa shop và user:
- User thanh toán cho shop (tạo Stripe::Charge object)
- Thực hiện gọi API tạo charge sử dụng gem stripe.
- Giả sử card của user có "id" là "card_1BJzxiKHsiMWhoyS46RgZDNl" và account của shop có "id" là "acct_1AzN9IKHsiMWhoyS"
charge = Stripe::Charge.create(
card: "card_1BJzxiKHsiMWhoyS46RgZDNl"
amount: "2000",
currency: "usd",
destination: {
account: "acct_1AzN9IKHsiMWhoyS"
}
)
- Shop trả lại tiền cho user (tạo Stripe::Charge object):
- Trong Stripe::Chanrge object trả về có attribute "id" chứa thông tin về id của charge user đã thanh toán cho shop .
- Sử dụng attribute "id"và thực hiện gọi API tạo refund sử dụng gem stripe.
refund = Stripe::Refund.create(
charge: "ch_1BJzxhKHsiMWhoySZDWRjsmc"
)
All rights reserved