HTTP Postback
الأفضل للمواقع واللانشرات والألعاب غير Minecraft. لـ Minecraft بديل اختياري لـ Votifier (أو إضافة إن كافأت أيضاً على موقع).
- يعمل لكل لعبة في هذه القائمة
- أنت تتحكم بالنقاط وفترات الانتظار والسجلات
- يلزم نقطة نهاية HTTPS عامة
مكافآت التصويت
كيف تكافئ اللاعبين بعد تصويتهم بنجاح لإدراجك على JoinGameServers.
مسار الإعداد: لوحة التحكم ← تعديل السيرفر ← مكافآت التصويت (وتفاصيل Minecraft لـ Votifier).
يفتح اللاعب رابط تصويتك، ويفضَّل مع ?p=USERNAME ليُملأ النموذج مسبقاً.
يرسل التصويت. نفرض فترة انتظار 24 ساعة لكل IP (ولكل حساب مسجّل). إذا كانت المكافآت مُعدّة، يلزم اسم المستخدم / المعامل.
نُبلّغ أنظمة مكافآتك: طلب HTTP GET إلى رابط postback و/أو حزمة Votifier إلى مضيف Minecraft — بنفس المعامل وعنوان IP للمصوّت.
تمنح المكافأة. إخفاقات التسليم من جانبك تُسجَّل هنا دون إزالة التصويت.
الأفضل للمواقع واللانشرات والألعاب غير Minecraft. لـ Minecraft بديل اختياري لـ Votifier (أو إضافة إن كافأت أيضاً على موقع).
المفضّل لـ Minecraft. الأفضل للصناديق والمفاتيح وإضافات الاستماع داخل اللعبة. نفتح اتصالاً TCP إلى بورت Votifier.
لـ Minecraft استخدم Votifier أولاً. HTTP postback اختياري (أو إضافي). يعمل كل قناة مفعّلة بشكل مستقل بعد التصويت.
بعد تصويت ناجح نطلب رابطك بمعامل اللاعب وعنوان IP الخاص به. يحدّد سكربتك أن الحساب صوّت ويمنح نقاطاً أو عناصر.
أضف عنوان IP الصادر العام لهذا الموقع إلى whitelist في الجدار الناري وسكربت postback. ارفض أي مصدر آخر. فضّل HTTPS.
لوحة التحكم ← تعديل السيرفر ← مكافآت التصويت ← رابط Postback.
https://YOURDOMAIN/postback.php
أضف معاملاً ليُعرَّف كل لاعب عند وصوله لصفحة التصويت.
/GAME/server/SLUG/vote?p=PARAMETER
| الجزء | القواعد |
|---|---|
PARAMETER / p_resp |
أحرف وأرقام و_ و- فقط · بحد أقصى 32 حرفاً · اسم مستخدم أو معرّف حساب أو أي معرّف تتابعه |
ip |
IPv4 أو IPv6 للمصوّت كما تراه هذه القائمة (مع مراعاة البروكسي عند التفعيل) |
| استعلام التعبئة المسبقة | ?p= أو ?username= |
عند النجاح فقط. إن لم يُكمل اللاعب تصويتاً صالحاً، لا نرسل طلباً.
https://YOURDOMAIN/postback.php?p_resp=PARAMETER&ip=USERIP
| رابط تحفيزي | استدعاؤنا |
|---|---|
/minecraft-server/server/your-server-slug/vote?p=1234 |
…/postback.php?p_resp=1234&ip=123.123.123.123 |
/minecraft-server/server/your-server-slug/vote?p=Razor |
…/postback.php?p_resp=Razor&ip=123.123.123.123 |
عندما نصل إلى postback بـ p_resp=Razor، يكون اللاعب Razor قد صوّت. قيمة ip هي العنوان الذي استخدمه في هذه القائمة.
استضف هذا على موقع المكافآت، وليس بالضرورة على قائمة التصويت. عيّن VOTE_LIST_IP إلى عنوان IP الصادر العام لهذا الموقع قبل الإطلاق.
<?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';
يمكننا دفع التصويت مباشرة إلى سيرفر Minecraft. ثم تشغّل إضافة الاستماع أوامر المكافأة.
الجدار الناري: اسمح بـ TCP وارد من عنوان IP العام لهذا الموقع إلى بورت Votifier (الافتراضي 8192). لا تعرض البورت للإنترنت بالكامل إن أمكن.
يُدخل اللاعب اسم مستخدم Minecraft في صفحة التصويت (أو يصل عبر ?p=Steve).
ينجح التصويت في هذه القائمة.
نتصل بمضيف/بورت Votifier ونسلّم حزمة التصويت.
يمنح المستمع صناديق أو مفاتيح أو أموالاً إلخ.
فعّل Votifier ضمن تفاصيل Minecraft، اختر NuVotifier v2 أو Classic، ثم أدخل المضيف والبورت والرمز أو مفتاح RSA العام.
ثبّت NuVotifier (RSA الكلاسيكي وبروتوكول v2) أو Votifier الكلاسيكي، مع مستمع لإصدار Minecraft لديك (GAListener أو SuperbVote أو مستمع مخصّص).
Classic / v1: الصق ملف public.key بالكامل. المضيف والبورت من config.yml. أبقِ debug: true أثناء الربط بهذه القائمة ثم عطّله.
host: YOUR_PUBLIC_IP
port: 8192
debug: true
تُعرّف الحزم هذه القائمة باسم: JoinGameServers
بروتوكول v2 يستبدل RSA برمز مشترك وتحدٍّ لمرة واحدة. اربط رمزاً باسم خدمة هذه القائمة، أو استخدم الرمز الافتراضي.
tokens:
default: REPLACE_WITH_DEFAULT_TOKEN
"JoinGameServers": REPLACE_WITH_LIST_TOKEN
صيغة الإرسال: اتصال TCP ← قراءة الترحيب VOTIFIER 2 <challenge> ← حمولة JSON (username وserviceName وtimestamp بالمللي ثانية وaddress وchallenge) ← Base64(HMAC-SHA256(payload, token)) ← magic 0x733A + الطول + JSON {signature, payload}. توقَّع {"status":"ok"}.
| العَرَض | السبب المحتمل |
|---|---|
| ليس سيرفر NuVotifier v2 | الترحيب بلا تحدٍّ — استخدم Classic أو رقِّ NuVotifier وفعّل v2. |
| توقيع غير صالح / خدمة غير معروفة | رمز خاطئ أو اسم الخدمة غير مربوط. أضف اسم خدمة القائمة أو استخدم الافتراضي. |
| فشل الاتصال / انتهاء المهلة | مضيف/بورت خاطئ أو Votifier متوقف أو الجدار الناري يحجب IP هذه القائمة. |
| لا استجابة | تداخل بروكسي/إضافة؛ فعّل تصحيح NuVotifier وأعد المحاولة. |
تُسجَّل محاولات التسليم في vote_reward_logs (ok / fail / skipped). فشل الاستدعاء لا يتراجع عن التصويت في هذه القائمة أبداً.
لا. يمكن للزوار التصويت. الحسابات المسجّلة تخضع لنفس قواعد الانتظار 24 ساعة لمنع الإساءة.
إذا أعددت رابط postback أو Votifier، نحتاج معاملاً لنخبرك بمن تكافئ. بدون مكافآت مُعدّة يبقى اسم المستخدم اختيارياً.
نعم. يعملان بعد تصويت ناجح. الإخفاقات مستقلة.
يجب أن يكون رابط http(s) عاماً. تُحظر عناوين localhost و.local وIP الخاصة (مثل 10.* و192.168.*) والروابط ببيانات اعتماد مضمّنة.
تأكد من نجاح التصويت في هذه القائمة. راجع سجلات postback أو مخرجات تصحيح NuVotifier. تحقّق من قوائم سماح الجدار الناري ومن تطابق اسم المستخدم مع حساب داخل اللعبة. انتظار القائمة 24 ساعة؛ قد يختلف انتظار مكافأتك.
فقط A–Z وa–z و0–9 و_ و-. يُزال أي شيء آخر. ابقِ المعاملات ≤ 32 حرفاً.