1) ตั้งค่าเบื้องต้น
หมายเหตุ: ระบบจะใส่ Authorization: Bearer <token>
ให้อัตโนมัติเมื่อเรียก API ที่ต้องล็อกอิน
2) Login – POST /auth/login
รับ username
, password
แล้วคืน token
สำหรับใช้งาน API อื่น ๆ
cURL ตัวอย่าง
curl -X POST {{BASE}}/auth/login \
-H "Content-Type: application/json" \
-d '{
"username": "testuser",
"password": "test1234"
}'
(รอผลลัพธ์)
3) Spin – POST /slot_spin
ส่ง bet
(จำนวนเต็ม ≥ 1) ผ่าน body เท่านั้น. ต้องมี Bearer token. ระบบจะหักเครดิตด้วย bet
จากนั้นสุ่มผลลัพธ์ และบวก coin
คืนเข้าบัญชี แล้วตอบกลับ credit_balance
ล่าสุด
cURL ตัวอย่าง
curl -X POST {{BASE}}/slot_spin \
-H "Authorization: Bearer {{TOKEN}}" \
-H "Content-Type: application/json" \
-d '{
"bet": 50
}'
(รอผลลัพธ์)
4) Upload Screenshot – POST /upload_screenshot
อัปโหลดรูปภาพ (ไฟล์ฟิลด์ชื่อ file
) เป็น multipart/form-data. ต้องมี Bearer token. ฝั่งเซิร์ฟเวอร์จะรี-encode ภาพ, ลบ metadata และบันทึกชื่อไฟล์เป็นรูปแบบ <username>_YYYYMMDDhhmmss_UUID_RAND.png
cURL ตัวอย่าง
curl -X POST {{BASE}}/upload_screenshot \
-H "Authorization: Bearer {{TOKEN}}" \
-F "file=@/absolute/path/to/image.png"
(รอผลลัพธ์)
5) Paytable – GET /paytable
ตารางการจ่าย (ไม่ต้องล็อกอิน)
(รอผลลัพธ์)
แนวปฏิบัติด้านความปลอดภัย
- ส่ง
Authorization: Bearer <token>
เฉพาะ endpoint ที่ต้องล็อกอิน (/slot_spin
,/upload_screenshot
,/auth/me
) - ฝั่งอัปโหลดใช้การตรวจ magic bytes + รี-encode ด้วย
sharp
+ ตัด metadata + จำกัดพิกเซล + rate limit - โฟลเดอร์อัปโหลดไม่ถูกเสิร์ฟโดยตรง และบันทึกไฟล์ด้วยสิทธิ์ 0600
- Spin ใช้ per-user lock ป้องกัน race condition ในการหัก/บวกเครดิต
- อย่าเก็บ token ไว้ใน query string; ใช้ header เท่านั้น
ตัวอย่าง Error Responses
รวม error ที่ API อาจส่งกลับ พร้อมความหมายและตัวอย่าง JSON จริง
ต้องเข้าสู่ระบบก่อน
คุณยังไม่ได้ล็อกอิน หรือยังไม่ได้ส่ง Authorization: Bearer <token>
HTTP 401 • Missing Bearer token
{
"success": false,
"message": "Missing Bearer token"
}
เซสชันหมดอายุ
โทเคนไม่ถูกต้องหรือหมดอายุ ต้องทำการ Login ใหม่
HTTP 401 • Invalid or expired token
{
"success": false,
"message": "Invalid or expired token"
}
ไม่พบบัญชีผู้ใช้
โทเคนชี้ไปยังผู้ใช้ที่ถูกลบหรือไม่มีอยู่จริง
HTTP 401 • User not found
{
"success": false,
"message": "User not found"
}
ข้อมูลไม่ถูกต้อง
Body request ไม่ผ่าน schema validation (เช่น ลืมส่ง bet หรือชนิดข้อมูลผิด)
HTTP 400 • Validation failed
{
"statusCode": 400,
"error": "Bad Request",
"message": "Validation failed",
"validation": {
"body": {
"keys": ["bet"]
}
}
}
Bet ไม่ถูกต้อง
ค่า bet
ต้องเป็นจำนวนเต็ม ≥ 1
HTTP 400 • Invalid bet
{
"success": false,
"message": "Invalid bet"
}
เครดิตไม่เพียงพอ
เครดิตคงเหลือไม่พอสำหรับ bet ที่ส่งมา
HTTP 400 • Insufficient credit
{
"success": false,
"message": "Insufficient credit"
}
ไม่ได้อัปโหลดไฟล์
ต้องส่งฟิลด์ชื่อ file
ใน multipart/form-data
HTTP 400 • No file uploaded
{
"success": false,
"message": "No file uploaded"
}
ไฟล์ภาพไม่รองรับ
อัปโหลดได้เฉพาะ PNG / JPEG / WEBP เท่านั้น
HTTP 400 • Unsupported image type
{
"success": false,
"message": "Unsupported image type"
}
รูปใหญ่เกินไป
ภาพมีพิกเซลรวมเกินกำหนด (เช่น > 16MP)
HTTP 400 • Image too large
{
"success": false,
"message": "Image too large"
}
อัปโหลดไม่สำเร็จ
เกิดข้อผิดพลาดในการบันทึกไฟล์
HTTP 400 • Upload failed
{
"success": false,
"message": "Upload failed"
}
อัปโหลดถี่เกินไป
ระบบจำกัดการอัปโหลดบ่อยเกินช่วงเวลา
HTTP 429 • Too many uploads, slow down.
{
"success": false,
"message": "Too many uploads, slow down."
}
ยิงคำขอถี่เกินไป
ระบบป้องกัน rate limit ทำงาน
HTTP 429 • Too many requests, please try again later.
{
"success": false,
"message": "Too many requests, please try again later."
}
เซิร์ฟเวอร์ผิดพลาด
เกิดข้อผิดพลาดภายในระบบ
HTTP 500 • Server error
{
"success": false,
"message": "Server error"
}