table('mg_member')->field('mem_id,mem_openid')->where(['mem_login_name'=>$username,'pl_id'=>2])->find(); $data = ['mem_password' => password_hash($password, PASSWORD_DEFAULT), 'mem_mobile' => $mobile, 'mem_updatetime'=> $now_time, ]; // 账户不存在,做插入 if(empty($mgMemberInfo)) { $data['pl_id'] = 2; $data['mem_openid'] = md5($now_time.rand(1000, 9999)); $data['mem_login_name'] = $username; Db::connect('db_config_resource_center')->table('mg_member')->insert($data); $openid = $data['mem_openid']; }else{ // 存在,更新账户的手机号和密码 Db::connect('db_config_resource_center')->table('mg_member')->where(['mem_id'=>$mgMemberInfo['mem_id']])->update($data); $openid = $mgMemberInfo['mem_openid']; } return $openid; } /** * 检测txt文件 * @param $users * @return boolean */ public function checkContent($users) { if (empty($users)) { return '格式有误,请重新上传1'; } $users = array_map('trim', $users); foreach ($users as $user) { if (! preg_match('/^[0-9a-zA-Z]+:[0-9a-zA-Z]+$/', $user)) { return '格式有误,请重新上传'; } } return true; } /** * 用户注册 * @param $data * @return boolean */ public function registerUser($data) { $now_time = request()->time(); $data['password'] = auth_code($data['password'], "ENCODE", Env::get('auth_key')); // 加密 $data['reg_time'] = $now_time; $data['login_time'] = $now_time; $data['ip'] = request()->ip(); // 启动事务 Db::startTrans(); try { $member_id = Db::table('cy_members')->insertGetId($data); if ($member_id) { // 插入玩家历史记录 Db::table('cy_member_history')->insert([ 'userid' => $member_id, 'password' => $data['password'], 'ip' => request()->ip(), 'create_time' => $now_time ]); //插入用户扩展记录 Db::table('cy_memberstwo')->insert([ 'userid' => $member_id, 'username' => $data['username'], 'realname' => -1, 'idcard' => -1, 'create_time' => $now_time ]); // 登录时 绑定该游戏的归属渠道 Db::table('cy_member_channel_game_rel')->insert([ 'member_id' => $member_id, 'channel_id' => $data['channel_id'], 'game_id' => $data['gameid'], 'mcgr_createtime' => time(), 'update_time' => time(), 'mcgr_ip' => request()->ip() ]); $sub_username = strtolower(random(20)).'_'.$data['gameid'].Env::get('sdk_mark_type'); Db::table('nw_subaccount')->insert([ 'member_id' => $member_id, 'game_id' => $data['gameid'], 'channel_id' => $data['channel_id'], 'sub_username' => $sub_username, 'create_time' => time(), 'update_time' => time(), ]); Db::table('cy_members')->where(['id' => $member_id])->update(['nickname' => random(3).$member_id]); // // 另一端游戏提前绑定当前渠道 // $gameType = Db::table('cy_game')->where(['id' => $data['gameid']])->value('type'); // if ($gameType == 1) { // ios // $gameBandId = Db::table('nw_game_band')->where(['ios_game_id' => $data['gameid']])->value('android_game_id'); // } else if ($gameType == 2) { // 安卓 // $gameBandId = Db::table('nw_game_band')->where(['android_game_id' => $data['gameid']])->value('ios_game_id'); // } // if ($gameBandId) { // Db::table('cy_member_channel_game_rel')->insert([ // 'member_id' => $member_id, // 'channel_id' => $data['channel_id'], // 'game_id' => $gameBandId, // 'mcgr_createtime' => time(), // 'update_time' => time(), // 'mcgr_ip' => request()->ip() // ]); // // $sub_username = strtolower(random(20)).'_'.$gameBandId.Env::get('sdk_mark_type'); // Db::table('nw_subaccount')->insert([ // 'member_id' => $member_id, // 'game_id' => $gameBandId, // 'channel_id' => $data['channel_id'], // 'sub_username' => $sub_username, // 'create_time' => time(), // 'update_time' => time(), // ]); // } } else { throw new Exception("注册失败!"); } Db::commit(); return true; } catch (Exception $e) { Db::rollback(); return $e->getMessage(); } } /** * 游戏-账号-角色查询 * @param array $condition * @return \think\Paginator|\think\paginator\Collection */ public function accountQuery($condition, $pageNum=20) { $infoList = Db::table('cy_role_info')->alias('info') ->join('cy_members user', 'info.userid = user.id', 'left') ->join('cy_game game', 'game.id = info.gameid', 'left') ->field(['game.name', 'user.username', 'info.serverid','info.servername', 'info.roleid','info.rolename', 'info.rolelevel', 'info.create_time']) ->where($condition) ->order('info.id', 'desc') ->paginate($pageNum, false, ['query' => input('get.')]); return $infoList; } /** * 游戏-账号-角色查询 * @param array $condition * @return \think\Paginator|\think\paginator\Collection */ public function queryUserRole(array $condition) { $roleInfo = Db::table('cy_role_info') ->field(['servername', 'rolename', 'rolelevel']) ->where($condition) ->order('id', 'asc') ->find(); return $roleInfo; } /** * 实名认证同步 * * @param int $memberId 用户ID * @param int $gameId 游戏ID * * @return array */ public function realNameSync($memberId, $gameId){ $gameInfo = Db::table('cy_game')->where('id', $gameId)->field('type,game_auth_type')->find(); $bandWhere = []; $bandField = ['android_game_id', 'ios_game_id', 'h5_game_id']; // ## 游戏类型:1=ios、2=安卓、3=h5 if($gameInfo['type'] == 1){ $bandWhere['android_game_id'] = $gameId; unset($bandField['android_game_id']); } else if($gameInfo['type'] == 2){ $bandWhere['ios_game_id'] = $gameId; unset($bandField['ios_game_id']); } else if($gameInfo['type'] == 3){ $bandWhere['h5_game_id'] = $gameId; unset($bandField['h5_game_id']); } $gameBandIds = Db::table('nw_game_band')->where($bandWhere)->field($bandField)->find(); // 获取其他平台最新的实名信息 $realType = 1; // ## 认证类型: 0平台认证, 1中宣部实名认证 2通过上游认证 $realInfo = Db::table('nw_subaccount')->where([ 'member_id' => $memberId, 'game_id' => ['in', $gameBandIds], 'real_name' => ['>', ''], 'idcard_num' => ['>', ''], 'auth_status' => 3 ])->field('real_name,idcard_num,create_time')->order('create_time desc')->find(); $realData = []; if($realInfo){ $realData = [ 'real_name' => $realInfo['real_name'], 'idcard_num' => $realInfo['idcard_num'] ]; }else{ $realInfo = Db::table('cy_memberstwo')->where([ 'userid' => $memberId, 'realname' => ['>', ''], 'idcard' => ['>', ''] ])->field('realname as real_name,idcard as idcard_num,create_time')->order('create_time desc')->find(); if($realInfo){ $realData = [ 'real_name' => $realInfo['real_name'], 'idcard_num' => $realInfo['idcard_num'] ]; } $realType = 2; } if($realData){ $result = $this->realNameHandle($gameInfo['game_auth_type'], $memberId, $gameId, $realData['real_name'], $realData['idcard_num']); if($result['code'] != 200){ return ['code' => -110, 'msg' => $result['msg']]; } return ['code' => 200, 'data' => [], 'msg' => 'succes']; } return ['code' => -100, 'msg' => '实名认证同步失败']; } /** * 实名认证处理 * * @param int $realType 认证类型:1=中宣部实名认证, 2=平台认证 * @param int $memberId 用户ID * @param int $gameId 游戏ID * @param string $realName 真实姓名 * @param string $idcardNum 身份证号码 * * @return array * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function realNameHandle($realType = 1, $memberId, $gameId, $realName, $idcardNum){ $membersTwoModel = new MembersTwo(); $gameInfo = Db::table('cy_game')->alias('cg') ->join('cy_gameinfo cgi', 'cg.id=cgi.game_id', 'left') ->where(['cg.id' => $gameId])->field('cg.game_bizid, cgi.belonging_status')->find(); $subInfo = Db::table('nw_subaccount')->alias('ns') ->join('cy_members cm', 'ns.member_id = cm.id') ->field('ns.id, cm.username, ns.channel_id') ->where(['ns.game_id' => $gameId, 'ns.member_id' => $memberId])->find(); $memberData = [ 'realname' => $realName, 'idcard' => $idcardNum, 'update_time' => time() ]; if($realType == 1){ vendor('authSdk.Authentication', '.class.php'); $auth = new \Authentication(); $ai = $gameId.'-'.$memberId.'-'.$subInfo['id']; $result = $auth->checkV2(trim($gameInfo['game_bizid']), $ai, $realName, $idcardNum); if($result['code'] != 200){ return ['code' => -110, 'msg' => $result['msg']]; } $resultData = $result['data']; try { $subAccountData = [ 'auth_type' => 1, 'real_name' => trim($realName), 'idcard_num' => trim($idcardNum), 'auth_pi' => $resultData['pi'], 'last_auth_time' => time() ]; Db::startTrans(); if ($resultData['status'] == 0) { $subAccountData['auth_status'] = 3; $subResult = model('Subaccount')->where(['id' => $subInfo['id']])->update($subAccountData); if (!$subResult) { throw new \Exception('实名认证结果保存异常', -120); } // 更新用户扩展信息的实名信息 $merRsult = $membersTwoModel->update($memberData, ['userid' => $memberId]); if (!$merRsult) { throw new \Exception('实名认证结果保存异常', -121); } } else if ($resultData['status'] == 1) { $subAccountData['auth_status'] = 1; $subResult = model('Subaccount')->where(['id' => $subInfo['id']])->update($subAccountData); if (!$subResult) { throw new \Exception('实名信息已提交审核,请耐心等待认证结果', -123); } } else { throw new \Exception('实名认证,未通过', -124); } Db::commit(); } catch (\Exception $e) { Db::rollback(); return ['code' => -100, 'data' => [], 'msg' => $e->getMessage().', '.$e->getCode()]; } }else{ try { Db::startTrans(); // 实名认证数据更新 if ($membersTwoModel->where(['userid' => $memberId])->find()) { $merSaveResult = $membersTwoModel->update($memberData, ['userid' => $memberId]); } else { $memberData['userid'] = $memberId; $memberData['username'] = $subInfo['username']; $memberData['create_time'] = time(); $merSaveResult = $membersTwoModel->insert($memberData); } if(!$merSaveResult){ throw new \Exception('实名认证,保存失败', -150); } Db::commit(); } catch (\Exception $e) { Db::rollback(); return ['code' => -130, 'data' => [], 'msg' => $e->getMessage().', '.$e->getCode()]; } } // 插入玩家历史记录 $historyRsult = Db::table('cy_member_history')->insert([ 'userid' => $memberId, 'password' => $subInfo['username'] . ' - ' . $realName . ' - ' . $idcardNum, 'mobile' => '', 'ip' => request()->ip(), 'create_time' => time(), ]); if (!$historyRsult) { return ['code' => -160, 'data' => [], 'msg' => '认证记录存储失败']; } // ## (归属保护)处理游戏绑定渠道管理 if($gameInfo['belonging_status'] != 1){ (new CommonService())->handleBelongToBinding($memberId, $subInfo['channel_id'], $gameId, $realName, $idcardNum); } return ['code' => 200, 'data' => [], 'msg' => 'success']; } }