Quay Thưởng Mini Game

API để quay thưởng mini game. Sau khi người dùng đã có lượt chơi (từ API play-mini-game), gọi API này để quay thưởng. API sẽ tự động tính toán kết quả dựa trên tỷ lệ trúng (ty_le_trung), lưu kết quả vào mini_game_log, cập nhật lượt chơi (used = 1), và trả về voucher code nếu trúng thưởng.
POST https://api.socdo.vn/mini-app/v1/spin-mini-game
Headers Bắt buộc
  • Authorization: Bearer <user_token> - Bắt buộc - Token xác thực user
Body/Query Bắt buộc
  • play_id: ID của lượt chơi (từ API play-mini-game, số nguyên)
Ví dụ cURL
curl -X POST \
  "https://api.socdo.vn/mini-app/v1/spin-mini-game" \
  -H "Authorization: Bearer YOUR_USER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"play_id": 123}'
Response thành công - Trúng Voucher (200)
{
    "success": true,
    "message": "Chúc mừng! Bạn đã trúng voucher!",
    "data": {
        "log_id": 456,
        "play_id": 123,
        "user_id": 36851,
        "mini_game_id": 2,
        "result_type": "voucher",
        "result": "VOUCHER944",
        "played_at": "2025-11-15 14:35:00",
        "voucher": {
            "id": 944,
            "code": "VOUCHER944",
            "discount": 50000,
            "max_discount": 0,
            "type": "tru",
            "scope": "all",
            "condition_amount": 200000,
            "description": "Giảm 50.000đ cho đơn hàng từ 200.000đ",
            "min_price": 0,
            "max_price": 0,
            "start": 1763606400,
            "expired": 1766174400,
            "start_readable": "15/11/2025 09:00",
            "expired_readable": "20/12/2025 09:00"
        }
    }
}
Response thành công - Thử Lại (200)
{
    "success": true,
    "message": "Chúc bạn may mắn lần sau!",
    "data": {
        "log_id": 457,
        "play_id": 123,
        "user_id": 36851,
        "mini_game_id": 2,
        "result_type": "try_again",
        "result": "Thử lại",
        "played_at": "2025-11-15 14:35:00"
    }
}
Giải thích Response
Trường Loại Mô tả
log_id number ID của log quay thưởng (từ bảng mini_game_log)
play_id number ID của lượt chơi đã sử dụng
result_type string Loại kết quả: "voucher" (trúng) hoặc "try_again" (thử lại)
result string Kết quả: mã voucher nếu trúng, hoặc "Thử lại" nếu không trúng
voucher object Thông tin chi tiết voucher (chỉ có khi result_type = "voucher")
Mã lỗi phổ biến
400 {"success": false, "message": "Thiếu play_id hoặc giá trị không hợp lệ"}
401 {"success": false, "message": "Thiếu user token. Cần Authorization header với Bearer token"}
401 {"success": false, "message": "User token không hợp lệ hoặc đã hết hạn"}
404 {"success": false, "message": "Không tìm thấy lượt chơi hoặc lượt chơi đã được sử dụng", "play_id": 123}
500 {"success": false, "message": "Mini game chưa cấu hình tỷ lệ trúng thưởng"}
500 {"success": false, "message": "Lỗi khi lưu kết quả quay thưởng"}
Lưu ý
  • User Token: Bắt buộc phải có để xác định người dùng
  • play_id: Phải là lượt chơi chưa sử dụng (used = 0) và thuộc về user này
  • Tỷ lệ trúng: API sử dụng thuật toán cumulative probability để quay thưởng dựa trên ty_le_trung
  • Lưu kết quả: API tự động:
    • Update lượt chơi: set used = 1 trong bảng mini_game_play
    • Insert log: tạo record mới trong bảng mini_game_log với kết quả quay
  • Voucher: Nếu trúng voucher, API sẽ lấy thông tin chi tiết từ bảng coupon và trả về trong response
  • Transaction: API sử dụng database transaction để đảm bảo tính nhất quán (nếu lỗi sẽ rollback)
  • Một lượt chơi chỉ quay được 1 lần: Sau khi quay, lượt chơi sẽ được đánh dấu used = 1 và không thể quay lại
Cách tính tỷ lệ trúng

API sử dụng thuật toán cumulative probability:

  1. Random một số từ 0.01 đến 100.00
  2. Tính tổng tích lũy (cumulative) của các tỷ lệ theo thứ tự
  3. Khi random số ≤ cumulative, sẽ trúng phần thưởng tương ứng
  4. Key "0" trong ty_le_trung là tỷ lệ "thử lại", các key khác là ID coupon

Ví dụ: ty_le_trung = {"0": "30", "944": "14.0", "943": "14.0"}

  • Random ≤ 30 → Trúng "Thử lại"
  • 30 < Random ≤ 44 → Trúng voucher 944
  • 44 < Random ≤ 58 → Trúng voucher 943
  • Random > 58 → Trúng "Thử lại" (phần còn lại)
API Liên Quan