checkVerify(); $this->assign('isVerify', isset($res['isVerified']) ? $res['isVerified'] : ''); $this->assign('verify_info', isset($res['membersTwoInfo']) ? $res['membersTwoInfo'] : ''); //判断是否已经实名认证 $settingModel = new Setting; $restrictExplain = $settingModel::getSetting('GAME_RESTRICT_EXPLAIN'); $this->assign('restrictExplain', $restrictExplain); $this->assign('username', $this->username); return $this->fetch(); } /** * 实名认证-麻花网络防沉迷相关规则 */ public function rule() { $settingModel = new Setting; $restrictExplain = $settingModel::getSetting('GAME_RESTRICT_EXPLAIN'); $this->assign('restrictExplain', $restrictExplain); return $this->fetch(); } /** * 实名认证处理 */ public function Verify() { $membersModel = new Members(); $membersTwoModel = new MembersTwo(); $username = input('post.username'); //用户名 $data = [ 'realname' => input('post.realname', '', 'trim'), 'idcard' => input('post.idcard', '', 'trim'), ]; $result = $this->validate($data, [ //['username', 'require|isEmpty', '参数不完整|用户名不能为空'], ['realname', 'require|length:2,10|chs', '请输入真实姓名| 姓名长度为 2 - 10|姓名只能是汉字'], ['idcard', 'require|identityNumber', '请输入身份证号码|身份证号码格式不正确'], ]); //参数校验 if (true !== $result) { return $this->json('', 0, $result); } // 通过身份证验证年龄 if (!isMeetAgeByIDCard($data['idcard'], 12, 120)) { return $this->json('', 0, '您未满足年龄要求(12-120岁),无法通过认证'); } $member_id = $membersModel->where(['username' => $this->username])->value('id'); if (empty($member_id)) { return $this->json('', 0, '用户不存在'); } $gameInfo = (new Game())->where(['id' => Session::get('game_id')])->find(); if ($gameInfo['game_auth_type'] == 1) { //中宣部实名认证 if (!trim($gameInfo['game_bizid'])) { return $this->json('', 0, '该游戏未配置游戏备案识别码'); } $gameAccountInfo = model('Subaccount')->where(['game_id' => Session::get('game_id'), 'member_id' => $member_id])->find(); if ($gameAccountInfo) { if ($gameAccountInfo['auth_status'] <> 3) { vendor('authSdk.Authentication', '.class.php'); $auth = new \Authentication(); $result = $auth->check(trim($gameInfo['game_bizid']), $gameAccountInfo['member_id'] . '-' . $gameAccountInfo['id'], $data['realname'], $data['idcard']); if ($result['errcode'] <> 0) { if ($result['errcode'] == 2004) { return $this->json('', 0, '不能频繁调用中宣部实名认证接口,请稍后再重新发起认证'); } else { return $this->json('', 0, '调用接口异常:' . $result['errmsg']); } } else { $resultData = $result['data']['result']; if ($resultData['status'] == 0) { $updAccountData = array(); $updAccountData['auth_type'] = 1; $updAccountData['real_name'] = trim($data['realname']); $updAccountData['idcard_num'] = trim($data['idcard']); $updAccountData['auth_status'] = 3; $updAccountData['auth_pi'] = $resultData['pi']; $updAccountData['last_auth_time'] = time(); $updResult = model('Subaccount')->where(['id' => $gameAccountInfo['id']])->update($updAccountData); if ($updResult) { $mark = $this->checkPlayLogin(input('post.idcard', '', 'trim')); file_put_contents(RUNTIME_PATH . "1.txt", "结果1:" . $mark . "\n", FILE_APPEND); return $this->json(["mark" => $mark], 1, '认证成功'); } else { return $this->json('', 0, '实名认证结果保存异常'); } } else if ($resultData['status'] == 1) { $updAccountData = array(); $updAccountData['auth_type'] = 1; $updAccountData['real_name'] = trim($data['realname']); $updAccountData['idcard_num'] = trim($data['idcard']); $updAccountData['auth_status'] = 1; $updAccountData['auth_pi'] = $resultData['pi']; $updAccountData['last_auth_time'] = time(); $updResult = model('Subaccount')->where(['id' => $gameAccountInfo['id']])->update($updAccountData); if ($updResult) { $mark = $this->checkPlayLogin(input('post.idcard', '', 'trim')); file_put_contents(RUNTIME_PATH . "1.txt", "结果2:" . $mark . "\n", FILE_APPEND); return $this->json(["mark" => $mark], 2, '您的实名认证请求已提交审核,请耐心等待认证结果'); } else { return $this->json('', 0, '您的实名认证请求已提交审核,保存异常'); } } else { return $this->json('', 0, '未通过实名认证'); } } } else { $mark = $this->checkPlayLogin(input('post.idcard', '', 'trim')); file_put_contents(RUNTIME_PATH . "1.txt", "结果3:" . $mark . "\n", FILE_APPEND); return $this->json(["mark" => $mark], 1, '您已实名认证成功'); } } else { return $this->json('', 0, '您尚未创建游戏账号'); } } else if ($gameInfo['game_auth_type'] == 2) { //通过上级调用中宣部认证 $gameAccountInfo = model('Subaccount')->where(['game_id' => Session::get('game_id'), 'member_id' => $member_id])->find(); if ($gameAccountInfo) { return $this->json('', 0, '该认证方式尚未开放'); } else { return $this->json('', 0, '您尚未创建游戏账号'); } } else { //平台实名认证 //实名认证数据更新 if ($membersTwoModel->where(['userid' => $member_id])->find()) { $flag = $membersTwoModel->update($data, ['userid' => $member_id]); } else { $data['userid'] = $member_id; $data['username'] = $this->username; $data['create_time'] = time(); $flag = $membersTwoModel->insert($data); } // 插入玩家历史记录 Db::table('cy_member_history')->insert([ 'userid' => $member_id, 'password' => $data['realname'].' '.$data['idcard'].' '.$this->username, 'mobile' => '', 'ip' => request()->ip(), 'create_time' => time(), ]); if ($flag) { $mark = $this->checkPlayLogin(input('post.idcard', '', 'trim')); file_put_contents(RUNTIME_PATH . "1.txt", "结果4:" . $mark . "\n", FILE_APPEND); return $this->json(["mark" => $mark], 1, '认证成功'); } else { return $this->json('', 0, '认证失败'); } } } /*** * 检测 */ public function checkPlayLogin($idcard) { $flag = 0; if (isMeetAgeByIDCard($idcard, 12, 18)) { $flag = 1; } return $flag; } /** * 判断是否节假日 */ public function getHoliday($date) { try { $url = "https://tool.bitefu.net/jiari/?d=$date&back=json"; $result = file_get_contents($url); $result = json_decode($result, true); if (isset($result[$date]) && $result[$date] == 2) { return true; } else { return false; } } catch (\Exception $e) { return false; } } /** * 验证是否实名认证 * @return array * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ protected static function checkVerify() { $membersTwoModel = new MembersTwo(); $membersTwoInfo = $membersTwoModel->where(['userid' => Session::get('userid')])->find(); $gameInfo = (new Game())->where(['id' => Session::get('game_id')])->find(); if ($gameInfo['game_auth_type'] == 1 || $gameInfo['game_auth_type'] == 2) { //中宣部实名认证 $gameAccountInfo = model('Subaccount')->where(['game_id' => Session::get('game_id'), 'member_id' => Session::get('userid')])->find(); if ($gameAccountInfo) { if ($gameAccountInfo['auth_status'] == 3) { $isVerified = 1; $membersTwoInfo['realname'] = trim($gameAccountInfo['real_name']); $membersTwoInfo['idcard'] = trim($gameAccountInfo['idcard_num']); } else if ($gameAccountInfo['auth_status'] == 1) { $isVerified = 1; $membersTwoInfo['realname'] = trim($gameAccountInfo['real_name']); $membersTwoInfo['idcard'] = trim($gameAccountInfo['idcard_num']); } else { $isVerified = 0; $membersTwoInfo['realname'] = ''; $membersTwoInfo['idcard'] = ''; } } else { $isVerified = 0; $membersTwoInfo['realname'] = ''; $membersTwoInfo['idcard'] = ''; } } else { //平台实名认证 if (empty($membersTwoInfo) || empty($membersTwoInfo['realname']) || empty($membersTwoInfo['idcard'])) { $isVerified = 0; } else if ((-1 == $membersTwoInfo['realname']) && (-1 == $membersTwoInfo['idcard'])) { $isVerified = 0; } else { $isVerified = 1; } } return ['isVerified' => $isVerified, 'membersTwoInfo' => $membersTwoInfo]; } }