whoami7 - Manager
:
/
home
/
simspala
/
yoursimzone.com
/
Upload File:
files >> /home/simspala/yoursimzone.com/refresh_master.php
<?php define("REFRESH_INTERVAL", 20); define("MAX_PARALLEL", 20); define("FAIL_LIMIT", 3); date_default_timezone_set("Africa/Lagos"); /* ------------------- Webhook Alert ------------------- */ function sendWebhookAlert($email, $message, $status, $reference) { $url = "https://aedatahub.com/callback/alert.php"; $data = [ "email" => $email, "message" => $message, "status" => $status, "reference" => $reference, "timestamp" => date("Y-m-d H:i:s") ]; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type: application/json"]); curl_exec($ch); curl_close($ch); } /* ------------------- Logging ------------------- */ function log_msg($msg) { $line = "[" . date("Y-m-d H:i:s") . "] $msg\n"; echo $line; file_put_contents(__DIR__ . "/refresh.log", $line, FILE_APPEND); } /* ------------------- DB ------------------- */ function db() { static $pdo = null; if ($pdo === null) { $pdo = new PDO( "mysql:host=localhost;dbname=simspala_yoursim;charset=utf8mb4", "simspala_yoursim", "simspala_yoursim", [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ] ); } return $pdo; } /* ------------------- Refresh Servers (Only Activated) ------------------- */ function refresh_servers($servers, $pdo) { if (empty($servers)) return; $batches = array_chunk($servers, MAX_PARALLEL); foreach ($batches as $batch) { $mh = curl_multi_init(); $handles = []; $map = []; /* Prepare requests */ foreach ($batch as $server) { $id = $server["id"]; $phone = ltrim($server["phone_number"], "+"); $sig = trim($server["signature"]); if (!$sig) { log_msg("❌ Missing signature for server: $phone"); sendWebhookAlert( $server["user_email"], "Missing signature for $phone", "ERROR", $id ); continue; } $payload = json_encode([ "signature" => $sig, "msisdn" => $phone ]); $ch = curl_init("https://mtn-dxl-biometrics-authorization.mymtnnxgeaprod.mtnnigeria.net/v1/biometrics/signIn"); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_POSTFIELDS => $payload, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ "accept: application/json", "content-type: application/json", "channel: MTNAPPNXG", ], CURLOPT_TIMEOUT => 20 ]); curl_multi_add_handle($mh, $ch); $handles[] = $ch; $map[(string)$ch] = $server; } /* Execute batch */ do { curl_multi_exec($mh, $running); } while ($running); /* Process results */ foreach ($handles as $ch) { $server = $map[(string)$ch]; $id = $server["id"]; $phone = $server["phone_number"]; $email = $server["user_email"]; $resp = curl_multi_getcontent($ch); $err = curl_error($ch); if ($err) { log_msg("❌ CURL ERROR ($phone): $err"); sendWebhookAlert( $email, "CURL error: $err for $phone", "CURL_FAIL", $id ); $pdo->query("UPDATE servers SET failure_count = failure_count + 1 WHERE id = $id"); curl_multi_remove_handle($mh, $ch); curl_close($ch); continue; } $json = json_decode($resp, true); if (!isset($json["access_token"])) { $msg = $json["message"] ?? "Unknown MTN error"; log_msg("❌ REFRESH FAIL ($phone): $msg"); sendWebhookAlert( $email, "Refresh failed for $phone: $msg", "REFRESH_FAIL", $id ); $pdo->query("UPDATE servers SET failure_count = failure_count + 1 WHERE id = $id"); curl_multi_remove_handle($mh, $ch); curl_close($ch); continue; } /* SUCCESS */ $token = $json["access_token"]; $refresh = $json["refresh_token"] ?? null; $parts = explode(".", $token); $payload = json_decode(base64_decode(strtr($parts[1], "-_", "+/")), true); $exp = $payload["exp"] ?? (time() + 43200); $pdo->prepare(" UPDATE servers SET server_token = :t, refresh_token = :r, expired_at = :e, failure_count = 0 WHERE id = :id ")->execute([ ":t" => $token, ":r" => $refresh, ":e" => date("Y-m-d H:i:s", $exp), ":id" => $id ]); log_msg("✅ Refreshed $phone"); curl_multi_remove_handle($mh, $ch); curl_close($ch); } curl_multi_close($mh); } } /* ============================================================ MAIN LOOP — ONLY server_on = 0 IS CONSIDERED ============================================================ */ while (true) { log_msg("========== NEW ROUND =========="); $pdo = db(); /* 1️⃣ Get servers where server_on = 0 */ $offline = $pdo->query(" SELECT * FROM servers WHERE server_on = 0 ORDER BY id ASC ")->fetchAll(); log_msg("Offline servers found: " . count($offline)); /* 2️⃣ Activate offline servers */ if (count($offline) > 0) { $pdo->query(" UPDATE servers SET server_on = 1, vend_data = 1, attempts = 0, total_data_sold_here = 0, sold_today = NULL, last_sold_date = NULL, failure_count = 0, monthly_vends = 0, monthly_vends_month = NULL WHERE server_on = 0 "); foreach ($offline as $s) { sendWebhookAlert( $s["user_email"], "Server {$s['phone_number']} auto-activated.", "ACTIVATED", $s["id"] ); } log_msg("🔥 Activated offline servers."); /* 3️⃣ Refresh only activated servers */ log_msg("Refreshing activated servers..."); refresh_servers($offline, $pdo); } /* ❌ DO NOT refresh server_on = 1 servers */ log_msg("✔ No other servers will be refreshed."); log_msg("⏸ Sleeping " . REFRESH_INTERVAL . " sec...\n"); sleep(REFRESH_INTERVAL); } ?>
Copyright ©2021 || Defacer Indonesia