PayOS
PayOS là cổng thanh toán QR banking dễ setup nhất, phù hợp cho người mới bắt đầu.
Đăng ký tài khoản
-
Truy cập website
Vào https://payos.vn
-
Đăng ký tài khoản doanh nghiệp
- Click “Đăng ký”
- Chọn loại tài khoản: Doanh nghiệp
- Điền thông tin: Tên công ty, MST, địa chỉ
-
Xác minh thông tin
- Upload giấy tờ: GPKD, CMND/CCCD
- Chờ PayOS xác minh (1-3 ngày làm việc)
-
Liên kết ngân hàng
- Vào Tài khoản → Ngân hàng
- Thêm tài khoản ngân hàng nhận tiền
- Xác minh bằng chuyển khoản test
-
Lấy API credentials
- Vào Developer → API Keys
- Copy:
- Client ID
- API Key
- Checksum Key
Cấu hình plugin
File: plugins/SimpPay/banking/payos-config.yml
# SimpPay @ 2026# Made by typical.smc
# Bật/tắt cổng PayOSenabled: true
# API Credentials từ PayOS Dashboardclient-id: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"api-key: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"checksum-key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
# Timeout cho polling (giây)# Sau timeout, payment sẽ bị canceltimeout: 300
# Interval giữa các lần check status (giây)interval: 5
# Số tiền tối thiểu (VNĐ)min-amount: 10000
# Số tiền tối đa (VNĐ)max-amount: 50000000Chi tiết cấu hình
enabled
- Kiểu:
boolean - Mặc định:
true - Mô tả: Bật/tắt cổng PayOS
client-id
- Kiểu:
string - Bắt buộc: Có
- Mô tả: Client ID từ PayOS Dashboard
Lấy từ: PayOS Dashboard → Developer → API Keys
api-key
- Kiểu:
string - Bắt buộc: Có
- Mô tả: API Key từ PayOS Dashboard
checksum-key
- Kiểu:
string - Bắt buộc: Có
- Mô tả: Checksum Key để verify signature
Dùng để tạo và verify signature cho API requests.
timeout
- Kiểu:
integer(giây) - Mặc định:
300(5 phút) - Mô tả: Thời gian tối đa chờ thanh toán
Sau timeout giây, nếu thanh toán vẫn PENDING, plugin sẽ dừng polling.
Khuyến nghị:
- Server ổn định:
300(5 phút) - Cho người chơi nhiều thời gian:
600(10 phút) - Test:
120(2 phút)
interval
- Kiểu:
integer(giây) - Mặc định:
5 - Mô tả: Khoảng thời gian giữa các lần check status
Plugin sẽ gọi API check status mỗi interval giây.
Khuyến nghị:
- Không nên < 3 giây (tránh spam API)
- Không nên > 15 giây (người chơi chờ lâu)
- Tối ưu:
5giây
min-amount / max-amount
- Kiểu:
integer(VNĐ) - Mặc định:
10000/50000000 - Mô tả: Giới hạn số tiền nạp
Người chơi chỉ có thể nạp trong khoảng min-amount đến max-amount.
Ví dụ:
min-amount: 20000 # Tối thiểu 20kmax-amount: 10000000 # Tối đa 10 triệuAPI Endpoints
PayOS sử dụng các endpoints sau:
Create Payment Link
POST https://api-merchant.payos.vn/v2/payment-requestsRequest:
{ "orderCode": 1234567890, "amount": 50000, "description": "Nap tien Minecraft - player123", "returnUrl": "https://yourserver.com/return", "cancelUrl": "https://yourserver.com/cancel"}Response:
{ "code": "00", "desc": "success", "data": { "bin": "970422", "accountNumber": "1234567890", "accountName": "NGUYEN VAN A", "amount": 50000, "description": "Nap tien Minecraft - player123", "orderCode": 1234567890, "paymentLinkId": "abc123", "status": "PENDING", "checkoutUrl": "https://pay.payos.vn/abc123", "qrCode": "https://api.payos.vn/qr/abc123.png" }}Check Payment Status
GET https://api-merchant.payos.vn/v2/payment-requests/{orderCode}Response:
{ "code": "00", "desc": "success", "data": { "orderCode": 1234567890, "amount": 50000, "status": "PAID", "transactions": [ { "reference": "FT12345678", "amount": 50000, "accountNumber": "1234567890", "description": "Nap tien Minecraft - player123", "transactionDateTime": "2026-02-14T10:30:00" } ] }}Payment Status
| Status | Mô tả | Hành động |
|---|---|---|
PENDING | Chờ thanh toán | Tiếp tục polling |
PAID | Đã thanh toán | Award coins |
CANCELLED | Đã hủy | Thông báo |
EXPIRED | Hết hạn | Thông báo timeout |
Testing
-
Bật debug mode
main-config.yml:debug: true -
Reload plugin
/simppayadmin reload -
Test thanh toán
Trong game:
/bank 50000 -
Kiểm tra console
[SimpPay] [DEBUG] PayosHandler: Creating payment link for 50000 VND[SimpPay] [DEBUG] PayosHandler: API Response: {"code":"00","desc":"success",...}[SimpPay] [DEBUG] PayosHandler: QR Code URL: https://api.payos.vn/qr/abc123.png[SimpPay] [DEBUG] PaymentHandlingListener: Starting polling for order #1234567890[SimpPay] [DEBUG] PayosHandler: Checking status for order #1234567890[SimpPay] [DEBUG] PayosHandler: Status: PAID[SimpPay] [DEBUG] PaymentSuccessEvent fired -
Quét QR và thanh toán
- Mở app ngân hàng
- Quét QR code
- Xác nhận chuyển khoản
-
Kiểm tra coins
/points check <player>
Troubleshooting
Invalid signature
Account not verified
QR code không hiển thị
Payment timeout
Best practices
-
Verify account trước: Hoàn tất xác minh tài khoản PayOS trước khi deploy
-
Test với số tiền nhỏ: Test với 10k-20k trước khi cho người chơi dùng
-
Monitor transactions: Kiểm tra dashboard PayOS định kỳ
-
Backup gateway: Cấu hình thêm Web2M hoặc Sepay làm backup
-
Secure credentials: Không commit API keys vào Git
Phí giao dịch
PayOS tính phí theo từng giao dịch:
| Loại giao dịch | Phí |
|---|---|
| Chuyển khoản nội địa | 1,000 - 3,000 VNĐ |
| QR Code | 1,000 - 3,000 VNĐ |
Xem thêm
- Cấu hình xu & phần thưởng - Tỷ lệ quy đổi coins
- Web2M - Alternative gateway
- Sepay - Webhook gateway