Xin chào mọi người 😗, lâu lắm rồi mới có thời gian để chia sẻ một số điều mà mình học được sau một quãng thời gian làm việc với stripe.
1. Giới thiệu
Stripe là cổng thanh toán của Mỹ được thành lập năm 2010 cho phép các trang thương mại điện tử nhận thanh toán trên website bán hàng của mình.
- Ưu điểm:
- Bảo mật.
- Cung cấp công cụ báo cáo chi tiết
- Khách hàng thanh toán trực tiếp qua thẻ mà không cần phải đăng ký tài khoản
- Ở những quốc gia mà Stripe hỗ trợ thì việc đăng ký rất dễ dàng
- Stripe cũng hỗ trợ nhiều đơn vị tiền tệ giúp cho việc giao dịch thuận tiện hơn
- Nhược điểm
- Chưa cho phép đăng ký ở nhiều quốc gia trong đó có Việt Nam và cổng thanh toán này cũng không thích hợp với những ngành nghề, sản phẩm bị hạn chế như rượu các loại, các động thực vật quý hiếm, hàng hóa có chứa chất phóng xạ…
2. Thực hành
2.1. Tạo dự án nodejs demo
Bạn có thể thực hiện các câu lệnh sau để có thể thực hiện test.
npm init => điền các thông tin cần thiết
npm i express
npm i -g nodemon => giúp các thay đổi của code sẽ được tự động chạy lại
npm i dotenv
tạo 1 file server.js và thêm đoạn code sau:
const express = require('express')
const app = express()
const port = 8000
app.get('/', (req, res) => {
res.send('Hello World!')
})
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
=> cuối cùng thêm "dev": "nodemon -L ./server.js",
vào scripts trong file package.json
Kết quả:
Mở trình duyệt chạy: http://localhost:8000/ => Nếu hiển thị dòng chữ Hello World! là thành công!!!
2.2. Create tài khoản và lấy API keys for developers.
*Khuyến khích: Nên đưa các biến env vào 1 file config.
const dotenv = require('dotenv')
dotenv.config({ path: '.env' })
module.exports = {
publishableKey: process.env.PUBLISHABLE_KEY,
secretKey: process.env.SECRET_KEY,
apiVersion: process.env.API_VERSION
}
2.3. Test thanh toán 1 lần
Đầu tiên chúng ta sẽ tạo 1 file stripe.js cùng cấp với server.js để viết những hàm cần thiết để có thể tái sử dụng với nhiều trường hợp.
Khởi tạo stripe từ API keys.
const stripeConfig = require('./stripe.config')
const Stripe = require('stripe')
const createStripe = async () => {
return new Stripe(stripeConfig.secretKey, {
apiVersion: stripeConfig.apiVersion
})
}
=> Mục đích để thuận tiện sau mỗi lần gọi.
-Khái niệm PaymentIntent: Để đơn giản, giống khi mua hàng, bạn cần 1 hóa đơn mặt hàng mua để biết giá thành của nó, và ở đây PaymentIntent mang ý nghĩa như vậy.
const stripe = {
createPaymentIntent: async (amount) => {
const stripe = await createStripe()
const paymentIntent = await stripe.paymentIntents.create({
amount: amount, // Số tiền thanh toán
currency: 'jpy' // Loại tiền tệ (ví dụ: 'usd')
})
return paymentIntent
},
}
-Khái niệm paymentMethod: Khi có hóa đơn bạn lựa chọn trả tiền mặt hay chuyển khoản thì tương tự paymentMethod mang ý nghĩa biểu thị phương thức thanh toán, và trong bài này mình sẽ sử dụng thẻ card.
testCard: async () => {
const stripe = await Stripe(stripeConfig.publishableKey)
const paymentMethod = {
type: 'card',
card: {
number: '4242424242424242', // stripe cung cấp mã thẻ để dev có thể test
exp_month: 12,
exp_year: 2025,
cvc: '123'
}
}
return await stripe.paymentMethods.create(paymentMethod)
}
- Thực hiện thanh toán: Sau khi có hóa đơn và phương thức trả tiền thì chúng ta trả tiền thôi :v
createPayment: async (amount) => {
const stripeDefault = await createStripe()
const paymentIntent = await stripe.createPaymentIntent(amount)
const paymentMethodId = await stripe.testCard()
return await stripeDefault.paymentIntents.confirm(paymentIntent.id, {
payment_method: paymentMethodId.id
})
},
=> Lưu ý: bạn sẽ để testCard và createPayment ngay dưới function createPaymentIntent và vẫn nằm trong stripe.
2.4. Sử dụng postman để test
- Quay lại file server.js, chúng ta sẽ import file stripe.js và thêm phương thức post để có thể test trên postman.
const express = require('express')
const app = express()
const port = 8000
const stripe = require('./stripe')
app.get('/', (req, res) => {
res.send('Hello World!')
})
app.post('/payment', async (req, res) => {
const response = await stripe.createPayment(100) //mang ý nghĩa số tiền thanh toán
res.status(200).json(response)
})
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
- Mở postman send thử, nếu các bạn không gặp lỗi gì và hiển thị như dưới là thành công 😗😗.
2.5. Kiểm tra trên trang chủ stripe
Các bạn có thể click và xem từng chi tiết các bạn muốn, đơn giản nhất là vào Payment sẽ hiển thị tất cả thanh toán mà bạn đã thực hiện.
*Note: Để bài viết ngắn gọn cũng như đi thẳng vào vấn đề nên nếu bạn muốn hiểu rõ hơn về các khái niệm, các bạn có thể lên doc chính chủ của stripe .
Nếu các bạn hứng thú có thể comment hay đặt câu hỏi, mình sẽ trả lời, hoặc nếu có chỗ nào sai sót hay cần cải thiện mình luôn mong muốn góp ý từ các bạn.
Cuối cùng, chúc các bạn 1 ngày vui vẻ và làm việc hiệu quả, cùng chào đón thanh toán gia hạn(subscriptions) trong bài viết tiếp theo). Cảm ơn các bạn đã đọc đến cuối bài viết, yêu tất cả các bạn 😗😗😗.