Hướng dẫn này giúp bạn tích hợp SePay OAuth 2.0 nhanh chóng: từ lấy client credentials, xác thực người dùng, đến gọi API đầu tiên.
Điều kiện tiên quyết
- Tài khoản SePay (đăng ký tại my.sepay.vn)
- Đã được cấp
client_idvàclient_secret(liên hệ SePay để được hỗ trợ) - Đã cấu hình
redirect_urikhi đăng ký ứng dụng - Một ứng dụng server-side (PHP, Python, Node.js, ...)
URLs quan trọng
| URL | Mục đích |
|---|---|
https://my.sepay.vn/oauth/authorize | Trang ủy quyền người dùng |
https://my.sepay.vn/oauth/token | Lấy/làm mới access token |
https://my.sepay.vn/api/v1 | Base URL cho tất cả API |
Bước 1: Chuyển hướng người dùng đến trang ủy quyền
Tạo URL ủy quyền và chuyển hướng người dùng đến đó:
https://my.sepay.vn/oauth/authorize?response_type=code&client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URI&scope=bank-account:read transaction:read&state=RANDOM_STATE_VALUE
| Tham số | Bắt buộc | Mô tả |
|---|---|---|
response_type | Có | Luôn là code |
client_id | Có | Client ID của ứng dụng |
redirect_uri | Có | URL nhận callback, phải khớp với URL đã đăng ký |
scope | Có | Quyền truy cập, phân tách bằng dấu cách |
state | Có | Giá trị ngẫu nhiên chống CSRF |
Người dùng sẽ đăng nhập SePay và đồng ý cấp quyền. Sau đó SePay chuyển hướng về redirect_uri của bạn:
https://your-app.com/callback?code=AUTHORIZATION_CODE&state=RANDOM_STATE_VALUE
Mã ủy quyền (code) chỉ có hiệu lực 5 phút và chỉ sử dụng được 1 lần. Đổi ngay lấy access token.
Bước 2: Đổi mã ủy quyền lấy Access Token
curl -X POST "https://my.sepay.vn/oauth/token" \-H "Content-Type: application/x-www-form-urlencoded" \-d "grant_type=authorization_code" \-d "code=AUTHORIZATION_CODE" \-d "redirect_uri=YOUR_REDIRECT_URI" \-d "client_id=YOUR_CLIENT_ID" \-d "client_secret=YOUR_CLIENT_SECRET"
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "REFRESH_TOKEN_STRING"
}
- Access token có hiệu lực 1 giờ (3600 giây)
- Refresh token có hiệu lực 1 tháng
- Lưu cả hai token an toàn ở phía server
Bước 3: Gọi API với Access Token
Thêm access token vào header Authorization để gọi bất kỳ API nào:
curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \https://my.sepay.vn/api/v1/bank-accounts
{
"status": 200,
"messages": [],
"bankaccounts": [
{
"id": 12345,
"bank_account_number": "1234567890",
"bank_short_name": "ACB",
"bank_full_name": "Ngân hàng TMCP Á Châu",
"accumulated_balance": 5000000
}
]
}
Bước 4: Làm mới token khi hết hạn
Khi access token hết hạn (API trả về 401), dùng refresh token để lấy token mới:
curl -X POST "https://my.sepay.vn/oauth/token" \-H "Content-Type: application/x-www-form-urlencoded" \-d "grant_type=refresh_token" \-d "refresh_token=YOUR_REFRESH_TOKEN" \-d "client_id=YOUR_CLIENT_ID" \-d "client_secret=YOUR_CLIENT_SECRET"
{
"access_token": "NEW_ACCESS_TOKEN",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "NEW_REFRESH_TOKEN"
}
Mỗi lần làm mới sẽ trả về access token và refresh token mới. Lưu lại cả hai để sử dụng cho lần tiếp theo.
Các phạm vi (Scopes) hỗ trợ
| Scope | Mô tả |
|---|---|
bank-account:read | Đọc thông tin tài khoản ngân hàng |
transaction:read | Đọc thông tin giao dịch |
webhook:read | Đọc thông tin webhook |
webhook:write | Tạo/cập nhật webhook |
webhook:delete | Xóa webhook |
profile | Đọc thông tin người dùng |
company | Đọc thông tin công ty |
Tổng hợp luồng tích hợp
| Bước | Hành động | URL/Endpoint |
|---|---|---|
| 1 | Chuyển hướng người dùng ủy quyền | GET /oauth/authorize |
| 2 | Đổi authorization code lấy token | POST /oauth/token (grant_type=authorization_code) |
| 3 | Gọi API với Bearer token | GET /api/v1/* |
| 4 | Làm mới token khi hết hạn | POST /oauth/token (grant_type=refresh_token) |
Mã lỗi thường gặp
| Mã lỗi | Ý nghĩa | Xử lý |
|---|---|---|
invalid_client | Sai client_id hoặc client_secret | Kiểm tra lại credentials |
invalid_grant | Mã ủy quyền hết hạn hoặc đã sử dụng | Yêu cầu người dùng xác thực lại |
invalid_scope | Scope không hợp lệ | Kiểm tra lại danh sách scope |
access_denied | Người dùng từ chối cấp quyền | Thông báo cho người dùng |
| 401 Unauthorized | Access token hết hạn hoặc không hợp lệ | Làm mới token hoặc xác thực lại |
Tiếp theo
Xem chi tiết từng phần với đầy đủ tham số, mã lỗi, và code mẫu:
- Đăng ký ứng dụng - Lấy client_id và client_secret
- Luồng xác thực - Chi tiết các bước OAuth 2.0
- Access Token - Quản lý và lưu trữ token
- API Tài khoản ngân hàng - Xem tài khoản, số dư
- API Giao dịch - Xem lịch sử giao dịch
- API Webhooks - Quản lý webhook
- API Người dùng - Thông tin cá nhân
- API Công ty - Thông tin công ty