| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411 |
- <?php
- /**
- * 前台用户公共业务逻辑类
- *
- */
- namespace app\common\logic;
- use app\common\model\Game;
- use app\common\model\MembersTwo;
- use app\service\CommonService;
- use think\Config;
- use think\Db;
- use think\Env;
- use think\Exception;
- class Member {
- /**
- * 同步用户信息到账户中心
- *
- * @param $username:用户名
- * @param $password:明文密码
- * @param $mobile:手机号码
- * @param $now_time:当前时间
- *
- * @return string mem_openid
- */
- public function syncMember($username, $password, $mobile,$now_time)
- {
- $mgMemberInfo = Db::connect('db_config_resource_center')->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'];
- }
- }
|