diff --git a/1.php b/1.php deleted file mode 100644 index 0275141..0000000 --- a/1.php +++ /dev/null @@ -1,1086 +0,0 @@ - $value) { - if (!is_array($value)) { - // 移除废弃的get_magic_quotes_gpc()检查,因为PHP 7.4+已经移除了magic_quotes - $value = preg_replace($ra, '', $value); - $arr[$key] = htmlentities(strip_tags($value)); - } else { - SafeFilter($arr[$key]); - } - } - } -} - -require_once "include/core.php"; -require_once "include/TelegramBot.php"; -//取到提交的功能接口 -$mod = isset($_GET['mod']) ? purge($_GET['mod']) : ''; - -define('LOG_FILE_API', __DIR__ . '/api.log'); -function log_api($message, $level = 'INFO') -{ - $timestamp = date('Y-m-d H:i:s'); - $logMessage = "[{$timestamp}] [{$level}] {$message}\n"; - file_put_contents(LOG_FILE_API, $logMessage, FILE_APPEND | LOCK_EX); -} - - - -function getForwardTelegram() -{ - - // 查询配置 - $config = DB::table("sys")->select(); - if (!$config) { - return ""; - } - foreach ($config as $value) { - - if ($value["mate_key"] == "forward_telegram") { - return $value["mate_value"]; - - } - - } - return ""; -} - -function getForwardEmail() -{ - - // 查询配置 - $config = DB::table("sys")->select(); - if (!$config) { - return ""; - } - foreach ($config as $value) { - - if ($value["mate_key"] == "forward_email") { - return $value["mate_value"]; - - } - - } - return ""; -} - -if ($mod == "push") { - log_api("接收到推送请求"); - // 获取IP - $ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : ''; - if (!ip2long($ip)) { - $ip = '未知'; - } - // 应用ID - $appId = isset($_GET['appId']) ? purge($_GET['appId']) : ''; - if (!$appId) { - log_api("校验应用失败"); - $result["timestamp"] = time(); - $result["code"] = "0"; - $result["msg"] = "数据错误"; - $result["data"] = ""; - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - } - // 查询应用 - $app = DB::table("app")->where(["id" => $appId])->find(); - if (!$app) { - log_api("校验应用失败2"); - $result["timestamp"] = time(); - $result["code"] = "0"; - $result["msg"] = "应用不存在"; - $result["data"] = ""; - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - } - // 校验数据签名 - $sign = isset($_GET['sign']) ? purge($_GET['sign']) : ''; - if (!$sign) { - log_api("校验数据签名失败"); - $result["code"] = "0"; - $result["msg"] = "签名数据错误"; - $result["data"] = ""; - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - } - $timestamp = isset($_GET['timestamp']) ? purge($_GET['timestamp']) : ''; - if (!$sign) { - log_api("校验数据签名失败2"); - $result["code"] = "0"; - $result["msg"] = "时间戳校验失败"; - $result["data"] = ""; - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - } - $data = file_get_contents("php://input"); - $md5 = md5($data . $timestamp . $app["commKey"]); - if ($md5 != $sign) { - log_api("校验数据签名失败3"); - $result["code"] = "0"; - $result["msg"] = "签名校验失败"; - $result["data"] = ""; - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - } - - // 解密数据 - $decryptData = json_decode(mi_rc4($data, $app["commKey"], 1), true); - $user = DB::table("user")->where(["username" => $decryptData["username"], "password" => $decryptData["password"]])->find(); - - if (!$user) { - log_api("校验用户失败"); - $result["code"] = "0"; - $result["msg"] = "账号或密码错误"; - $result["data"] = ""; - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - } - //log_api("开始解析数据"); - // 解析数据入库 - $order = $decryptData["order"]; - - // 解析消息类型 - $notice_type = $decryptData["type"]; - $app = $decryptData["app"]; - //log_api("消息类型".$notice_type); - // 解析收信账户 - $notice_account = $decryptData["account"]; - //log_api("收信账户".$notice_account); - // 邮箱 - if (filter_var($notice_account, FILTER_VALIDATE_EMAIL)) { - //log_api("邮箱用户".$notice_account); - // 邮件内容 - if ($notice_type == "test_push") { - //log_api("当前账号:".$decryptData["username"]); - - $msg = "用户:" . $decryptData["username"] . "\n程序:" . $app . "\n内容:信息接收测试, 接收到本消息则表明测试正常."; - - - - //log_api("发送消息:".$msg); - //$bot->sendMessage($chat_id, $msg); - } - // 读取注单 - if ($notice_type == "read_order") { - if ($order["SRV_IP"] == "手机") { - $order["SRV_IP"] = "\r\n手机"; - } - // $msg = $decryptData["order"]["TID"]."AAA"; - //log_api(json_encode($order)); - $msg = "用户:" . $decryptData["username"] . "\n程序:" . $app . "\n类型:读取注单\n" . "单号: " . $order["TID"] . "\n时间:" . $order["DATETIME"] . "\n会员:" . $order["NAME0"] . "\n球种:" . $order["GT"] . "\n赛段:" . $order["SESSION"] . "\n玩法:" . $order["WAGERS_TYPE"] . $order["SRV_IP"] . "\n联盟:" . $order["LEAGUE"] . "\r\n队伍:" . $order["TEAM_H"] . " : " . $order["TEAM_C"] . "\n比分:" . $order["SCORE"] . "\n盘口:" . $order["ORDER_CON"] . "\n下注:" . $order["ORDER_TYPE"] . "\n赔率:" . $order["IORATIO"] . "\n金额:" . $order["GOLD"] . "\r\n开赛时间:" . $order["G_TIME"]; - - - - - $find_cache = DB::table("orders")->where(["TID" => $order["TID"]])->find(); - if (!$find_cache) { - $database_order["TID"] = $order["TID"]; - $database_order["USERNAME"] = $decryptData["username"]; - $database_order["DATETIME"] = $order["DATETIME"]; - $database_order["NAME0"] = $order["NAME0"]; - $database_order["GT"] = $order["GT"]; - $database_order["WAGERS_TYPE"] = $order["WAGERS_TYPE"]; - $database_order["LEAGUE"] = $order["LEAGUE"]; - $database_order["TEAM_H"] = $order["TEAM_H"]; - $database_order["TEAM_C"] = $order["TEAM_C"]; - $database_order["ORDER_TYPE"] = $order["ORDER_TYPE"]; - $database_order["ORDER_CON"] = $order["ORDER_CON"]; - $database_order["SCORE"] = $order["SCORE"]; - $database_order["IORATIO"] = $order["IORATIO"]; - $database_order["GOLD"] = $order["GOLD"]; - $database_order["SRV_IP"] = $order["SRV_IP"]; - $database_order["SESSION"] = $order["SESSION"]; - $database_order["STAGE"] = $order["STAGE"]; - $database_order["G_TIME"] = $order["G_TIME"]; - $database_order["NUM_C"] = $order["NUM_C"]; - $database_order["NUM_H"] = $order["NUM_H"]; - DB::table("orders")->add($database_order); - //log_api($user["forward"]); - if ($user["forward"] == 1) { - //log_api("邮箱转发"); - $forward_email = getForwardEmail(); - if (filter_var($forward_email, FILTER_VALIDATE_EMAIL)) { - sendemail("金运来消息推送", $msg, $forward_email, $back); - } - } - } - - - - - //$bot->sendMessage($chat_id, $msg); - } - // 接收注单 - if ($notice_type == "accept_order") { - if ($order["SRV_IP"] == "手机") { - $order["SRV_IP"] = "\n手机"; - } - // $msg = $decryptData["order"]["TID"]."AAA"; - $msg = "用户:" . $decryptData["username"] . "\n程序:" . $app . "\n类型:接收注单\n" . "单号: " . $order["TID"] . "\n时间:" . $order["DATETIME"] . "\n会员:" . $order["NAME0"] . "\n球种:" . $order["GT"] . "\n赛段:" . $order["SESSION"] . "\n玩法:" . $order["WAGERS_TYPE"] . $order["SRV_IP"] . "\n联盟:" . $order["LEAGUE"] . "\n队伍:" . $order["TEAM_H"] . " : " . $order["TEAM_C"] . "\n比分:" . $order["SCORE"] . "\n盘口:" . $order["ORDER_CON"] . "\n下注:" . $order["ORDER_TYPE"] . "\n赔率:" . $order["IORATIO"] . "\n金额:" . $order["GOLD"] . "\n开赛时间:" . $order["G_TIME"]; - //$bot->sendMessage($chat_id, $msg); - } - // 筛选注单 - if ($notice_type == "screen_order") { - if ($order["SRV_IP"] == "手机") { - $order["SRV_IP"] = "\n手机"; - } - // $msg = $decryptData["order"]["TID"]."AAA"; - $msg = "用户:" . $decryptData["username"] . "\n程序:" . $app . "\n类型:筛选注单\n" . "单号: " . $order["TID"] . "\n时间:" . $order["DATETIME"] . "\n会员:" . $order["NAME0"] . "\n球种:" . $order["GT"] . "\n赛段:" . $order["SESSION"] . "\n玩法:" . $order["WAGERS_TYPE"] . $order["SRV_IP"] . "\n联盟:" . $order["LEAGUE"] . "\n队伍:" . $order["TEAM_H"] . " : " . $order["TEAM_C"] . "\n比分:" . $order["SCORE"] . "\n最新比分:" . $order["SCORE_NEW"] . "\n盘口:" . $order["ORDER_CON"] . "\n最新盘口:" . $order["ORDER_CON_NEW"] . "\n下注:" . $order["ORDER_TYPE"] . "\n赔率:" . $order["IORATIO"] . "\n最新赔率:" . $order["IORATIO"] . "\n金额:" . $order["GOLD"] . "\n开赛时间:" . $order["G_TIME"] . "\n过滤原因:" . $order["REASON"]; - //$bot->sendMessage($chat_id, $msg); - } - // 跟单成功 - if ($notice_type == "bet_order_success") { - if ($order["SRV_IP"] == "手机") { - $order["SRV_IP"] = "\n手机"; - } - // $msg = $decryptData["order"]["TID"]."AAA"; - $msg = "用户:" . $decryptData["username"] . "\n程序:" . $app . "\n类型:跟单成功\n" . "单号: " . $order["TID"] . "\n时间:" . $order["DATETIME"] . "\n会员:" . $order["NAME0"] . "\n球种:" . $order["GT"] . "\n赛段:" . $order["SESSION"] . "\n玩法:" . $order["WAGERS_TYPE"] . $order["SRV_IP"] . "\n联盟:" . $order["LEAGUE"] . "\n队伍:" . $order["TEAM_H"] . " : " . $order["TEAM_C"] . "\n比分:" . $order["SCORE"] . "\n最新比分:" . $order["SCORE_NEW"] . "\n盘口:" . $order["ORDER_CON"] . "\n最新盘口:" . $order["ORDER_CON_NEW"] . "\n下注:" . $order["ORDER_TYPE"] . "\n赔率:" . $order["IORATIO"] . "\n最新赔率:" . $order["IORATIO_NEW"] . "\n金额:" . $order["GOLD"] . "\n开赛时间:" . $order["G_TIME"]; - // $bot->sendMessage($chat_id, $msg); - } - // 跟单失败 - if ($notice_type == "bet_order_failed") { - if ($order["SRV_IP"] == "手机") { - $order["SRV_IP"] = "\n手机"; - } - // $msg = $decryptData["order"]["TID"]."AAA"; - $msg = "用户:" . $decryptData["username"] . "\n程序:" . $app . "\n类型:跟单失败\n" . "单号: " . $order["TID"] . "\n时间:" . $order["DATETIME"] . "\n会员:" . $order["NAME0"] . "\n球种:" . $order["GT"] . "\n赛段:" . $order["SESSION"] . "\n玩法:" . $order["WAGERS_TYPE"] . $order["SRV_IP"] . "\n联盟:" . $order["LEAGUE"] . "\n队伍:" . $order["TEAM_H"] . " : " . $order["TEAM_C"] . "\n比分:" . $order["SCORE"] . "\n比分:" . $order["SCORE_NEW"] . "\n盘口:" . $order["ORDER_CON"] . "\n最新盘口:" . $order["ORDER_CON_NEW"] . "\n下注:" . $order["ORDER_TYPE"] . "\n赔率:" . $order["IORATIO"] . "\n最新赔率:" . $order["IORATIO_NEW"] . "\n金额:" . $order["GOLD"] . "\n开赛时间:" . $order["G_TIME"] . "\n失败原因:" . $order["REASON"]; - // $bot->sendMessage($chat_id, $msg); - } - // 账户掉线 - if ($notice_type == "account_dissconnected") { - $msg = "用户:" . $decryptData["username"] . "\n程序:" . $app . "\n类型:账户掉线"; - //$bot->sendMessage($chat_id, $msg); - } - // 账户重连 - if ($notice_type == "account_reconnected") { - $msg = "用户:" . $decryptData["username"] . "\n程序:" . $app . "\n类型:账户重连"; - //$bot->sendMessage($chat_id, $msg); - //$bot->sendMessage($chat_id, "账户重连"); - } - - - - if (!sendemail("金运来消息推送", $msg, $notice_account, $back)) { - $result["code"] = "0"; - $result["msg"] = "推送失败"; - $result["data"] = mi_rc4(json_encode($result["data"]), $app["commKey"], 0); - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - //log_api("推送失败结果:".$back); - die(json_encode($result)); - //die("请求超时或返回的数据解析失败:" . $back); - } else { - - $result["code"] = "1"; - $result["msg"] = "推送成功"; - $result["data"] = mi_rc4(json_encode($result["data"]), $app["commKey"], 0); - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - //die("邮件已发送至您开通授权时候设置的站长邮箱,请检查收件箱和垃圾箱是否已收到文件"); - } - - - } else { - //log_api("机器人初始化".$notice_account); - $bot = new TelegramBot(); - // log_api("机器人初始化完成".$notice_account); - // 先找send_id(群聊) - $telegram_account = DB::table("telegram")->where(["chat_id" => $notice_account])->find(); - if (!$telegram_account) { - // 找TG号 - $telegram_account = DB::table("telegram")->where(["account" => $notice_account])->find(); - } - // 机器人发信 - $chat_id = $telegram_account["chat_id"]; - // log_api("收信账户chat_id".$chat_id); - // 测试通信 - $msg = ""; - if ($notice_type == "test_push") { - //log_api("当前账号:".$decryptData["username"]); - - $msg = "用户:" . $decryptData["username"] . "\n程序:" . $app . "\n内容:信息接收测试, 接收到本消息则表明测试正常."; - //log_api("发送消息:".$msg); - - // $database_order["TID"] = "22855900875"; - // $database_order["DATETIME"] = "2025-10-24 18:03:29"; - // $database_order["NAME0"] = "dtt8user1"; - // $database_order["GT"] = "足球"; - // $database_order["WAGERS_TYPE"] = "(滚球) 大 / 小-上半场"; - // $database_order["LEAGUE"] = "巴西乙组联赛"; - // $database_order["TEAM_H"] = "甘美奥诺瓦里桑蒂诺SP"; - // $database_order["TEAM_C"] = "博塔福格SP"; - // $database_order["ORDER_TYPE"] ="大"; - // $database_order["ORDER_CON"] = "0.5 / 1"; - // $database_order["SCORE"] = "0:0"; - // $database_order["IORATIO"] = "0.73"; - // $database_order["GOLD"] = "50"; - // $database_order["SRV_IP"] = "手机"; - // $database_order["SESSION"] = "滚球"; - // $database_order["STAGE"] = "上半场"; - // $database_order["G_TIME"] = "10-24-2025 18:00:00"; - // $database_order["NUM_C"] = "11111"; - // $database_order["NUM_H"] = "222222"; - // DB::table("orders")->add($database_order); - - - - - $bot->sendMessage($chat_id, $msg); - } - // 读取注单 - if ($notice_type == "read_order") { - if ($order["SRV_IP"] == "手机") { - $order["SRV_IP"] = "\r\n手机"; - } - // $msg = $decryptData["order"]["TID"]."AAA"; - //log_api(json_encode($order)); - $msg = "用户:" . $decryptData["username"] . "\n程序:" . $app . "\n类型:读取注单\n" . "单号: " . $order["TID"] . "\n时间:" . $order["DATETIME"] . "\n会员:" . $order["NAME0"] . "\n球种:" . $order["GT"] . "\n赛段:" . $order["SESSION"] . "\n玩法:" . $order["WAGERS_TYPE"] . $order["SRV_IP"] . "\n联盟:" . $order["LEAGUE"] . "\r\n队伍:" . $order["TEAM_H"] . " : " . $order["TEAM_C"] . "\n比分:" . $order["SCORE"] . "\n盘口:" . $order["ORDER_CON"] . "\n下注:" . $order["ORDER_TYPE"] . "\n赔率:" . $order["IORATIO"] . "\n金额:" . $order["GOLD"] . "\r\n开赛时间:" . $order["G_TIME"]; - // log_api("开始入库"); - $find_cache = DB::table("orders")->where(["TID" => $order["TID"]])->find(); - if (!$find_cache) { - $database_order["TID"] = $order["TID"]; - $database_order["USERNAME"] = $decryptData["username"]; - $database_order["DATETIME"] = $order["DATETIME"]; - $database_order["NAME0"] = $order["NAME0"]; - $database_order["GT"] = $order["GT"]; - $database_order["WAGERS_TYPE"] = $order["WAGERS_TYPE"]; - $database_order["LEAGUE"] = $order["LEAGUE"]; - $database_order["TEAM_H"] = $order["TEAM_H"]; - $database_order["TEAM_C"] = $order["TEAM_C"]; - $database_order["ORDER_TYPE"] = $order["ORDER_TYPE"]; - $database_order["ORDER_CON"] = $order["ORDER_CON"]; - $database_order["SCORE"] = $order["SCORE"]; - $database_order["IORATIO"] = $order["IORATIO"]; - $database_order["GOLD"] = $order["GOLD"]; - $database_order["SRV_IP"] = $order["SRV_IP"]; - $database_order["SESSION"] = $order["SESSION"]; - $database_order["STAGE"] = $order["STAGE"]; - $database_order["G_TIME"] = $order["G_TIME"]; - $database_order["NUM_C"] = $order["NUM_C"]; - $database_order["NUM_H"] = $order["NUM_H"]; - DB::table("orders")->add($database_order); - //log_api($user["forward"]); - if ($user["forward"] == 1) { - //log_api("TG转发"); - $forward_tg = getForwardTelegram(); - //log_api("TG转发:".$forward_tg); - if ($forward_tg != "") { - $forward_telegram_account = DB::table("telegram")->where(["chat_id" => $forward_tg])->find(); - if (!$forward_telegram_account) { - // 找TG号 - $forward_telegram_account = DB::table("telegram")->where(["account" => $forward_tg])->find(); - } - if ($forward_telegram_account["chat_id"] != "") { - $bot->sendMessage($forward_telegram_account["chat_id"], $msg); - } - } - } - } - //log_api("结束入库"); - - - if($chat_id!="") - { - $bot->sendMessage($chat_id, $msg); - } - - - - } - // 接收注单 - if ($notice_type == "accept_order") { - if ($order["SRV_IP"] == "手机") { - $order["SRV_IP"] = "\n手机"; - } - // $msg = $decryptData["order"]["TID"]."AAA"; - $msg = "用户:" . $decryptData["username"] . "\n程序:" . $app . "\n类型:接收注单\n" . "单号: " . $order["TID"] . "\n时间:" . $order["DATETIME"] . "\n会员:" . $order["NAME0"] . "\n球种:" . $order["GT"] . "\n赛段:" . $order["SESSION"] . "\n玩法:" . $order["WAGERS_TYPE"] . $order["SRV_IP"] . "\n联盟:" . $order["LEAGUE"] . "\n队伍:" . $order["TEAM_H"] . " : " . $order["TEAM_C"] . "\n比分:" . $order["SCORE"] . "\n盘口:" . $order["ORDER_CON"] . "\n下注:" . $order["ORDER_TYPE"] . "\n赔率:" . $order["IORATIO"] . "\n金额:" . $order["GOLD"] . "\n开赛时间:" . $order["G_TIME"]; - $bot->sendMessage($chat_id, $msg); - } - // 筛选注单 - if ($notice_type == "screen_order") { - if ($order["SRV_IP"] == "手机") { - $order["SRV_IP"] = "\n手机"; - } - // $msg = $decryptData["order"]["TID"]."AAA"; - $msg = "用户:" . $decryptData["username"] . "\n程序:" . $app . "\n类型:筛选注单\n" . "单号: " . $order["TID"] . "\n时间:" . $order["DATETIME"] . "\n会员:" . $order["NAME0"] . "\n球种:" . $order["GT"] . "\n赛段:" . $order["SESSION"] . "\n玩法:" . $order["WAGERS_TYPE"] . $order["SRV_IP"] . "\n联盟:" . $order["LEAGUE"] . "\n队伍:" . $order["TEAM_H"] . " : " . $order["TEAM_C"] . "\n比分:" . $order["SCORE"] . "\n最新比分:" . $order["SCORE_NEW"] . "\n盘口:" . $order["ORDER_CON"] . "\n最新盘口:" . $order["ORDER_CON_NEW"] . "\n下注:" . $order["ORDER_TYPE"] . "\n赔率:" . $order["IORATIO"] . "\n最新赔率:" . $order["IORATIO"] . "\n金额:" . $order["GOLD"] . "\n开赛时间:" . $order["G_TIME"] . "\n过滤原因:" . $order["REASON"]; - $bot->sendMessage($chat_id, $msg); - } - // 跟单成功 - if ($notice_type == "bet_order_success") { - if ($order["SRV_IP"] == "手机") { - $order["SRV_IP"] = "\n手机"; - } - // $msg = $decryptData["order"]["TID"]."AAA"; - $msg = "用户:" . $decryptData["username"] . "\n程序:" . $app . "\n类型:跟单成功\n" . "单号: " . $order["TID"] . "\n时间:" . $order["DATETIME"] . "\n会员:" . $order["NAME0"] . "\n球种:" . $order["GT"] . "\n赛段:" . $order["SESSION"] . "\n玩法:" . $order["WAGERS_TYPE"] . $order["SRV_IP"] . "\n联盟:" . $order["LEAGUE"] . "\n队伍:" . $order["TEAM_H"] . " : " . $order["TEAM_C"] . "\n比分:" . $order["SCORE"] . "\n最新比分:" . $order["SCORE_NEW"] . "\n盘口:" . $order["ORDER_CON"] . "\n最新盘口:" . $order["ORDER_CON_NEW"] . "\n下注:" . $order["ORDER_TYPE"] . "\n赔率:" . $order["IORATIO"] . "\n最新赔率:" . $order["IORATIO_NEW"] . "\n金额:" . $order["GOLD"] . "\n开赛时间:" . $order["G_TIME"]; - $bot->sendMessage($chat_id, $msg); - } - // 跟单失败 - if ($notice_type == "bet_order_failed") { - if ($order["SRV_IP"] == "手机") { - $order["SRV_IP"] = "\n手机"; - } - // $msg = $decryptData["order"]["TID"]."AAA"; - $msg = "用户:" . $decryptData["username"] . "\n程序:" . $app . "\n类型:跟单失败\n" . "单号: " . $order["TID"] . "\n时间:" . $order["DATETIME"] . "\n会员:" . $order["NAME0"] . "\n球种:" . $order["GT"] . "\n赛段:" . $order["SESSION"] . "\n玩法:" . $order["WAGERS_TYPE"] . $order["SRV_IP"] . "\n联盟:" . $order["LEAGUE"] . "\n队伍:" . $order["TEAM_H"] . " : " . $order["TEAM_C"] . "\n比分:" . $order["SCORE"] . "\n比分:" . $order["SCORE_NEW"] . "\n盘口:" . $order["ORDER_CON"] . "\n最新盘口:" . $order["ORDER_CON_NEW"] . "\n下注:" . $order["ORDER_TYPE"] . "\n赔率:" . $order["IORATIO"] . "\n最新赔率:" . $order["IORATIO_NEW"] . "\n金额:" . $order["GOLD"] . "\n开赛时间:" . $order["G_TIME"] . "\n失败原因:" . $order["REASON"]; - $bot->sendMessage($chat_id, $msg); - } - // 账户掉线 - if ($notice_type == "account_dissconnected") { - $msg = "用户:" . $decryptData["username"] . "\n程序:" . $app . "\n类型:账户掉线"; - $bot->sendMessage($chat_id, $msg); - } - // 账户重连 - if ($notice_type == "account_reconnected") { - $msg = "用户:" . $decryptData["username"] . "\n程序:" . $app . "\n类型:账户重连"; - $bot->sendMessage($chat_id, $msg); - //$bot->sendMessage($chat_id, "账户重连"); - } - - } - - // 未到期 - $result["code"] = "1"; - $result["msg"] = "推送成功"; - $result["data"] = mi_rc4(json_encode($result["data"]), $app["commKey"], 0); - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); -} - -if ($mod == "version") { - // 获取IP - $ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : ''; - if (!ip2long($ip)) { - $ip = '未知'; - } - // 应用ID - $appId = isset($_GET['appId']) ? purge($_GET['appId']) : ''; - if (!$appId) { - $result["timestamp"] = time(); - $result["code"] = "0"; - $result["msg"] = "数据错误"; - $result["data"] = ""; - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - } - // 查询应用 - $app = DB::table("app")->where(["id" => $appId])->find(); - if (!$app) { - $result["timestamp"] = time(); - $result["code"] = "0"; - $result["msg"] = "应用不存在"; - $result["data"] = ""; - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - } - // 校验数据签名 - $sign = isset($_GET['sign']) ? purge($_GET['sign']) : ''; - if (!$sign) { - $result["code"] = "0"; - $result["msg"] = "签名数据错误"; - $result["data"] = ""; - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - } - $timestamp = isset($_GET['timestamp']) ? purge($_GET['timestamp']) : ''; - if (!$sign) { - $result["code"] = "0"; - $result["msg"] = "时间戳校验失败"; - $result["data"] = ""; - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - } - $data = file_get_contents("php://input"); - $md5 = md5($data . $timestamp . $app["commKey"]); - if ($md5 != $sign) { - $result["code"] = "0"; - $result["msg"] = "签名校验失败"; - $result["data"] = ""; - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - } - - // 未到期 - $result["code"] = "1"; - $result["msg"] = "获取成功"; - $result["data"]["version"] = $app["version"]; - $result["data"] = mi_rc4(json_encode($result["data"]), $app["commKey"], 0); - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - -} - - -if ($mod == "heartbeat") { - // 获取IP - $ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : ''; - if (!ip2long($ip)) { - $ip = '未知'; - } - // 应用ID - $appId = isset($_GET['appId']) ? purge($_GET['appId']) : ''; - if (!$appId) { - $result["code"] = "0"; - $result["msg"] = "数据错误"; - $result["data"] = ""; - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - } - // 查询应用 - $app = DB::table("app")->where(["id" => $appId])->find(); - if (!$app) { - $result["code"] = "0"; - $result["msg"] = "应用不存在"; - $result["data"] = ""; - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - } - // 校验数据签名 - $sign = isset($_GET['sign']) ? purge($_GET['sign']) : ''; - if (!$sign) { - $result["code"] = "0"; - $result["msg"] = "签名数据错误"; - $result["data"] = ""; - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - } - $timestamp = isset($_GET['timestamp']) ? purge($_GET['timestamp']) : ''; - if (!$sign) { - $result["code"] = "0"; - $result["msg"] = "时间戳校验失败"; - $result["data"] = ""; - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - } - $data = file_get_contents("php://input"); - $md5 = md5($data . $timestamp . $app["commKey"]); - if ($md5 != $sign) { - $result["code"] = "0"; - $result["msg"] = "签名校验失败"; - $result["data"] = ""; - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - } - - // 解密数据 - $decryptData = json_decode(mi_rc4($data, $app["commKey"], 1), true); - $user = DB::table("user")->where(["username" => $decryptData["username"], "password" => $decryptData["password"]])->find(); - - if (!$user) { - // if($decryptData["username"] == "hh6888") - // { - // log_api("gg1"); - // } - $result["code"] = "0"; - $result["msg"] = "账号或密码错误"; - $result["data"] = ""; - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - } - - // 计时收费 - if ($app["billingType"] == "1") { - // if($decryptData["username"] == "hh6888") - // { - // log_api("gg2"); - // } - // 判断到期 - if (strtotime($user["expireTime"]) - time() < 0) { - // if($decryptData["username"] == "hh6888") - // { - // log_api("gg3"); - // } - $result["code"] = "0"; - $result["msg"] = "用户已到期"; - $result["data"] = ""; - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - } - - // 绑定机器 - if ($app["bindType"] == "1") { - if ($decryptData["hardwareCode"] != $user["hardwareCode"]) { - $result["code"] = "0"; - $result["msg"] = "非绑定机器"; - $result["data"] = ""; - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - } - } - // 绑定IP - if ($app["bindType"] == "2") { - if ($decryptData["ip"] != $user["ip"]) { - $result["code"] = "0"; - $result["msg"] = "非绑定IP"; - $result["data"] = ""; - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - } - } - } - - // 判断是否存活 - if (time() - strtotime($user["heartbeatTime"]) > $app["heartbeatInterval"]) { - if($decryptData["username"] == "hh6888") - { - log_api("心跳失败 原始时间".strtotime($user["heartbeatTime"])."当前".time()."周期".$app["heartbeatInterval"]); - } - $result["code"] = "0"; - $result["msg"] = "心跳超时"; - $result["data"]["expireTime"] = $user["expireTime"]; - $result["data"] = mi_rc4(json_encode($result["data"]), $app["commKey"], 0); - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - } - - if($decryptData["username"] == "hh6888") - { - log_api("ssss"); - } - // 更新心跳时间 - $currentTime = date("Y-m-d H:i:s", time()); - DB::table("user")->where(["username" => $decryptData["username"], "password" => $decryptData["password"]])->update(['heartbeatTime' => $currentTime]); - - $result["code"] = "1"; - $result["msg"] = "心跳成功"; - $result["data"]["expireTime"] = $user["expireTime"]; - $result["data"]["heartbeatTime"] = $currentTime; // 添加心跳时间到返回数据 - $result["data"] = mi_rc4(json_encode($result["data"]), $app["commKey"], 0); - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - -} - -if ($mod == "login") { - // 获取IP - $ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : ''; - if (!ip2long($ip)) { - $ip = '未知'; - } - // 应用ID - $appId = isset($_GET['appId']) ? purge($_GET['appId']) : ''; - if (!$appId) { - $result["timestamp"] = time(); - $result["code"] = "0"; - $result["msg"] = "数据错误"; - $result["data"] = ""; - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - } - // 查询应用 - $app = DB::table("app")->where(["id" => $appId])->find(); - if (!$app) { - $result["timestamp"] = time(); - $result["code"] = "0"; - $result["msg"] = "应用不存在"; - $result["data"] = ""; - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - } - // 校验数据签名 - $sign = isset($_GET['sign']) ? purge($_GET['sign']) : ''; - if (!$sign) { - $result["code"] = "0"; - $result["msg"] = "签名数据错误"; - $result["data"] = ""; - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - } - $timestamp = isset($_GET['timestamp']) ? purge($_GET['timestamp']) : ''; - if (!$sign) { - $result["code"] = "0"; - $result["msg"] = "时间戳校验失败"; - $result["data"] = ""; - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - } - $data = file_get_contents("php://input"); - $md5 = md5($data . $timestamp . $app["commKey"]); - if ($md5 != $sign) { - $result["code"] = "0"; - $result["msg"] = "签名校验失败"; - $result["data"] = ""; - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - } - - // 解密数据 - $decryptData = json_decode(mi_rc4($data, $app["commKey"], 1), true); - $user = DB::table("user")->where(["username" => $decryptData["username"], "password" => $decryptData["password"]])->find(); - if (!$user) { - $result["code"] = "0"; - $result["msg"] = "账号或密码错误"; - $result["data"] = ""; - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - } - - // 计时收费 - if ($app["billingType"] == "1") { - // 判断到期 - if (strtotime($user["expireTime"]) - time() < 0) { - $result["code"] = "0"; - $result["msg"] = "用户已到期"; - $result["data"] = ""; - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - } - - // 绑定机器 - if ($app["bindType"] == "1") { - // 只有当用户已经绑定了机器码时,才进行验证 - if ($user["hardwareCode"] && $user["hardwareCode"] != '') { - if ($decryptData["hardwareCode"] != $user["hardwareCode"]) { - // 禁止解绑 - if ($app["unbindType"] == "0") { - $result["code"] = "0"; - $result["msg"] = "非绑定机器,禁止解绑"; - $result["data"] = ""; - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - } - // 免费解绑 - if ($app["unbindType"] == "1") { - // 更新机器码 - DB::table("user")->where(["username" => $decryptData["username"], "password" => $decryptData["password"]])->update(['hardwareCode' => $decryptData["hardwareCode"]]); - } - // 收费解绑 - if ($app["unbindType"] == "2") { - // 判断余额 - if (strtotime($user["expireTime"]) - $app["unbindDeduct"] < 0) { - $result["code"] = "0"; - $result["msg"] = "解绑余额不足"; - $result["data"] = ""; - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - } - // 收费 - DB::table("user")->where(["username" => $decryptData["username"], "password" => $decryptData["password"]])->update(['expireTime' => date("Y-m-d H:i:s", strtotime($user["expireTime"]) - $app["unbindDeduct"])]); - // 更新机器码 - DB::table("user")->where(["username" => $decryptData["username"], "password" => $decryptData["password"]])->update(['hardwareCode' => $decryptData["hardwareCode"]]); - } - } - } else { - // 用户没有绑定机器码,直接绑定当前机器码 - DB::table("user")->where(["username" => $decryptData["username"], "password" => $decryptData["password"]])->update(['hardwareCode' => $decryptData["hardwareCode"]]); - } - } - // 绑定IP - if ($app["bindType"] == "2") { - // 只有当用户已经绑定了IP时,才进行验证 - if ($user["ip"] && $user["ip"] != '') { - if ($decryptData["ip"] != $user["ip"]) { - // 禁止解绑 - if ($app["unbindType"] == "0") { - $result["code"] = "0"; - $result["msg"] = "非绑定IP,禁止解绑"; - $result["data"] = ""; - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - } - // 免费解绑 - if ($app["unbindType"] == "1") { - DB::table('user')->where(["username" => $decryptData["username"], "password" => $decryptData["password"]])->update(['ip' => $ip]); - } - // 收费解绑 - if ($app["unbindType"] == "2") { - // 判断余额 - if (strtotime($user["expireTime"]) - $app["unbindDeduct"] < 0) { - $result["code"] = "0"; - $result["msg"] = "解绑余额不足"; - $result["data"] = ""; - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); - } - // 收费 - DB::table("user")->where(["username" => $decryptData["username"], "password" => $decryptData["password"]])->update(['expireTime' => date("Y-m-d H:i:s", strtotime($user["expireTime"]) - $app["unbindDeduct"])]); - // 更新ip - DB::table('user')->where(["username" => $decryptData["username"], "password" => $decryptData["password"]])->update(['ip' => $ip]); - } - } - } else { - // 用户没有绑定IP,直接绑定当前IP - DB::table('user')->where(["username" => $decryptData["username"], "password" => $decryptData["password"]])->update(['ip' => $ip]); - } - } - } - - - // 更新登录时间 - $currentTime = date("Y-m-d H:i:s", time()); - DB::table("user")->where(["username" => $decryptData["username"], "password" => $decryptData["password"]])->update(['loginTime' => $currentTime]); - // 更新心跳时间 - DB::table("user")->where(["username" => $decryptData["username"], "password" => $decryptData["password"]])->update(['heartbeatTime' => $currentTime]); - // 更新IP地址 - DB::table('user')->where(["username" => $decryptData["username"], "password" => $decryptData["password"]])->update(['ip' => $ip]); - // 未到期 - $result["code"] = "1"; - $result["msg"] = "登录成功"; - $result["data"]["expireTime"] = $user["expireTime"]; - $result["data"] = mi_rc4(json_encode($result["data"]), $app["commKey"], 0); - $result["sign"] = md5($result["code"] . $result["msg"] . $result["data"]); - die(json_encode($result)); -} - - -function decode($str, $pwd) -{ - $TempUndata = hexToStrBytes($str); - $count = count($TempUndata) - 1; - $xor = getRigthBytes($TempUndata, 1); - $UnHashData = ByteXor($TempUndata, $xor); - $RValue = getMidBytes($UnHashData, $count - 2, 3); - $md5 = bytesToMd5($RValue, $xor, integerToBytes(crc32($pwd))); - $last = bytesToShort(getMidBytes($UnHashData, $count - 4, 2), 0); - $HashData = getLeftBytes($UnHashData, $count - 5); - $len = count($HashData); - $n = mb_strlen($md5); - $error = 0; - - $offset = 1; - $_last = $last; - - foreach ($HashData as $key => $value) { - - if ($len < $_last) { - $error = 1; - break; - } - if ($offset > $n) { - $offset = 1; - } - - if ($last - $offset < 0) { - $last = $n; - $offset = 1; - } - $Location = hexdec(mb_substr($md5, $last - $offset, 1)) + 3; - - - $offset++; - if ($Location > $len) { - continue; - } - - // 问题修复 +1 解决 - LocationExchange($len - $len + $key, $Location - 1, $HashData); - } - - $tCrc32 = bytesToInteger(getRigthBytes($HashData, 4)); - $HashData = getLeftBytes($HashData, $len - 4); - $nCrc32 = crc32(toStr($HashData)); - //调试输出("解密",$tCrc32,toStr($HashData),$nCrc32); - if ($error == 1) { - return ''; - } - if ($nCrc32 == $tCrc32) { - return toStr($HashData); - } - return ''; -} - -function encode($string, $pwd) -{ - $crc32 = integerToBytes(crc32($string));// 正确 - $Tempdata = array_merge_recursive(getBytes($string), $crc32);// 正确 - $Xor = getBytes(chr(mt_rand(1, 255)));// 正确 - $aaaa = mt_rand(1, 255); - $bbbb = mt_rand(1, 255); - $cccc = mt_rand(1, 255); - $RValue = [chr($aaaa), chr($bbbb), chr($cccc)]; // 修复成功 如果使用 getByTes 那么可能会识别成两个 - - $md5 = bytesToMd5($RValue, $Xor, integerToBytes(crc32($pwd)));// 正确 - - $n = mb_strlen($md5);// 正确 - $len = count($Tempdata);// 正确 - $offset = 1; - - foreach ($Tempdata as $key => $value) { - if ($offset > $n) { - $offset = 1; - } - $Location = hexdec(mb_substr($md5, $offset - 1, 1)) + 3; - - $offset++; - if ($Location > $len) { - continue; - } - - LocationExchange($len - $key - 1, $Location - 1, $Tempdata); - } - - $Tempdata = array_merge_recursive($Tempdata, shortToBytes($offset - 1), $RValue); - return bytesToHex(array_merge_recursive(ByteXor($Tempdata, $Xor), $Xor)); -} -function LocationExchange($LocalA, $LocalB, &$ByteData) -{ - - $TempA = $ByteData[$LocalA]; - $TempB = $ByteData[$LocalB]; - - - - $ByteData[$LocalA] = $TempB; - $ByteData[$LocalB] = $TempA; -} - -function 调试输出()//简易调试输出 -{ - $args = func_get_args(); - foreach ($args as $value) { - if (is_array($value)) { - print_r('字节集:' . count($value) . '{' . join($value, ',') . '}'); - echo "\t
\r\n"; - } else { - print_r($value . "\t"); - } - } - echo "\t
\r\n"; -} - -function bytesToMd5()//字节集到md5 -{ - $args = func_get_args(); - $bytes = []; - foreach ($args as $value) { - if (is_array($value)) { - $bytes = array_merge_recursive($bytes, $value); - } - } - $md5 = md5(toStr($bytes)); - $md5 = strtoupper($md5); - return $md5; -} -function bytesToInteger($bytes, $position = 0)//取整数 -{ - $val = 0; - $val = @$bytes[$position + 3] & 0xff; - $val <<= 8; - $val |= @$bytes[$position + 2] & 0xff; - $val <<= 8; - $val |= $bytes[$position + 1] & 0xff; - $val <<= 8; - $val |= $bytes[$position] & 0xff; - return $val; -} -function bytesToShort($bytes, $position)//取短整数 -{ - $val = 0; - $val = $bytes[$position + 1] & 0xFF; - $val = $val << 8; - $val |= $bytes[$position] & 0xFF; - return $val; -} -function getMidBytes($bytes, $start, $num)//取字节集中间 -{ - $mBytes = []; - for ($i = 0; $i < $num; $i++) { - $mBytes[] = $bytes[$start - 1 + $i]; - } - return $mBytes; -} - -function getLeftBytes($bytes, $num)//取字节集左边 -{ - $lBytes = []; - for ($i = 0; $i < $num; $i++) { - $lBytes[] = $bytes[$i]; - } - return $lBytes; -} -function getRigthBytes($bytes, $num)//取字节集右边 -{ - $count = count($bytes) - $num; - $rBytes = []; - for ($i = 0; $i < $num; $i++) { - $rBytes[] = $bytes[$count + $i]; - } - return $rBytes; -} - -function hexToStrBytes($hex)//十六进制到字节集 -{ - $bytes = array(); - for ($i = 0; $i < mb_strlen($hex) - 1; $i += 2) { - $bytes[] = ord(chr(hexdec($hex[$i] . $hex[$i + 1]))); - } - return $bytes; -} - -function ByteXor($bytes, $xor) -{ - $_bytes = []; - foreach ($bytes as $val) { - $_bytes[] = $val ^ $xor[0]; - } - return $_bytes; -} - -function bytesToHex($bytes)//字节集转十六进制 -{ - $hex = ""; - foreach ($bytes as $value) { - $hex .= sprintf("%02X", $value); - } - return $hex; -} - -function strToHex($string)//字符串转十六进制 -{ - $hex = ""; - for ($i = 0; $i < strlen($string); $i++) - $hex .= dechex(ord($string[$i])); - $hex = strtoupper($hex); - return $hex; -} -function hexToStr($hex)//十六进制转字符串 -{ - $string = ""; - for ($i = 0; $i < strlen($hex) - 1; $i += 2) - $string .= chr(hexdec($hex[$i] . $hex[$i + 1])); - return $string; -} - -function toStr($bytes)//到文本 -{ - $str = ''; - foreach ($bytes as $ch) { - $str .= chr($ch); - } - return $str; -} -function getBytes($string)//到字节集 -{ - $bytes = array(); - for ($i = 0; $i < mb_strlen($string); $i++) { - $bytes[] = ord($string[$i]); - } - return $bytes; -} - -function integerToBytes($val)//整数到字节集 -{ - $byt = array(); - $byt[0] = ($val & 0xff); - $byt[1] = ($val >> 8 & 0xff); - $byt[2] = ($val >> 16 & 0xff); - $byt[3] = ($val >> 24 & 0xff); - return $byt; -} - -function shortToBytes($val)//短整数到字节集 -{ - $byt = array(); - $byt[0] = ($val & 0xff); - $byt[1] = ($val >> 8 & 0xff); - return $byt; -} - - -?> \ No newline at end of file