editMessageText($res); } if ($data === "secret@@view") { $res = SecretService::view($chatId, $messageId); $telegram->editMessageText($res); } //找回账号 if ($data === "secret@@retrieve") { $res = SecretService::retrieve($chatId, $messageId); $telegram->editMessageText($res); } //确认找回 if ($data === "secret@@confirm") { $res = SecretService::confirm($chatId, $messageId); $telegram->editMessageText($res); } } public static function onMessage($chatId, $text, $messageId, $stepStatus): null|array { switch ($stepStatus) { case StepStatus::MY_INPUT_OLD_SECRET: return SecretService::inputOldSecret($chatId, $text, $messageId); case StepStatus::MY_INPUT_SECRET_PASS: return SecretService::showSecretKey(); default: return null; } } private static function showSecretKey($chatId, $password, $messageId): array { $user = User::where('member_id', $chatId)->first(); if ($user->secret_pass == '') { $user->secret_pass = $password; $user->save(); } if ($user->secret_pass !== $password) { $text = "密码错误"; return [ 'chat_id' => $chatId, 'text' => $text, 'reply_to_message_id' => $messageId ]; } $text = "秘钥:{$user->secret_key}\n\n"; $text .= "请保管好你的秘钥"; return [ 'chat_id' => $chatId, 'text' => $text, ]; } private static function view($chatId, $messageId): array { $text = "请输入查看密码"; $user = User::where('member_id', $chatId)->first(); if ($user->secret_pass == '') { $secretKey = SecretService::generateRandomString(22); $user->secret_key = $secretKey; $user->save(); } Cache::put(get_step_key($chatId), StepStatus::MY_INPUT_SECRET_PASS); return [ 'chat_id' => $chatId, 'text' => $text, 'message_id' => $messageId, ]; } private static function confirm($chatId, $messageId): array { $secret = Cache::get("{$chatId}_OLD_SECRET"); $user = User::where(['secret_key' => $secret])->where('member_id', '!=', $chatId)->first(); $wallet = Wallet::where('member_id', $user->getMemberId())->first(); // $res = WalletService::updateBalance($user->getMemberId(), $wallet->available_balance * -1); // BalanceLogService::addLog( // $chatId, // $wallet->available_balance * -1, // $res['before_balance'], // $res['after_balance'], // "账号找回", // '', // "新账号:{$chatId}" // ); // // $res = WalletService::updateBalance($chatId, $wallet->available_balance); // BalanceLogService::addLog( // $chatId, // $wallet->available_balance, // $res['before_balance'], // $res['after_balance'], // "账号找回", // '', // "原账号:{$user->getMemberId()}" // ); return []; } private static function inputOldSecret($chatId, $secret, $messageId): array { $user = User::where(['secret_key' => $secret])->where('member_id', '!=', $chatId)->first(); if (!$user) { return [ 'chat_id' => $chatId, 'text' => "输入错误,请重新输入", 'reply_to_message_id' => $messageId ]; } $wallet = Wallet::where('member_id', $user->getMemberId())->first(); $keyboard = [ [ ['text' => '确认', 'callback_data' => 'secret@@confirm'], ] ]; $text = "原账号信息:\n"; $text .= "用户ID:{$user->getMemberId()}\n"; $text .= "用户名:{$user->getUsername()}\n}"; $text .= "昵称:{$user->getFirstName()}\n"; $text .= "余额:{$wallet->available_balance}\n"; $text .= "\n-------------------------------\n\n"; $text .= "注意:请确认原账号信息,点击确认后,原账号将注销,原账号的余额以及其他信息将同步到新账号中!此操作不可撤销"; Cache::put("{$chatId}_OLD_SECRET", $secret); return [ 'chat_id' => $chatId, 'text' => $text, 'reply_markup' => json_encode(['inline_keyboard' => $keyboard]) ]; } private static function retrieve($chatId, $messageId): array { Cache::put(get_step_key($chatId), StepStatus::MY_INPUT_OLD_SECRET); return [ 'chat_id' => $chatId, 'text' => '请输入原账号的秘钥', 'message_id' => $messageId, ]; } private static function index($chatId, $messageId): array { $keyboard = [ [ ['text' => '查看秘钥', 'callback_data' => 'secret@@view'], ['text' => '找回账号', 'callback_data' => 'secret@@retrieve'], ], [ ['text' => '返回', 'callback_data' => 'topUp@@home'], ] ]; $text = "秘钥管理\n"; $text .= "请选择业务类型"; return [ 'chat_id' => $chatId, 'text' => $text, 'message_id' => $messageId, 'reply_markup' => json_encode(['inline_keyboard' => $keyboard]) ]; } private static function generateRandomString($length = 10) { // 定义大写字母和数字的字符集 $characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; // 获取字符集的长度 $charactersLength = strlen($characters); // 初始化随机字符串 $randomString = ''; // 生成随机字符串 for ($i = 0; $i < $length; $i++) { // 从字符集随机选择一个字符 $randomString .= $characters[rand(0, $charactersLength - 1)]; } return $randomString; } }