redis = \think\Cache::store('redis')->handler(); } //获取腾讯IM public function get_tencent_im($user_id) { $tencent_im = $this->where('user_id', $user_id)->value('tencent_im'); if(empty($tencent_im)){ $tencent_im = model('Tencent')->tencent_user_sig_info('u'.$user_id); $data = [ 'nick' => db::name('user')->where('id', $user_id)->value('nickname'), 'face_url' => db::name('user')->where('id', $user_id)->value('avatar'), ]; model('Tencent')->account_import($user_id,$data); if(empty($tencent_im)){ return ['code' => 0, 'msg' => '获取腾讯IM唯一标识失败','data' =>null]; } //更新腾讯IM唯一标识 $this->where(['user_id' => $user_id])->update(['tencent_im' => $tencent_im]); } return $tencent_im; } //第一次修改用户信息 public function modify_fist_user_info($nick_name, $birthday, $sex, $head_pic,$reg_code,$uid) { $text = $nick_name; if(!empty($text)) { $result = model('Tencent')->content_moderation('Text', $text); if($result['code'] != 1) { return ['code' => 0, 'msg' => '昵称有违禁词!','data' =>null]; } } $data = []; $data['id'] = $uid; if (!empty($nick_name)) { $data['nickname'] = $nick_name; $nick_name_info = db::name('user')->where(['nickname' => $nick_name,'status' => ['<>',0]])->find(); if(!empty($nick_name_info)){ if($uid != $nick_name_info['id']){ return['code' => 0, 'msg' => '该昵称已被占用','data' =>null]; } } if(mb_strlen($nick_name) > 24){ return['code' => 0, 'msg' => '昵称长度不能超过24个字符','data' =>null]; } //名称中不能有 系统管理 等关键字 if(!nickname_filter($nick_name)){ return ['code' => 0, 'msg' => '名称中不能有 系统、管理、官方 等相关字', 'data' => null]; } } if (!empty($birthday)) { $data['birthday'] = $birthday; } if (!empty($reg_code)) { // $data['init_code'] = $reg_code; //绑定 $reslut = model('api/Invited')->invited_bind($reg_code, $uid); if ($reslut['code'] == 0) { return v($reslut['code'], $reslut['msg'], $reslut['data']); } } if (!empty($head_pic)) { $data['avatar'] = $head_pic; } $data['sex'] =$sex; $data['updatetime'] = time(); $reslut = model('User')->update($data); if ($reslut) { $user_info = model('User')->where('id', $uid)->field('id,nickname,avatar,user_code')->find(); //给腾讯同步用户信息 $member_name = $user_info['nickname']; $member_face_url = $user_info['avatar']; model('Tencent')->modify_user_infos($uid, $member_name, $member_face_url); return ['code' => 1, 'msg' => '修改成功', 'data' => $user_info]; } else { return ['code' => 0, 'msg' => '修改失败,','data' =>null]; } } //根据性别选择用户头像 public function modify_pic_user_info($sex) { if (empty($sex)){ return ['code' => 0, 'msg' => '选择性别!','data' =>null]; } if ($sex==1){ $impag = Db::name('user_head_pic') ->where('sex',1)->where('is_delete',1)->orderRaw('rand()')->find(); if(empty($impag)){ return ['code' => 0, 'msg' => '暂无头像','data' =>null]; } return ['code' => 1, 'msg' => '男生图像', 'data' => $impag['head_pic']]; } if ($sex==2){ $impag = Db::name('user_head_pic') ->where('sex',2)->where('is_delete',1)->orderRaw('rand()')->find(); if(empty($impag)){ return ['code' => 0, 'msg' => '暂无头像','data' =>null]; } return ['code' => 1, 'msg' => '女生图像', 'data' => $impag['head_pic']]; } return ['code' => 0, 'msg' => '获取失败','data' =>null]; } //修改用户 信息 public function modify_user_info($uid, $nick_name, $birthday, $sex, $head_pic, $images, $autograph,$tag_id) { $text = $nick_name . $autograph ; if(!empty($text)) { $result = model('Tencent')->content_moderation('Text', $text); if($result['code'] != 1) { return ['code' => 0, 'msg' => '昵称或简介有违禁词!','data' =>null]; } } $data = []; $data['uid'] = $uid; if (!empty($nick_name)) { $data['nick_name'] = $nick_name; $nick_name_info = db::name('user')->where(['nickname' => $nick_name,'status' => ['<>',0]])->find(); if(!empty($nick_name_info)){ if($uid != $nick_name_info['uid']){ return['code' => 0, 'msg' => '该昵称已被占用','data' =>null]; } } if(mb_strlen($nick_name) > 24){ return['code' => 0, 'msg' => '昵称长度不能超过24个字符','data' =>null]; } } if (!empty($birthday)) { $data['birthday'] = $birthday; $constellation = $this->get_user_constellation($birthday); $data['constellation'] = $constellation['data']; } if (!empty($head_pic)) { // $data['head_pic'] = $param['path']; $filepath_url = get_filepath_url(); $params = parse_url($filepath_url); $param = parse_url($head_pic); if(isset($param['host'])) { if (!empty($param['path'])) { if($params['host'] == $param['host']) { $head_pic = $param['path']; $head_pic = trim($head_pic, '/'); } $data['head_pic'] = $head_pic; } } else { $data['head_pic'] = $head_pic; } } if (!empty($autograph)) { $data['autograph'] = $autograph; } $validate = validate('admin/User'); $reslut = $validate->scene('apiEditInfo')->check($data); if ($reslut !== true) { return ['code' => 0, 'msg' => $validate->getError(),'data' =>null]; } $data['sex'] = $sex; $data['update_time'] = time(); $images_data = explode(',', json_decode($images)); //开启事务 db::startTrans(); try{ $reslut = db::name('user')->where('uid', $uid)->update($data); if (!$reslut) { db::rollback(); return ['code' => 0, 'msg' => '修改失败','data' =>null]; } $tag_data = []; if(!empty($tag_id)){ //删除之前的标签 $deldt['tag_id'] = ''; $delres = db::name('user_data')->where('uid', $uid)->update($deldt); if (!$delres) { db::rollback(); return ['code' => 0, 'msg' => '修改失败','data' =>null]; } $tag_data['tag_id'] = $tag_id; $tareslut = db::name('user_data')->where('uid', $uid)->update($tag_data); if (!$tareslut) { db::rollback(); return ['code' => 0, 'msg' => '修改失败','data' =>null]; } } if (!empty($images_data)) { //删除之前的图片 $deldata['is_delete'] = 2; $deldata['delete_time'] = time(); $reslutd = db::name('user_home_bgimages')->where('uid', $uid)->update($deldata); if($reslutd){ //循环插入图片 $dd['uid'] = $uid; $dd['add_time'] = time(); $dd['update_time'] = time(); foreach ($images_data as $key => $value) { $dd['image'] = $value; db::name('user_home_bgimages')->insert($dd); } }else { db::rollback(); return ['code' => 0, 'msg' => '修改失败','data' =>null]; } } Db::commit(); return ['code' => 1, 'msg' => '修改成功','data' =>null]; } catch (\Exception $e) { db::rollback(); return ['code' => 0, 'msg' => '修改失败','data' =>null]; } } //修改,设置用户密码 public function modify_password($password,$user_id) { if (empty($user_id)) { return ['code' => 0, 'msg' => '登录失效,请重新登录','data' =>null]; } $reslut = db::name('user')->where('id' , $user_id)->update(['password' => md5($password)]); if ($reslut) { return ['code' => 1, 'msg' => '修改成功','data' =>null]; } else { return ['code' => 0, 'msg' => '修改失败','data' =>null]; } } //修改手机号 public function modify_mobile($new_mobile,$user_id) { //查询新手机号绑定的数量 $new_mobile_num = db::name('user')->where(['username' => $new_mobile,'status' => ['neq', 0]])->count(); if ($new_mobile_num >= 3) { return ['code' => 0, 'msg' => '该手机号已达绑定上限','data' =>null]; } //查询旧手机号 $mobile = db::name('user')->where(['id' => $user_id])->value('username'); //查询是否实名 $is_real = db::name('user_auth')->where(['mobile' => $mobile,'is_real' => 1])->find(); if($is_real){ //开启事务 db::startTrans(); //修改实名手机号 $red = db::name('user_auth')->where(['id' => $is_real['id']])->update(['mobile' => $new_mobile]); $reslut = db::name('user')->where(['id' => $user_id])->update(['username' => $new_mobile,'mobile' => $new_mobile]); if ($reslut && $red) { Db::commit(); return ['code' => 1, 'msg' => '修改成功','data' =>null]; } else { db::rollback(); return ['code' => 0, 'msg' => '修改失败','data' =>null]; } }else{ $reslut = db::name('user')->where(['id' => $user_id])->update(['username' => $new_mobile,'mobile' => $new_mobile]); if ($reslut) { return ['code' => 1, 'msg' => '修改成功','data' =>null]; } } return ['code' => 0, 'msg' => '修改失败','data' =>null]; } //实名认证 public function real_name($user_id,$real_name,$id_card) { $user_mobile = db::name('user')->where(['id' => $user_id,'status'=>1])->value('mobile'); if(empty($user_mobile)){ return ['code' => 0, 'msg' => '请先绑定手机号','data' =>null]; } $card_id_count = db::name('user_auth')->where(['card_id' => $id_card,'is_real' => 1])->count(); if($card_id_count >= 3){ return ['code' => 0, 'msg' => '该身份证实名已达上限!','data' =>null]; } //查询是否已经提交过数据了 $is_real = db::name('user_auth')->where(['card_id' => $id_card,'is_real' => 1,'mobile' =>$user_mobile])->find(); if($is_real){ return ['code' => 0, 'msg' => '已经审核通过!请勿重复提交!','data' =>null]; } $auth = [ 'mobile' => $user_mobile, 'real_name' => $real_name, 'card_id' => $id_card, 'is_real' => 3 ]; db::name('user_auth')->insert($auth); $res = $this->real_name_verify($real_name,$id_card); if($res['code'] == 200){ return ['code' => 1, 'msg' => '验证通过!','data' =>null]; }else{ return ['code' => 0, 'msg' => $res['msg'],'data' =>null]; } // $config = get_system_config(); // //获取Access Token // $access_token = $this->redis->get('access_token_'.$config['tencent_app_id']); // //判断是否过期 // if(empty($access_token)){ // $access_token = model('Tencent')->getAccessToken($config['tencent_app_id'],$config['tencent_app_secret']); // $this->redis->set('access_token_'.$config['tencent_app_id'],$access_token,1000); // sleep(1); // //获取SignTicket // $sign_ticket = model('Tencent')->getSignTicket($access_token,$config['tencent_app_id']); // $this->redis->set('sign_ticket_'.$config['tencent_app_id'],$sign_ticket,1100); // } // $sign_ticket = $this->redis->get('sign_ticket_'.$config['tencent_app_id']); // // //获取NONCE Ticket // $nonce_ticket = model('Tencent')->getNonceTicket($access_token,$user_id,$config['tencent_app_id']); // //获取随机字符串 // $nonceStr = generateRandom(32); // //生成一个订单号 并保存在redis // $orderNo = generateRandom(12); // //保存在redis // $this->redis->set('order_no_tencent_'.$user_id,$orderNo,3600); // //生成签名 // $sign = model('Tencent')->getSign($user_id,$nonceStr,$sign_ticket,$config['tencent_app_id']); // //生成faceId // $faceId = model('Tencent')->getFaceId($orderNo,$real_name,$id_card,$sign,$user_id,$config['tencent_app_id'],$nonceStr); // if(isset($faceId['code'])){ // return ['code' => 0, 'msg' => $faceId['msg'],'data' =>null]; // } // // $data = [ // 'userid' => 'u'.$user_id, // 'nonce' => $nonceStr, // 'sign' => $sign, // 'appid' => $config['tencent_app_id'], // 'orderNo' => $orderNo, // 'apiVersion'=>'1.0.0', // 'licence'=>$config['tencent_licence'], // 'faceId' => $faceId // ]; // return ['code' => 1, 'msg' => '获取成功','data' =>$data]; } //实名认证结果 public function real_name_result($user_id,$orderNo) { $user_mobile = db::name('user')->where(['id' => $user_id,'status'=>1])->value('mobile'); $id = db::name('user_auth')->where(['mobile' => $user_mobile,'is_real' => 3])->value('id'); if($id){ $res = db::name('user_auth')->where(['id' => ['<>',$id],'mobile' => $user_mobile])->select(); if($res){ foreach ($res as $key => $value) { db::name('user_auth')->where('id' , $value['id'])->delete(); } } } //修改状态 $reslut = db::name('user_auth')->where('id' , $id)->update(['is_real' => 1]); if(!$reslut){ return ['code' => 0, 'msg' => '实名失败','data' =>null]; } //内侧用户充值10W金币 db::name('user_wallet')->where('user_id',$user_id)->update(['coin' => 100000,'updatetime' => time(),'createtime' => time()]); return ['code' => 1, 'msg' => '实名成功','data' =>null]; } //实名认证后的信息 public function real_name_info($user_id) { $mobile = db::name('user')->where(['id' => $user_id,'status'=>1])->value('mobile'); $data = db::name('user_auth')->where('mobile' , $mobile)->field('real_name,card_id,is_real,mobile')->find(); if(!$data){ return ['code' => 0, 'msg' => '未实名','data' =>null]; } $datas = [ 'real_name' => name_format($data['real_name']), 'card_id' => id_format($data['card_id']), 'mobile' => $data['mobile'], 'is_real' => $data['is_real'] ]; return ['code' => 1, 'msg' => '获取成功','data' =>$datas]; } //用户的财富等级和经验值 public function user_wealth_icon($user_id) { $data = $this->field('wealth_level,wealth_exp')->where('user_id',$user_id)->find(); if(!$data){ return localpath_to_netpath('data/default/xin.png'); } $icon = db::name('vs_wealth_level')->where('level',$data['wealth_level'])->value('image'); if($icon == ''){ return localpath_to_netpath('data/default/xin.png'); } return $icon; } //用户的魅力等级和经验值 public function user_charm_icon($user_id) { $data = $this->field('charm_level,charm_exp')->where('user_id',$user_id)->find(); if(!$data){ return localpath_to_netpath('data/default/xin.png'); } $icon = db::name('vs_charm_level')->where('level',$data['charm_level'])->value('image'); if($icon == ''){ return localpath_to_netpath('data/default/xin.png'); } return $icon; } //房间历史足迹 public function user_room_history_list($uid,$page,$page_limit){ $list = db::name('user_visit_log')->alias('a')->join('fa_vs_room b','a.to_id = b.id') ->field('b.id as room_id,b.room_number,b.room_name,b.room_cover,b.room_intro,b.label_id,b.room_password,b.is_show_room,b.today_hot_value as hot_value') ->where('a.from_uid',$uid) ->where('a.type',2) ->where('b.type_id','<>',6) ->where('b.room_status',1) ->order('a.id desc') ->page($page,$page_limit) ->select(); if($list){ foreach($list as &$item){ if($item['is_show_room'] == 2){ //是否显示房间 1是2否 //查询当前房间是否有主持在麦上 $room_host_info = db::name('vs_room_pit')->where(['room_id' => $item['room_id'], 'pit_number' => 9])->value('user_id'); if($room_host_info == 0){ unset($list[$item]); continue; } } $item['label_icon'] = db::name('vs_room_label')->where('id',$item['label_id'])->value('label_icon'); //获取房间用户总数 $item['user_count'] = db::name('vs_room_visitor')->where('room_id',$item['room_id'])->count(); //房间是否有靓号 7房间靓号 $item['room_number'] = model('Decorate')->user_decorate_detail($item['room_id'],7); // $item['hot_value'] = $item['hot_value'] * 10; } $list = array_values((array)$list); }else{ $list = []; } return ['code' => 1, 'msg' => '获取成功','data' =>$list]; } //删除房间历史足迹 public function delete_room_history($uid){ $reslut = db::name('user_visit_log')->where(['from_uid' => $uid,'type' => 2])->delete(); if($reslut){ return ['code' => 1, 'msg' => '删除成功','data' =>null]; } return ['code' => 0, 'msg' => '删除失败','data' =>null]; } //绑定提现账户的信息 public function bind_withdraw_account($user_id,$system='') { if($system == 'iOS'){ $lists['ali']['name'] = "支付宝"; $lists['wx']['name'] = "微信"; $lists['bank']['name'] = "银行卡"; $lists['ali_tl']['name'] = "支付宝(通联)"; $lists['wx_tl']['name'] = "微信(通联)"; $lists['ali']['icon'] = localpath_to_netpath('data/default/alipay.png'); $lists['wx']['icon'] = localpath_to_netpath('data/default/wxpay.png'); $lists['bank']['icon'] = localpath_to_netpath('data/default/bankpay.png'); $lists['ali_tl']['icon'] = localpath_to_netpath('data/default/alipay.png'); $lists['wx_tl']['icon'] = localpath_to_netpath('data/default/wxpay.png'); $lists['ali']['is_with_draw_open'] = get_system_config_value('withdraw_ali'); $lists['wx']['is_with_draw_open'] = get_system_config_value('withdraw_wx'); $lists['bank']['is_with_draw_open'] = get_system_config_value('withdraw_bank'); $lists['ali_tl']['is_with_draw_open'] = 0; $lists['wx_tl']['is_with_draw_open'] = 0; $lists['ali']['is_bind'] = db::name('user_data')->where('user_id',$user_id)->value('alipay_account') ? 1 : 0; $lists['wx']['is_bind'] = 0; $lists['bank']['is_bind'] = db::name('user_data')->where('user_id',$user_id)->value('bank_card_number') ? 1 : 0; $lists['ali_tl']['is_bind'] = 0; $lists['wx_tl']['is_bind'] = 0; $lists['ali']['type'] = 2; $lists['wx']['type'] = 1; $lists['bank']['type'] = 3; $lists['ali_tl']['type'] = 4; $lists['wx_tl']['type'] = 5; // $lists['ali']['is_pay_open'] = 0; // $lists['wx']['is_pay_open'] = 0; // $lists['bank']['is_pay_open'] = 0; // $lists['ali_tl']['is_pay_open'] = 0; // $lists['wx_tl']['is_pay_open'] = 0; $lists['ali']['is_pay_open'] = get_system_config_value('pay_open_ali'); $lists['wx']['is_pay_open'] = get_system_config_value('pay_open_wx'); $lists['bank']['is_pay_open'] = get_system_config_value('pay_open_bank'); $lists['ali_tl']['is_pay_open'] = get_system_config_value('pay_open_ali_tl'); $lists['wx_tl']['is_pay_open'] = get_system_config_value('pay_open_wx_tl'); }else{ $lists['ali']['name'] = "支付宝"; $lists['wx']['name'] = "微信"; $lists['bank']['name'] = "银行卡"; $lists['ali_tl']['name'] = "支付宝(通联)"; $lists['wx_tl']['name'] = "微信(通联)"; $lists['ali']['icon'] = localpath_to_netpath('data/default/alipay.png'); $lists['wx']['icon'] = localpath_to_netpath('data/default/wxpay.png'); $lists['bank']['icon'] = localpath_to_netpath('data/default/bankpay.png'); $lists['ali_tl']['icon'] = localpath_to_netpath('data/default/alipay.png'); $lists['wx_tl']['icon'] = localpath_to_netpath('data/default/wxpay.png'); $lists['ali']['is_with_draw_open'] = get_system_config_value('withdraw_ali'); $lists['wx']['is_with_draw_open'] = get_system_config_value('withdraw_wx'); $lists['bank']['is_with_draw_open'] = get_system_config_value('withdraw_bank'); $lists['ali_tl']['is_with_draw_open'] = 0; $lists['wx_tl']['is_with_draw_open'] = 0; $lists['ali']['is_bind'] = db::name('user_data')->where('user_id',$user_id)->value('alipay_account') ? 1 : 0; $lists['wx']['is_bind'] = 0; $lists['bank']['is_bind'] = db::name('user_data')->where('user_id',$user_id)->value('bank_card_number') ? 1 : 0; $lists['ali_tl']['is_bind'] = 0; $lists['wx_tl']['is_bind'] = 0; $lists['ali']['type'] = 2; $lists['wx']['type'] = 1; $lists['bank']['type'] = 3; $lists['ali_tl']['type'] = 4; $lists['wx_tl']['type'] = 5; $lists['ali']['is_pay_open'] = get_system_config_value('pay_open_ali'); $lists['wx']['is_pay_open'] = get_system_config_value('pay_open_wx'); $lists['bank']['is_pay_open'] = get_system_config_value('pay_open_bank'); $lists['ali_tl']['is_pay_open'] = get_system_config_value('pay_open_ali_tl'); $lists['wx_tl']['is_pay_open'] = get_system_config_value('pay_open_wx_tl'); } return ['code' => 1, 'msg' => '获取成功','data' =>$lists]; } //绑定 public function bind_xinxi($user_id,$type,$alipay_account,$bank_card_number,$bank_user_name,$bank_card,$open_bank) { if($type == 2){ $data = [ // 'alipay_name' => $alipay_name,// 姓名 'alipay_account' => $alipay_account,// 支付宝账号 ]; $reslut = db::name('user_data')->where('user_id',$user_id)->update($data); if(!$reslut){ return ['code' => 0, 'msg' => '绑定失败','data' =>null]; } } if($type == 3){ $data = [ 'bank_card_number' => $bank_card_number, 'bank_user_name' => $bank_user_name, 'bank_card' => $bank_card, 'open_bank' => $open_bank, ]; $reslut = db::name('user_data')->where('user_id',$user_id)->update($data); if(!$reslut){ return ['code' => 0, 'msg' => '绑定失败','data' =>null]; } } // if($type == 3){ // $data = [ // 'user_id' => $user_id, // ]; // $reslut = db::name('user_data')->where('user_id',$user_id)->update($data); // if(!$reslut){ // return ['code' => 0, 'msg' => '绑定失败','data' =>null]; // } // } return ['code' => 1, 'msg' => '绑定成功','data' =>null]; } //绑定的详情 public function bind_xinxi_detail($user_id,$type) { if($type == 2){ $data = db::name('user_data')->where('user_id',$user_id)->field('id,alipay_name,alipay_account')->find(); } if($type == 3){ $data = db::name('user_data')->where('user_id',$user_id)->field('id,bank_card_number,bank_user_name,bank_card,open_bank')->find(); } return ['code' => 1, 'msg' => '获取成功','data' =>$data]; } //身份证二要素认证 public function real_name_verify($real_name, $card_id) { // 云市场分配的密钥Id $secretId = '1QMATmzeRHC7Auz8'; // 云市场分配的密钥Key $secretKey = 'FKeTuxiKC76DrdPMAu4nhsppLZ1mI93l'; // 签名 $datetime = gmdate('D, d M Y H:i:s T'); $signStr = sprintf("x-date: %s", $datetime); $sign = base64_encode(hash_hmac('sha1', $signStr, $secretKey, true)); $auth = sprintf('{"id": "%s", "x-date": "%s" , "signature": "%s"}', $secretId, $datetime, $sign); // 请求方法 $method = 'GET'; // 请求头 $headers = array( 'Authorization' => $auth, ); // 查询参数 $queryParams = array ( 'cardNo' => $card_id, 'realName' => $real_name, ); // body参数(POST方法下) $bodyParams = array ( ); $sendData = http_build_query($bodyParams); // url参数拼接 $url = 'https://ap-beijing.cloudmarket-apigw.com/service-hcgajsa5/idcard/VerifyIdcardv2'; if (count($queryParams) > 0) { $url .= '?' . http_build_query($queryParams); } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 60); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method); if (in_array($method, array('POST', 'PUT', 'PATCH'), true)) { $headers['Content-Type'] = 'application/x-www-form-urlencoded'; curl_setopt($ch, CURLOPT_POSTFIELDS, $sendData); } curl_setopt($ch, CURLOPT_HTTPHEADER, array_map(function ($v, $k) { return $k . ': ' . $v; }, array_values($headers), array_keys($headers))); // $data = json_decode(curl_exec($ch), true); $result = curl_exec($ch); if($result) { $data = json_decode($result, true); // var_dump($data);exit; if ($data['error_code'] == 0) { if ($data['result']['isok']) { return ['code' => 200, 'msg' => '验证成功', 'data' => null]; } else { return ['code' => 201, 'msg' => '信息有误' . json_encode($data), 'data' => null]; } } else { return ['code' => 201, 'msg' => '信息有误' . json_encode($data), 'data' => null]; } } return ['code' => 201, 'msg' => '信息有误', 'data' => null]; } }