where(['type_text' => $login_device,'type' => 2])->find(); if ($block) { return ['code' => 0, 'msg' => '设备已被封禁', 'data' => null]; } $ip = request()->ip(); $block = db::name('block')->where(['type_text' => $ip,'type' => 3])->find(); if ($block) { return ['code' => 0, 'msg' => 'ip已被封禁', 'data' => null]; } $data = []; $user_code = $this->get_user_code(); //获取用户code_id 过滤靓号 $data['user_code'] = $user_code; $data['username'] = $user_name; $data['mobile'] = $user_name; $data['nickname'] = '游客'.$user_code; $data['joinip'] = request()->ip(); $data['birthday'] = date('Y-m-d'); $data['avatar'] = get_system_config_value('web_site').'/data/avatar/head_pic.png'; $data['profile'] = '这个人很懒,什么都没写'; $data['system'] = $system; $data['login_device'] = $login_device; $data['createtime'] = time(); $data['logintime'] = time(); $data['status'] = 1; // $data['init_code'] = model('User')->invite_code(); $reslut = db::name('user')->insertGetId($data); //获取上一步的id $user_id = model('User')->where('user_code',$user_code)->value('id'); if (!$reslut) { return ['code' => 0, 'msg' => '登录失败le', 'data' => null]; }; //创建钱包 $user_wallet = model('UserWallet')->create_data($user_id); if (!$user_wallet) { return ['code' => 0, 'msg' => '登录失败1', 'data' => null]; } //注册即奖励金币【完成任务】 model('DailyTasks')->tasks_complete($user_id,11); /*********** 腾讯云IM ********/ $user_sig = model('Tencent')->tencent_user_sig_info('u'.$user_id); model('Tencent')->account_import($user_id); if(empty($user_sig)){ return ['code' => 0, 'msg' => '登录失败2', 'data' => null]; } //登录token $login_token = model('UserToken')->update_token($user_id); if(isset($login_token['code']) && $login_token['code'] != 1){ return ['code' => 0, 'msg' => '登录失败3', 'data' => null]; } $user_data = []; $user_data['tencent_im'] = $user_sig; $user_data['createtime'] = time(); $user_data['user_id'] = $user_id; $user_data['wx_openid'] = $openid; $user_data['ali_userid'] = $ali_userid; $user_data['apple_id'] = $apple_id; $reslut_user_data = model('UserData')->save($user_data); if (!$reslut_user_data) { return ['code' => 0, 'msg' => '登录失败4', 'data' => null]; } $return_res[0]['user_id'] = $user_id; $return_res[0]['user_code'] = $user_code; $return_res[0]['avatar'] = 'data/avatar/head_pic.png'; $return_res[0]['nickname'] = '游客'.$user_code; $return_res[0]['token'] = $login_token; $return_res[0]['tencent_im'] = $user_sig; $return_res[0]['sex'] = 0; $return_res[0]['mobile'] = $user_name; $return_res[0]['auth'] = 0; $return_res[0]['icon'][0] = model('UserData')->user_wealth_icon($user_id);//财富图标 $return_res[0]['icon'][1] = model('UserData')->user_charm_icon($user_id);//魅力图标 return ['code' => 1, 'msg' => '登录成功', 'data' => $return_res]; } //登录 public function login($user_info, $system,$login_device ,$logtype='') { //查询账号封禁 $block = db::name('block')->where(['type_text' => $user_info['id'],'type' => 1])->find(); if ($block) { if($block['block_time'] != 0 && $block['block_time'] <= time()){ db('block')->where(['id' => $block['id']])->delete(); }else{ if($block['block_time'] == 0){ return ['code' => 301, 'msg' => '用户已被永久封禁', 'data' => null]; }else{ return ['code' => 301, 'msg' => '用户已被封禁,解封时间:'.date('Y-m-d H:i:s',$block['block_time']), 'data' => null]; } } } $block = db::name('block')->where(['type_text' => $login_device,'type' => 2])->find(); if ($block) { if($block['block_time'] != 0 && $block['block_time'] <= time()){ db('block')->where(['id' => $block['id']])->delete(); }else{ if($block['block_time'] == 0){ return ['code' => 301, 'msg' => '设备已被永久封禁', 'data' => null]; }else{ return ['code' => 301, 'msg' => '设备已被封禁,解封时间:'.date('Y-m-d H:i:s',$block['block_time']), 'data' => null]; } } } $ip = request()->ip(); $block = db::name('block')->where(['type_text' => $ip,'type' => 3])->find(); if ($block) { if($block['block_time'] != 0 && $block['block_time'] <= time()){ db('block')->where(['id' => $block['id']])->delete(); }else{ if($block['block_time'] == 0){ return ['code' => 301, 'msg' => 'ip已被永久封禁', 'data' => null]; }else{ return ['code' => 301, 'msg' => 'ip已被封禁,解封时间:'.date('Y-m-d H:i:s',$block['block_time']), 'data' => null]; } } } $save_data = []; $save_data['id'] = $user_info['id']; //查询手机号绑定的账号 $phone_user = $this->phone_login_query($user_info['mobile']); if($phone_user['code'] == 1){ if(empty($logtype)){ //多账号登录 //获取返回数据的长度 if(count($phone_user['data']) >= 2){ //多账号就返回多用户选择登录 id,user_code,avatar,nickname,sex $return_res = $phone_user['data']; foreach ($return_res as $key => $value){ $return_res[$key]['token'] = ''; $return_res[$key]['tencent_im'] = ''; } return ['code' => 1, 'msg' => '用户获取成功!~', 'data' => $return_res]; }else{ $user_info = $phone_user['data'][0]; } } //登录token $login_token = model('UserToken')->update_token($user_info['id']); if(isset($login_token['code']) && $login_token['code'] != 1){ return ['code' => 0, 'msg' => '登录失败,', 'data' => null]; } //获取userData 腾讯IM唯一标识 $tencent_im = model('UserData')->get_tencent_im($user_info['id']); if(isset($tencent_im['code']) && $tencent_im['code'] != 1){ return ['code' => 0, 'msg' => '登录失败!', 'data' => null]; } $save_data['system'] = $system; $save_data['login_device'] = $login_device; $save_data['logintime'] = time(); $save_data['loginip'] = request()->ip(); $save_data['updatetime'] = time(); $save_data['prevtime'] = $user_info['logintime'];//上次登录时间 $reslut = model('User')->update($save_data); if (!$reslut) { return ['code' => 0, 'msg' => '登录失败!!', 'data' => null]; } $return_res[0]['user_id'] = $user_info['id']; $return_res[0]['user_code'] = $user_info['user_code']; $return_res[0]['avatar'] = $user_info['avatar']; $return_res[0]['nickname'] = $user_info['nickname']; $return_res[0]['token'] = $login_token; $return_res[0]['tencent_im'] = $tencent_im; $return_res[0]['sex'] = $user_info['sex']; $return_res[0]['mobile'] = $user_info['mobile']; $return_res[0]['icon'][0] = model('UserData')->user_wealth_icon($user_info['id']);//财富图标 $return_res[0]['icon'][1] = model('UserData')->user_charm_icon($user_info['id']);//魅力图标 $isAuth = 0; if($user_info['mobile']){ $isAuth = db::name('user_auth')->where('mobile' , $user_info['mobile'])->value('is_real') == 1 ? 1 : 0; } $return_res[0]['auth'] = $isAuth; //是否可以发布动态 $user_rechange = db::name('vs_user_recharge')->field('sum(money) as money')->where(['user_id' => $user_info['id'],'pay_status' => 2])->find(); //系统配置 $config_money = get_system_config_value('private_chat_recharge_money'); if(($config_money > 0) && ($user_rechange['money'] < $config_money)){ $return_res[0]['is_can_chat'] = 0; }else{ $return_res[0]['is_can_chat'] = 1; } $return_res[0]['can_chat_money'] = $config_money; return ['code' => 1, 'msg' => '登录成功', 'data' => $return_res]; }else{ return ['code' => 0, 'msg' => '登录失败,账号失效', 'data' => null]; } } //过滤靓号 public function get_user_code() { $user_code = model('User')->order('user_code desc')->value('user_code'); if(empty($user_code)){ $user_code = 10000; } $user_code = $user_code + 1; $vip_code = db::name('vip_code')->where(['type' => 1, 'status' => 1])->field('code')->select(); if (empty($vip_code)) { return $user_code; } if (in_array($user_code, (array)$vip_code)) { return $user_code + 2; } return $user_code; } //验证码/一键登录 public function phone_verification_code_log($user_name, $system,$login_device) { if (empty($user_name)) { return ['code' => 0, 'msg' => '登录账号不能为空', 'data' => null]; } $user_info = db::name('user')->where(['mobile' => $user_name,'status' => ['<>',0]])->find(); if($user_info){//登录 $login = $this->login($user_info,$system,$login_device); if($login['code'] != 1){ return $login; } return ['code' => 1, 'msg' => '登录成功', 'data' => $login['data']]; }else{//注册 Db::startTrans(); // try { $reslut = $this->user_reg($system,$login_device,$user_name); if($reslut['code'] != 1){ Db::rollback(); return $reslut; } $return_res = $reslut['data']; Db::commit(); return ['code' => 1, 'msg' => '登录成功', 'data' => $return_res]; // } catch (\Exception $e) { // // 回滚事务 // Db::rollback(); // return ['code' => 0, 'msg' => $e, 'data' => null]; // } } } //账号密码登录 public function user_login($user_name, $password, $system,$login_device) { if (empty($user_name)) { return ['code' => 0, 'msg' => '用户名不能为空', 'data' => null]; } if (empty($password)) { return ['code' => 0, 'msg' => '密码不能为空', 'data' => null]; } $user_info = model('User')->where(['mobile' => $user_name,'status'=>['<>',0]])->find(); if (empty($user_info)) { return ['code' => 0, 'msg' => '用户不存在', 'data' => null]; } if (md5($password) != $user_info['password']) { return ['code' => 0, 'msg' => '密码错误', 'data' => null]; } // $multi_user = []; // //查询手机号绑定的账号 // $phone_user = $this->phone_login_query($user_name); // if($phone_user['code'] == 1){ // //获取返回数据的长度 // if(count($phone_user['data']) >= 2){ // $multi_user = $phone_user['data']; // } // } $login = $this->login($user_info,$system,$login_device); if($login['code'] != 1){ return $login; } return ['code' => 1, 'msg' => '登录成功', 'data' => $login['data']]; } //多账号选号登录 public function multi_account_login($user_name,$system,$login_device){ $user_info = db::name('user')->where('id', $user_name)->find(); $login = $this->login($user_info,$system,$login_device,2); if($login['code'] != 1){ return $login; } return ['code' => 1, 'msg' => '登录成功', 'data' => $login['data']]; } //微信/支付宝 登录 public function wechat_ali_Login($type,$userinfo,$system,$login_device){ $ali_userid = ''; $openid = ''; $apple_id = ''; if($type == 'wx'){ $openid = $userinfo['openid']; $user_info_data = model('UserData')->where(['wx_openid' => $openid,'deletetime'=>0])->find(); $config_time = get_system_config_value('cancel_to_reset_reg'); if($user_info_data['deletetime'] != 0 && time() - $user_info_data['deletetime'] < 86400 * $config_time){ return ['code' => 0, 'msg' => '注销后需等待'.$config_time.'天才能重新注册', 'data' => null]; } }elseif ($type == 'ali'){ $ali_userid = $userinfo['open_id']; $user_info_data = model('UserData')->where(['ali_userid' => $ali_userid,'deletetime'=>0])->find(); $config_time = get_system_config_value('cancel_to_reset_reg'); if($user_info_data['deletetime'] != 0 && time() - $user_info_data['deletetime'] < 86400 * $config_time){ return ['code' => 0, 'msg' => '注销后需等待'.$config_time.'天才能重新注册', 'data' => null]; } }elseif ($type == 'ios'){ $apple_id = $userinfo; $user_info_data = model('UserData')->where(['apple_id' => $userinfo,'deletetime'=>0])->find(); $config_time = get_system_config_value('cancel_to_reset_reg'); if($user_info_data['deletetime'] != 0 && time() - $user_info_data['deletetime'] < 86400 * $config_time){ return ['code' => 0, 'msg' => '注销后需等待'.$config_time.'天才能重新注册', 'data' => null]; } } else{ return ['code' => 0, 'msg' => '登录类型错误', 'data' => null]; } if($user_info_data){//登录 $return_res = []; $user_info = model('User')->where('id', $user_info_data['user_id'])->find(); if($user_info['sex'] != 0){//已完善过自己的信息 return $this->login($user_info,$system,$login_device,2); }else{//没有完善过自己的信息 $return_res[0]['user_id'] = $user_info_data['user_id']; $return_res[0]['user_code'] = ''; $return_res[0]['avatar'] = ''; $return_res[0]['nickname'] = ''; $return_res[0]['token'] = ''; $return_res[0]['tencent_im'] = ''; $return_res[0]['sex'] = 0; $return_res[0]['auth'] = 0; $return_res[0]['icon'][0] = model('UserData')->user_wealth_icon($user_info_data['user_id']);//财富图标 $return_res[0]['icon'][1] = model('UserData')->user_charm_icon($user_info_data['user_id']);//魅力图标 return ['code' => 1, 'msg' => '登录成功', 'data' => $return_res]; } }else{//注册 //开启事务 Db::startTrans(); $reslut = $this->user_reg($system,$login_device,'',$openid,$ali_userid,$apple_id); if($reslut['code'] != 1){ Db::rollback(); return $reslut; } $return_res = $reslut['data']; Db::commit(); return ['code' => 1, 'msg' => '登录成功', 'data' => $return_res]; } } //手机号相关登录时 查询此手机号在平台绑定的所有账号 public function phone_login_query($phone){ $user_info = db::name('user')->where(['mobile' => $phone,'status' =>['neq',0]])->select(); if(empty($user_info)){ return ['code' => 0, 'msg' => '查询失败', 'data' => null]; } foreach ($user_info as &$value){ $value['user_id'] = $value['id']; } return ['code' => 1, 'msg' => '查询成功', 'data' => $user_info]; } //退出登录 public function logout($token){ $user_info = model('UserToken')->where('token', $token)->find(); if($user_info){ model('UserToken')->where('id', $user_info['id'])->update(['token' => 1]); return ['code' => 1, 'msg' => '退出成功', 'data' => null]; }else{ return ['code' => 0, 'msg' => '退出失败', 'data' => null]; } } //注销 public function cancel($token){ $user_info = model('UserToken')->where('token', $token)->find(); //用户注册时间 $register_time = db::name('user')->where('id', $user_info['user_id'])->value('createtime'); $config_time = get_system_config_value('reg_to_cancel'); if(time() - $register_time < 86400 * $config_time){ return ['code' => 0, 'msg' => '注册'.$config_time.'天内不能注销!', 'data' => null]; } if($user_info){ model('UserToken')->where('id', $user_info['id'])->update(['token' => 1]); $isstatus = model('User')->where('id', $user_info['user_id'])->update(['status' => 0]); if($isstatus){ //删除用户 // model('Tencent')->account_delete($user_info['user_id']); model('User')->where('id', $user_info['user_id'])->update(['delete_time' => time()]); model('User')->where('id', $user_info['user_id'])->update(['avatar' => get_system_config_value('delete_avatar')]); model('UserData')->where('user_id', $user_info['user_id'])->update(['deletetime' => time()]); //查询创建的房间 $room_list = db::name('vs_room')->where('user_id', $user_info['user_id'])->select(); if($room_list){ foreach ($room_list as &$value) { db::name('vs_room')->where('id', $value['id'])->update(['room_status' => 3]); } } //查询用户所在房间 $room_list = db::name('vs_room_visitor')->where('user_id', $user_info['user_id'])->select(); if($room_list){ foreach ($room_list as &$value) { model('Room')->quit_room($user_info['user_id'], $value['room_id'],$user_info['user_id']); } } }else{ return ['code' => 0, 'msg' => '注销失败', 'data' => null]; } //查询绑定的手机号 $mob = db::name('user')->where('id', $user_info['user_id'])->value('mobile'); $mobile = db::name('user')->where(['mobile' => $mob,'status' => ['<>',0]])->select(); if(isset($mobile) && count($mobile) < 2){ db::name('user_auth')->where('mobile', $mob)->delete(); } return ['code' => 1, 'msg' => '注销成功', 'data' => null]; }else{ return ['code' => 0, 'msg' => '注销失败', 'data' => null]; } } //忘记密码 public function forgot_password($mobile,$password){ $user = model('User')->where(['mobile'=>$mobile,'status'=>1])->find(); if(empty($user)){ return ['code' => 0, 'msg' => '用户不存在', 'data' => null]; } $re = model('User')->where('id',$user['id'])->update(['password'=>md5($password)]); if(empty($re)){ return ['code' => 0, 'msg' => '修改失败', 'data' => null]; } return ['code' => 1, 'msg' => '修改成功', 'data' => null]; } }