checkLock()) { return redirect('User/login'); }; return View::fetch(); } public function install(Request $request) { // 检查是否已经安装过 if ($this->checkLock()) { return backMsg(1, '已经安装'); }; // 获取表单提交的数据库配置信息 $dbConfig = $request->post(); // 保存数据库配置信息到配置文件 $this->saveDbConfig($dbConfig); // 连接数据库并建表 $is_succ_tb = $this->createTables(); // 初始化数据记录 $is_succ_data = $this->initData($dbConfig); // 安装检测 if (!$is_succ_tb) { return json(backMsg(1, '数据表创建失败')); } if (!$is_succ_data) { return json(backMsg(1, '数据初始化失败')); } // 安装成功,写入安装锁文件 $this->setLock(); return json(backMsg(0, '安装成功')); } private function saveDbConfig($dbConfig) { $envPath = app()->getRootPath() . '.env'; $envContent = <<execute("DROP TABLE IF EXISTS `mpay_order`;"); $db->execute($sql); // 创建pay_account表的 SQL 语句 $sql = "CREATE TABLE `mpay_pay_account` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '收款平台ID', `pid` int(11) NOT NULL DEFAULT '0' COMMENT '用户ID', `platform` varchar(255) NOT NULL DEFAULT '' COMMENT '收款平台', `account` varchar(255) NOT NULL DEFAULT '' COMMENT '账号', `password` varchar(255) NOT NULL DEFAULT '' COMMENT '密码', `state` tinyint(4) NOT NULL DEFAULT '1' COMMENT '启用', `pattern` tinyint(4) NOT NULL DEFAULT '1' COMMENT '账号监听模式', `params` varchar(255) NOT NULL DEFAULT '' COMMENT '自定义查询', `delete_time` timestamp NULL DEFAULT NULL COMMENT '软删除', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;"; // 执行 SQL 语句创建表 $db->execute("DROP TABLE IF EXISTS `mpay_pay_account`;"); $db->execute($sql); // 创建pay_channel表的 SQL 语句 $sql = "CREATE TABLE `mpay_pay_channel` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '渠道ID', `account_id` int(11) NOT NULL DEFAULT '0' COMMENT '收款平台ID', `channel` varchar(255) NOT NULL DEFAULT '' COMMENT '收款通道', `type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '保存类型', `qrcode` varchar(255) NOT NULL DEFAULT '' COMMENT '二维码', `last_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最近使用', `state` tinyint(4) NOT NULL DEFAULT '1' COMMENT '启用', `delete_time` timestamp NULL DEFAULT NULL COMMENT '软删除', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;"; // 执行 SQL 语句创建表 $db->execute("DROP TABLE IF EXISTS `mpay_pay_channel`;"); $db->execute($sql); // 创建user表的 SQL 语句 $sql = "CREATE TABLE `mpay_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `pid` int(11) NOT NULL DEFAULT '0' COMMENT '商户ID', `secret_key` varchar(255) CHARACTER SET utf8mb4 NOT NULL DEFAULT '' COMMENT '商户秘钥', `nickname` varchar(255) CHARACTER SET utf8mb4 NOT NULL DEFAULT '' COMMENT '用户昵称', `username` varchar(255) CHARACTER SET utf8mb4 NOT NULL DEFAULT '' COMMENT '账号', `password` varchar(255) CHARACTER SET utf8mb4 NOT NULL DEFAULT '' COMMENT '密码', `state` tinyint(4) NOT NULL DEFAULT '1' COMMENT '启用状态 0:禁用 1:启用', `role` tinyint(4) NOT NULL DEFAULT '0' COMMENT '用户角色 0:普通用户 1:管理员', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `delete_time` timestamp NULL DEFAULT NULL COMMENT '软删除', PRIMARY KEY (`id`) USING BTREE ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;"; // 执行 SQL 语句创建表 $db->execute("DROP TABLE IF EXISTS `mpay_user`;"); $db->execute($sql); return true; } private function initData($dbConfig) { // 连接数据库 $db = Db::connect(); $info = [ 'secret_key' => md5(1000 . time() . mt_rand()), 'nickname' => $dbConfig['nickname'], 'username' => $dbConfig['username'], 'password' => password_hash($dbConfig['password'], PASSWORD_DEFAULT), ]; // 初始化数据的 SQL 语句 $sql = "INSERT INTO `mpay_user` (`id`, `pid`, `secret_key`, `nickname`, `username`, `password`, `state`, `role`) VALUES (1, 1000, :secret_key, :nickname, :username, :password, 1, 1);"; // 执行 SQL 语句插入初始数据 $is_succ = $db->execute($sql, $info); if (!$is_succ) { return false; } return true; } private function checkLock() { $path = runtime_path() . 'install.lock'; return file_exists($path); } private function setLock() { $path = runtime_path() . 'install.lock'; file_put_contents($path, time()); } }