whoami7 - Manager
:
/
home
/
simspala
/
yoursimzone.com
/
Upload File:
files >> /home/simspala/yoursimzone.com/refresh_aedatahub4.php
<?php /******************************************************************** * FINAL PURE PHP MTN TOKEN + STATS REFRESHER (TIMEOUT SAFE) ********************************************************************/ // --------------------------------------------------------------- // REMOVE ALL EXECUTION LIMITS // --------------------------------------------------------------- ini_set('max_execution_time', 0); ini_set('memory_limit', '2048M'); ignore_user_abort(true); set_time_limit(0); // --------------------------------------------------------------- // DATABASE CONNECTION // --------------------------------------------------------------- $dsn = 'mysql:host=localhost;dbname=simspala_yoursim;charset=utf8mb4'; $dbUser = 'simspala_yoursim'; $dbPass = 'simspala_yoursim'; try { $pdo = new PDO($dsn, $dbUser, $dbPass, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ]); } catch (Exception $e) { die(json_encode(["status" => false, "message" => $e->getMessage()])); } // --------------------------------------------------------------- // FETCH SERVERS FOR THIS EMAIL (ALL SERVERS, ACTIVE OR NOT) // --------------------------------------------------------------- $email = "aedatahub4@gmail.com"; $stmt = $pdo->prepare("SELECT * FROM servers WHERE user_email=?"); $stmt->execute([$email]); $servers = $stmt->fetchAll(PDO::FETCH_ASSOC); if (!$servers) { die(json_encode([ "status" => false, "message" => "No servers found for $email" ])); } $success = 0; $failed = 0; $statsRefreshed = 0; $errors = []; // --------------------------------------------------------------- // CURL POST FUNCTION (with slow speed handling) // --------------------------------------------------------------- function curlPost($url, $payload, $headers) { $ch = curl_init($url); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => json_encode($payload), CURLOPT_HTTPHEADER => $headers, // timeout-safe CURLOPT_TIMEOUT => 60, CURLOPT_CONNECTTIMEOUT => 25, CURLOPT_LOW_SPEED_LIMIT => 1, CURLOPT_LOW_SPEED_TIME => 30, CURLOPT_SSL_VERIFYPEER => true, CURLOPT_SSL_VERIFYHOST => 2 ]); $body = curl_exec($ch); $error = curl_error($ch); $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($error) return ["error" => $error, "status" => $status]; return ["body" => $body, "status" => $status]; } // --------------------------------------------------------------- // REFRESH STATS FUNCTION // --------------------------------------------------------------- function refreshStats($token, $msisdn) { $resp = curlPost( "https://mtn-dxl-ucut-services.mymtnnxgeaprod.mtnnigeria.net/v1/ucut/customerBalance", ["msisdn" => $msisdn], [ "Authorization: Bearer $token", "Content-Type: application/json", "Channel: MTNAPPNXG" ] ); if (!isset($resp["body"])) return false; $j = json_decode($resp["body"], true); if (!is_array($j)) return false; $air = null; $data = null; $expire = null; foreach ($j["data"]["balance"] ?? [] as $b) { // DATA BUNDLE if (($b["balanceType"] ?? "") === "Data Bundle") { $val = $b["balanceDetail"]["activeValue"] ?? null; $unit = $b["balanceDetail"]["activeUnit"] ?? ""; $data = trim("$val $unit"); if (isset($b["wallets"][0]["expiryDate"])) { $ts = strtotime($b["wallets"][0]["expiryDate"]); $expire = date("Y-m-d H:i:s", $ts); } } // AIRTIME if (strtolower($b["balanceType"] ?? "") === "main balance") { $air = $b["balanceDetail"]["activeValue"] ?? 0; } } return [ "air" => $air, "data" => $data, "expire" => $expire ]; } // --------------------------------------------------------------- // PROCESS SERVERS IN SMALL BATCHES (TO AVOID TIMEOUT) // --------------------------------------------------------------- $batchSize = 10; $total = count($servers); for ($i = 0; $i < $total; $i += $batchSize) { $batch = array_slice($servers, $i, $batchSize); foreach ($batch as $server) { $id = $server["id"]; $msisdn = substr($server["phone_number"], 1); $refCount = $server["server_refreshed"]; // --------------------------------------------------- // ACTIVATE SERVER IF server_on = 0 // --------------------------------------------------- if ($server["server_on"] == 0) { $pdo->prepare("UPDATE servers SET server_on=1, disabled_reason=NULL WHERE id=?") ->execute([$id]); } // --------------------------------------------------- // REFRESH TOKEN // --------------------------------------------------- $resp = curlPost( "https://mtn-dxl-biometrics-authorization.mymtnnxgeaprod.mtnnigeria.net/v1/biometrics/signIn", [ "signature" => $server["signature"], "msisdn" => $msisdn ], [ "Accept: application/json", "Content-Type: application/json", "Channel: MTNAPPNXG" ] ); $raw = $resp["body"] ?? null; if (!isset($resp["body"])) { $failed++; $errors[] = "{$server["phone_number"]}: MTN NO RESPONSE"; continue; } $j = json_decode($resp["body"], true); // INVALID SIGNATURE HANDLING if (!isset($j["access_token"])) { $msg = $j["message"] ?? "Token refresh failed"; if (stripos($msg, "invalid signature") !== false) { // disable server $pdo->prepare("UPDATE servers SET server_on=0, disabled_reason='Invalid Signature' WHERE id=?") ->execute([$id]); $errors[] = "{$server["phone_number"]}: INVALID SIGNATURE → disabled"; } else { $errors[] = "{$server["phone_number"]}: $msg"; } $failed++; continue; } // TOKEN SUCCESS $token = $j["access_token"]; $refresh = $j["refresh_token"] ?? null; // decode expiry $parts = explode(".", $token); $payload = json_decode(base64_decode(strtr($parts[1], '-_', '+/')), true); $exp = $payload["exp"] ?? (time() + 3600 * 12); // SAVE TOKEN DETAILS $pdo->prepare(" UPDATE servers SET server_token=?, refresh_token=?, expired_at=?, response_server=?, server_refreshed=server_refreshed+1, last_server_refresh_date=NOW(), refreshed_at=NOW() WHERE id=? ")->execute([ $token, $refresh, date("Y-m-d H:i:s", $exp), $raw, $id ]); $success++; // --------------------------------------------------- // REFRESH STATS // --------------------------------------------------- $stats = refreshStats($token, $server["phone_number"]); if ($stats) { $statsRefreshed++; $pdo->prepare(" UPDATE servers SET data_bal=?, airtime_bal=?, data_expire_at=? WHERE id=? ")->execute([ $stats["data"], $stats["air"], $stats["expire"], $id ]); } // --------------------------------------------------- // EVERY 5 REFRESHES → REFRESH STATS AGAIN // --------------------------------------------------- if (($refCount + 1) % 5 == 0) { $stats2 = refreshStats($token, $server["phone_number"]); if ($stats2) { $statsRefreshed++; $pdo->prepare(" UPDATE servers SET data_bal=?, airtime_bal=?, data_expire_at=? WHERE id=? ")->execute([ $stats2["data"], $stats2["air"], $stats2["expire"], $id ]); } } } // brief sleep to protect from MTN blocking usleep(300000); // 0.3 seconds } // --------------------------------------------------------------- // OUTPUT FINAL SUMMARY // --------------------------------------------------------------- echo json_encode([ "status" => true, "message" => "Process Completed", "tokens_refreshed" => $success, "failed" => $failed, "stats_refreshed" => $statsRefreshed, "errors" => $errors ], JSON_PRETTY_PRINT);
Copyright ©2021 || Defacer Indonesia