Bắt đầu nhanh
Hướng dẫn tích hợp SePay OAuth2 trong 10 phút. Từ đăng ký ứng dụng, xác thực người dùng, đến gọi API đầu tiên.
Hướng dẫn này giúp bạn tích hợp SePay OAuth2 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 OAuth2
- 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