Sẵn sàng để tích hợp

Tích hợp verify key vào app của bạn bằng 1 endpoint duy nhất

Trang này mô tả đúng hành vi hiện tại của hệ thống verify. Dev chỉ cần gọi POST /api/verify, gửi key, deviceId gameName để kiểm tra key hợp lệ.

Base URL: https://cyperdecode.clickMethod: POSTContent-Type: application/json
Tóm tắt nhanh
  • Key được bind vào thiết bị ở lần verify hợp lệ đầu tiên.
  • Nếu key có gameName sẵn, app phải gửi đúng tên game đó.
  • Nếu key chưa có gameName và app gửi gameName, server sẽ khóa key vào game đó.
  • Logic xác thực nằm trong JSON response, không chỉ dựa vào HTTP status.

1. Tạo key

Admin tạo key trong dashboard và cung cấp cho người dùng trong app của bạn.

2. Lấy deviceId

App cần tạo một deviceId ổn định cho mỗi thiết bị để khóa key đúng máy.

3. Gọi /api/verify

Gửi key, deviceId và gameName mỗi lần app khởi động hoặc trước khi mở tính năng VIP.

4. Kiểm tra status

Nếu status = OK thì cho truy cập. Nếu status = ERROR thì chặn và hiển thị thông báo.

Endpoint

Thông số request cần gửi từ app

URL

https://cyperdecode.click/api/verify

Body

  • key: key mà user nhập.
  • deviceId: mã thiết bị ổn định, duy nhất cho mỗi máy.
  • gameName: tên app/game để khóa key theo sản phẩm.
  • game: alias của gameName, server vẫn chấp nhận.

Lưu ý quan trọng

Nhiều lỗi validate trả về HTTP 200 nhưng status: "ERROR". App phải đọc JSON response, không được chỉ check response.ok.

Request / Response

Mẫu payload để test nhanh

Request JSON
{
  "key": "ABCD-EFGH-IJKL-MNOP",
  "deviceId": "windows-7f3b0c0a-9a21-4be3-a221-4ef11f9a8421",
  "gameName": "My App"
}
Success response
{
  "status": "OK",
  "message": "Xác thực thành công",
  "timeRemaining": "30 ngày 5 giờ",
  "user": "VIP User",
  "gameName": "My App"
}
Error response
{
  "status": "ERROR",
  "message": "Key đã được sử dụng trên thiết bị khác"
}

Ví dụ tích hợp

cURL
curl -X POST "https://cyperdecode.click/api/verify" \
  -H "Content-Type: application/json" \
  -d '{
    "key": "ABCD-EFGH-IJKL-MNOP",
    "deviceId": "windows-7f3b0c0a-9a21-4be3-a221-4ef11f9a8421",
    "gameName": "My App"
  }'
JavaScript / Fetch
async function verifyKey({ key, deviceId, gameName }) {
  const response = await fetch("https://cyperdecode.click/api/verify", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ key, deviceId, gameName })
  });

  const data = await response.json();
  if (data.status !== "OK") {
    throw new Error(data.message || "Verify failed");
  }
  return data;
}

Danh sách lỗi thường gặp

Key không được để trống
Không lấy được Device ID
Key không hợp lệ
Key đã hết hạn
Thiếu tên game
Key không đúng game
Key đã được sử dụng trên thiết bị khác

Gợi ý xử lý trong app

Nếu lỗi là key sai, hết hạn, sai game hoặc sai device thì chặn tính năng VIP ngay. Nếu lỗi là không lấy được deviceId thì yêu cầu user cấp lại quyền hoặc khởi động lại app.

Integration checklist

Trước khi release, dev nên check 4 mục này

  • Sử dụng một deviceId ổn định và không thay đổi sau mỗi lần cài app.
  • Gọi verify ở lúc app mở VIP feature, không lưu kết quả quá lâu nếu key có thể hết hạn.
  • Gửi cùng một gameName ở mọi lần verify để tránh lỗi bind sai game.
  • Luôn check data.status và hiển thị data.message cho user.