Đường thiết lập: Dashboard → Sửa server → Phần thưởng vote (và Chi tiết Minecraft cho Votifier).
01
Cách hoạt động
1
Người chơi mở link vote của bạn, tốt nhất kèm ?p=USERNAME để form được điền sẵn.
2
Họ gửi vote. Chúng tôi áp dụng cooldown 24 giờ theo IP (và theo tài khoản đã đăng nhập). Nếu có cấu hình phần thưởng, tên người dùng / tham số là bắt buộc.
3
Chúng tôi thông báo hệ thống phần thưởng của bạn: HTTP GET tới postback URL và/hoặc gói Votifier tới host Minecraft — dùng cùng tham số và IP của người vote.
4
Bạn trao phần thưởng. Lỗi giao trên phía bạn được ghi log tại đây nhưng không xóa vote.
Chọn phương thức
HTTP Postback
Phù hợp nhất cho website, launcher và game không phải Minecraft. Với Minecraft đây là lựa chọn thay thế tùy chọn cho Votifier (hoặc bổ sung nếu bạn cũng thưởng trên website).
Với Minecraft, dùng Votifier trước. HTTP postback là tùy chọn (hoặc bổ sung). Mỗi kênh đã bật chạy độc lập sau khi vote.
Bắt đầu nhanh
1Đăng nhập và mở Dashboard.
2Sửa listing server đã được duyệt.
3Đặt Postback URL và/hoặc bật Votifier trong Chi tiết Minecraft.
4Sao chép link vote khuyến khích từ form sửa (kết thúc bằng ?p=USERNAME).
5Đặt link đó lên website hoặc Discord; thay USERNAME theo từng người chơi.
6Vote thử và xác nhận phần thưởng đã tới.
02
Postback PHP
Sau vote thành công chúng tôi gọi URL của bạn với tham số người chơi và IP của họ. Script của bạn đánh dấu tài khoản đã vote và trao điểm hoặc vật phẩm.
Whitelist IP outbound công khai của website này trong firewall và script postback. Từ chối mọi nguồn khác. Ưu tiên HTTPS.
1. Đặt Postback URL
Dashboard → Sửa server → Phần thưởng vote → Postback URL.
https://YOURDOMAIN/postback.php
Tên file tùy ý — dùng path nào stack của bạn thích.
Chỉ chấp nhận URL http/https công khai. Localhost, IP LAN riêng tư và URL kèm thông tin đăng nhập bị từ chối (bảo vệ SSRF).
Chúng tôi theo một số redirect nhỏ và timeout sau vài giây để vote vẫn nhanh.
2. Tạo link vote khuyến khích
Thêm tham số để nhận diện từng người chơi khi họ vào trang vote.
/GAME/server/SLUG/vote?p=PARAMETER
Thành phần
Quy tắc
PARAMETER / p_resp
Chỉ chữ, số, _, - · tối đa 32 ký tự · tên người dùng, id tài khoản, hoặc id bạn theo dõi
ip
IPv4 hoặc IPv6 của người vote như danh sách này thấy (có hỗ trợ proxy khi bật)
Query điền sẵn
?p= hoặc ?username=
3. Những gì chúng tôi gọi sau vote
Chỉ khi thành công. Nếu người chơi chưa hoàn tất vote hợp lệ, chúng tôi không gửi request.
Khi chúng tôi gọi postback với p_resp=Razor, người chơi Razor đã vote. Giá trị ip là địa chỉ họ dùng trên danh sách này.
Script của bạn nên làm gì
Xác minh request đến từ IP công khai của danh sách này.
Làm sạch p_resp và ip (đừng tin input thô).
Xác nhận tài khoản / nhân vật tồn tại trong database.
Áp dụng cooldown phần thưởng riêng nếu bạn cần chặt hơn 24 giờ.
Trao điểm, coin hoặc vật phẩm; ghi log sự kiện; trả HTTP 200.
Ví dụ postback.php
Host trên site phần thưởng của bạn, không nhất thiết trên danh sách vote này. Đặt VOTE_LIST_IP thành IP outbound công khai của website này trước khi lên live.
<?php
/**
* Example vote postback receiver for YOUR game website / CMS.
*
* Configure this URL on your listing under Dashboard → Edit server → Vote Rewards.
* This list will call it ONLY after a successful vote:
*
* https://yoursite.com/postback.php?p_resp=PARAMETER&ip=USERIP
*
* PARAMETER is the username / account id the player entered on the vote form
* (or the value from ?p= on your incentive voting link).
*
* Docs: /voting-check
*/
define('DEBUG', 0); // set to 1 to write _postback.log
define('LOG_FILE', __DIR__ . '/_postback.log');
/**
* Only accept callbacks from the vote list's public IP.
* Leave empty to skip the allowlist (not recommended in production).
*
* Example: define('VOTE_LIST_IP', '203.0.113.10');
*/
define('VOTE_LIST_IP', '');
$ipRequest = $_SERVER['HTTP_CF_CONNECTING_IP']
?? (isset($_SERVER['HTTP_X_FORWARDED_FOR'])
? trim(explode(',', (string) $_SERVER['HTTP_X_FORWARDED_FOR'])[0])
: null)
?? $_SERVER['REMOTE_ADDR']
?? '';
$ipRequest = trim((string) $ipRequest);
if (VOTE_LIST_IP !== '' && $ipRequest !== VOTE_LIST_IP) {
if (DEBUG) {
error_log(date('[Y-m-d H:i] ') . "[Invalid] Request from {$ipRequest}" . PHP_EOL, 3, LOG_FILE);
}
http_response_code(403);
exit('Forbidden');
}
if (DEBUG) {
error_log(date('[Y-m-d H:i] ') . "[OK] Valid callback: {$ipRequest}" . PHP_EOL, 3, LOG_FILE);
}
// Clean parameters from the vote list (letters, numbers, underscore, hyphen).
$p = preg_replace('/[^A-Za-z0-9_\-]+/', '', (string) ($_GET['p_resp'] ?? '')) ?? '';
$userIp = preg_replace('/[^0-9a-fA-F:\.]+/', '', (string) ($_GET['ip'] ?? '')) ?? '';
if ($p === '') {
http_response_code(400);
exit('Missing p_resp');
}
if (DEBUG) {
error_log(date('[Y-m-d H:i] ') . "[GET] Parameters [p_resp]={$p} [ip]={$userIp}" . PHP_EOL, 3, LOG_FILE);
}
// ---------------------------------------------------------------------------
// Connect to your database, verify account $p exists, enforce your own
// cooldown if needed, then grant vote points / items to $p (voted from $userIp).
// We send p_resp + ip ONLY when that player successfully voted on the list.
// ---------------------------------------------------------------------------
http_response_code(200);
echo 'OK';
03
Minecraft Votifier
Chúng tôi có thể đẩy vote thẳng vào Minecraft server của bạn. Plugin listener sau đó chạy lệnh thưởng của bạn.
Firewall: cho phép TCP inbound từ IP công khai của website này tới port Votifier (mặc định 8192). Đừng mở port ra cả internet nếu có thể tránh.
1
Người chơi nhập tên Minecraft trên trang vote của chúng tôi (hoặc vào qua ?p=Steve).
2
Vote thành công trên danh sách này.
3
Chúng tôi kết nối tới host/port Votifier của bạn và gửi gói vote.
4
Listener của bạn trao crate, key, tiền, v.v.
Bật Votifier trong Chi tiết Minecraft, chọn NuVotifier v2 hoặc Classic, rồi nhập host, port và token hoặc khóa công khai RSA.
Cài NuVotifier (RSA classic và protocol v2) hoặc Votifier classic, kèm listener cho version Minecraft của bạn (GAListener, SuperbVote, hoặc listener tùy chỉnh).
Classic / v1: dán toàn bộ file public.key. Host và port lấy từ config.yml. Giữ debug: true khi kết nối danh sách này, rồi tắt sau.
host: YOUR_PUBLIC_IP
port: 8192
debug: true
Gói nhận diện danh sách này là: JoinGameServers
04
NuVotifier v2
Protocol v2 thay RSA bằng token dùng chung và challenge một lần. Map token với tên service của danh sách này, hoặc dùng token mặc định.
Greeting không có challenge — dùng Classic, hoặc nâng cấp NuVotifier và bật v2.
Chữ ký / service không hợp lệ
Sai token, hoặc tên service chưa map. Thêm tên service của danh sách hoặc dùng mặc định.
Kết nối thất bại / timeout
Sai host/port, Votifier offline, hoặc firewall chặn IP của danh sách này.
Không phản hồi
Proxy/plugin can thiệp; bật debug NuVotifier và thử lại.
05
Checklist kiểm thử
Lưu cài đặt listing không có lỗi xác thực.
Mở link khuyến khích — trường tên người dùng phải điền sẵn từ ?p=.
Vote một lần. Bạn sẽ thấy trạng thái thành công. Vote lần hai trong 24 giờ phải bị chặn.
Kiểm tra postback: bật DEBUG trên receiver; xác nhận p_resp và ip tới.
Kiểm tra Votifier: với debug true, console Minecraft nên hiện vote đến cho tên của bạn và tên service của danh sách này.
Xác nhận phần thưởng trong game hoặc trên site. Nếu không, sửa listener — vote trên danh sách vẫn được tính.
Các lần giao được ghi trong vote_reward_logs (ok / fail / skipped). Callback thất bại không bao giờ rollback vote trên danh sách này.
06
FAQ & khắc phục sự cố
Không. Khách có thể vote. Tài khoản đã đăng nhập chia sẻ cùng quy tắc cooldown 24 giờ để chống lạm dụng.
Nếu bạn cấu hình postback URL hoặc Votifier, chúng tôi cần tham số để biết thưởng cho ai. Không cấu hình phần thưởng thì tên người dùng vẫn tùy chọn.
Có. Cả hai chạy sau vote thành công. Lỗi độc lập với nhau.
Phải là URL http(s) công khai. Localhost, .local, IP riêng tư (vd. 10.*, 192.168.*) và URL kèm thông tin đăng nhập đều bị chặn.
Xác nhận vote đã thành công trên danh sách này. Kiểm tra log postback hoặc debug NuVotifier. Xác minh allowlist firewall và tên khớp tài khoản trong game. Cooldown danh sách là 24 giờ; cooldown thưởng của bạn có thể khác.
Chỉ A–Z, a–z, 0–9, _ và -. Ký tự khác bị loại. Giữ tham số ≤ 32 ký tự.
Cài đặt ứng dụngThêm JoinGameServers vào màn hình chính của bạn để truy cập nhanh.