// +---------------------------------------------------------------------- namespace app\member\controller; use think\Db; use think\captcha\Captcha; use think\Validate; use Flc\Alidayu\Client; use Flc\Alidayu\App; use Flc\Alidayu\Requests\AlibabaAliqinFcSmsNumSend; use think\Log; use think\Session; class Register extends Base{ private function index(){ return $this->view->fetch('user:register'); } /** * */ public function runregister(){ if(request()->isPost()){ $member_list_tel=input('member_list_tel',''); $member_list_email=input('member_list_email',''); $member_list_card=input('member_list_card',''); //$member_list_nickname=input('member_list_nickname',''); $password=input('password'); $repassword=input('repassword'); $verify=input('verify'); if(!$member_list_tel && !$member_list_email) $this->error('必须输入邮箱或手机号'); if(!$member_list_tel){ //邮箱注册 $verify_obj =new Captcha (); if (!$verify_obj->check($verify, 'reg')) { $this->error(lang('verifiy incorrect')); } $rule = [ ['member_list_email','require|email','{%email empty}|{%email format incorrect}'], ['password','require|length:5,20','{%pwd empty}|{%pwd length}'], //['member_list_nickname','require','昵称必须'], ['repassword','require|confirm:password','{%repassword empty}|{%repassword incorrect}'] ]; $validate = new Validate($rule); $rst = $validate->check(array( 'password'=>$password, 'repassword'=>$repassword, //'member_list_nickname'=>$member_list_nickname, 'member_list_email'=>$member_list_email )); if(true !==$rst){ $error=is_array($validate->getError())?join('|',$validate->getError()):$validate->getError(); $this->error($error); } //判断是否存在 $result = Db::name('member_list')->where('member_list_email',$member_list_email)->count(); if($result) $this->error($member_list_email.'邮箱已注册'); $member_list_salt=random(10); $active_options=get_active_options(); $sl_data=array( 'member_list_username'=>$member_list_email, 'member_list_nickname'=>$member_list_email, 'member_list_salt' => $member_list_salt, 'member_list_pwd'=>encrypt_password($password,$member_list_salt), 'member_list_email'=>$member_list_email, 'member_list_tel'=>$member_list_tel, 'member_list_groupid'=>1, 'member_list_open'=>1, 'member_list_addtime'=>time(), 'user_status'=>empty($active_options['email_active'])?1:0,//需要激活,则为未激活状态,否则为激活状态 ); $rst=Db::name('member_list')->insertGetId($sl_data); if($rst!==false){ if(!empty($active_options['email_active'])){ $activekey=md5($rst.time().uniqid());//激活码 $result=Db::name('member_list')->where(array("member_list_id"=>$rst))->update(array("user_activation_key"=>$activekey)); if(!$result){ $this->error(lang('activation code generation failed')); } //生成激活链接 $url = url('Register/active',array("hash"=>$activekey), "", true); $template = $active_options['email_tpl']; $content = str_replace(array('http://#link#','#username#'), array($url,$sl_data['member_list_nickname']),$template); $send_result=sendMail($member_list_email, $active_options['email_title'], $content); if($send_result['error']){ $this->error(lang('send active email failed')); }else{ $this->success(lang('send active email success'),url('Login/index')); } }else{ //更新字段 $data = array( 'last_login_time' => time(), 'last_login_ip' => request()->ip(), ); $sl_data['last_login_time']=$data['last_login_time']; $sl_data['last_login_ip']=$data['last_login_ip']; Db::name('member_list')->where(array('member_list_id'=>$rst))->update($data); session('hid',$rst); session('user',$sl_data); $this->success(lang('register success'),url('Index/index')); } }else{ $this->error(lang('register failed')); } }else{ //手机注册 $where['sms_type']='reg'; $where['sms_tel']=$member_list_tel; $where['sms_time']=['>',time()-600]; //$rst=Db::name('smslog')->where($where)->find(); //if(!$rst || $rst['sms_code']!=$verify) $this->error(lang('verifiy incorrect')); $rule = [ ['password','require|length:5,20','{%pwd empty}|{%pwd length}'], ['member_list_tel','require','手机号必须'], //['member_list_nickname','require','昵称必须'], ['repassword','require|confirm:password','{%repassword empty}|{%repassword incorrect}'] ]; $validate = new Validate($rule); $rst = $validate->check(array( 'password'=>$password, 'repassword'=>$repassword, 'member_list_tel'=>$member_list_tel )); if(true !==$rst){ $error=is_array($validate->getError())?join('|',$validate->getError()):$validate->getError(); $this->error($error); } //判断是否存在 $result = Db::name('member_list')->where('member_list_tel',$member_list_tel)->count(); if($result) $this->error($member_list_tel.'手机已注册'); $member_list_salt=random(10); $sl_data=array( 'member_list_username'=>$member_list_tel, 'member_list_nickname'=>$member_list_tel, 'member_list_salt' => $member_list_salt, 'member_list_tel'=>$member_list_tel, 'member_list_pwd'=>encrypt_password($password,$member_list_salt), 'member_list_email'=>$member_list_email, 'member_list_card'=>$member_list_card, 'member_list_groupid'=>1, 'member_list_open'=>1, 'member_list_addtime'=>time(), 'user_status'=>1 ); $rst=Db::name('member_list')->insertGetId($sl_data); if($rst!==false){ //更新字段 $data = array( 'last_login_time' => time(), 'last_login_ip' => request()->ip(), ); $sl_data['last_login_time']=$data['last_login_time']; $sl_data['last_login_ip']=$data['last_login_ip']; Db::name('member_list')->where(array('member_list_id'=>$rst))->update($data); session('hid',$rst); session('user',$sl_data); $this->success(lang('register success'),url('Index/index')); }else{ $this->error(lang('register failed')); } } } } //激活 public function active(){ $hash=input('hash',''); if(empty($hash)){ $this->error(lang('pwd reset hash incorrect')); } $users_model=Db::name("member_list"); $find_user=$users_model->where(array("user_activation_key"=>$hash))->find(); if($find_user){ $result=$users_model->where(array("user_activation_key"=>$hash))->update(array("user_activation_key"=>"","user_status"=>1)); if($result){ $find_user['user_status']=1; //更新字段 $data = array( 'last_login_time' => time(), 'last_login_ip' => request()->ip(), ); $find_user['last_login_time']=$data['last_login_time']; $find_user['last_login_ip']=$data['last_login_ip']; $users_model->where(array('member_list_id'=>$find_user["member_list_id"]))->update($data); session('hid',$find_user['member_list_id']); session('user',$find_user); $this->success(lang('active success'),url('Index/index')); }else{ $this->error(lang('active failed'),url("Login/index")); } }else{ $this->error(lang('pwd reset hash incorrect'),url("Login/index")); } } //上名片 protected function businessCard(){ $files = request()->file(''); if ($files) { foreach ($files as $key=>$file) { //处理file_one2,得到ftype_id $ftype_id=intval(substr($key,8)); $validate = config('upload_validate'); $info = $file->validate($validate)->rule('md5')->move(ROOT_PATH . config('upload_path') . DS . date('Y-m-d')); if ($info) { $img_url = config('upload_path'). '/' . date('Y-m-d') . '/' . $info->getFilename(); } else { return json_encode(['code'=>0,'msg'=>$file->getError()]); } } } $fileparam = "/var/www/html/".$img_url; if(!empty($fileparam)){ $result = ImgReconCard($fileparam); if($result!=null){ $result['img_url']=$img_url; $result['code']=1; } echo json_encode($result); } } /** 注册完善资料 * @return string */ public function perfectMember(){ if(request()->isPost()){ $member_list_nickname=input('member_list_nickname'); $member_list_company=input('member_list_company'); $member_list_address=input('member_list_address'); $member_list_id=session('hid'); if(empty($member_list_nickname)){ return json_encode(['code'=>0,'msg'=>'姓名不能为空']); } if(empty($member_list_company)){ return json_encode(['code'=>0,'msg'=>'公司名称不能为空']); } if(empty($member_list_address)){ return json_encode(['code'=>0,'msg'=>'公司地址不能为空']); } if(empty($member_list_address)){ return json_encode(['code'=>0,'msg'=>'用户不存在']); } $member_list = Db::name("member_list")->where("member_list_id",$member_list_id)->find(); if(empty($member_list)){ return json_encode(['code'=>0,'msg'=>'没有登录']); } $update=["member_list_nickname"=>$member_list_nickname,"member_list_company"=>$member_list_company,"member_list_address"=>$member_list_address]; $rst = Db::name("member_list")->where("member_list_id",$member_list_id)->update($update); if($rst){ return json_encode(['code'=>1,'msg'=>'保存成功']); }else{ return json_encode(['code'=>0,'msg'=>'保存失败']); } }else{ return json_encode(['code'=>0,'msg'=>'错误提交方式']); } } /** * 短信验证 * @return \think\response\Json */ public function sendRegisterSms(){ $smstype=input('smstype','reg'); if(!in_array($smstype,['reg','forget']))$smstype='reg'; $phone = input("mobile",''); $ticket=input('ticket'); $randstr=input('randstr'); if(empty($ticket)||empty($randstr)){ $this->error('请先通过验证'); } if(empty($phone)){ $this->error('手机号码为空!'); } $result = Db::name('member_list')->where(['member_list_tel'=>$phone,'user_status'=>1])->count(); $check=$smstype=='forget'?1:0; if(!$check){ if($result) $this->error($phone.'手机已注册'); }else{ if(!$result) $this->error($phone.'手机号错误'); } $where['sms_type']=$smstype; $where['sms_tel']=$phone; $rst=Db::name('smslog')->where($where)->order("sms_time desc")->find(); if($rst){ if($rst['sms_time']>(time()-600)){ return json(['code'=>0,'msg'=>'已获取过,'.(600-(time()-$rst['sms_time'])).'秒后稍后再试']); } } $secretKey = 'iK5c3HIfAPULVFyEDyXqvn0G8j4B2e0o'; $config=config('tccaptcha'); $config=$config['reg']; $params=[]; $params['Action']='DescribeCaptchaResult'; $params['Version']='2019-07-22'; $params['CaptchaType']=9; $params['Ticket']=$ticket; $params['UserIp']=request()->ip(); $params['Randstr']=$randstr; $params['CaptchaAppId']=isset($config['appid'])?$config['appid']:''; $params['AppSecretKey']=isset($config['appsecret'])?$config['appsecret']:''; $params['SecretId']='AKIDA8pGJICmgL0Reg4Np9ETVHh4D6j7hgS0'; $params['Timestamp']=time(); $params['Nonce']=rand(); $path="captcha.tencentcloudapi.com/"; ksort($params); $signStr = "GET".$path."?"; foreach ($params as $key => $value ) { $signStr =$signStr.$key."=".$value."&"; } $signStr = substr($signStr,0,-1); $signature = base64_encode(hash_hmac("sha1", $signStr, $secretKey, true)); $params['Signature']=$signature; $url='https://'.$path.'?'.http_build_query($params); $res=go_curl2($url,'get'); try { $res=json_decode($res,true); if($res['Response']['CaptchaCode']!=1){ $this->error('图片验证失败!'); } } catch (\Exception $e) { $this->error('图片验证失败!'); } $rst_sms=false; $error='未设置短信平台配置'; $code=random(6,'number'); if(config('alisms.on')){ $client = new Client(new App(config('alisms'))); $req = new AlibabaAliqinFcSmsNumSend; $req->setRecNum($phone)->setSmsParam(['number' => $code])->setSmsFreeSignName(config('alisms.signName'))->setSmsTemplateCode(config('alisms.TemplateCode')); $resp = $client->execute($req); if($resp->result->success){ $rst_sms=true; }else{ $error=$resp->sub_msg; } }elseif(config('ymsms.on')){ $arr=send_sms($phone,'您好,您的注册验证码为'.$code.',验证码5分钟内有效!'); if($arr['code']==1){ $rst_sms=true; }else{ $error=$arr['msg']; } } if($rst_sms){ if($rst){ //更新 $rst['sms_time']=time(); $rst['sms_code']=$code; $rst=Db::name('smslog')->update($rst); if($rst==false){ return json(['code'=>0,'msg'=>'短信码获取失败,请重试']); } }else{ //插入数据库 $data=[ 'sms_type'=>$smstype, 'sms_tel'=>$phone, 'sms_time'=>time(), 'sms_code'=>$code ]; $rst=Db::name('smslog')->insert($data); if(!$rst){ return json(['code'=>0,'msg'=>'短信码获取失败,请重试']); } } }else{ return json(['code'=>0,'msg'=>$error]); } $this->success('短信码已发送至你手机'); } public function refreshVerifyImg(){ try{ $url = getVerifyImg(); return json(['code'=>1,'msg'=>'','data'=>$url]); }catch (\Exception $e){ $this->error($e->getMessage()); } $this->success('获取成功'); } /** * 注册小程序用户 */ public function register(){ $token=md5('szcaee_mobile'); $options = array( 'token'=>$token, //填写你设定的key 'appid'=>'wx2104ec4219a6c4c3', //填写高级调用功能的app id, 请在微信开发模式后台查询 'appsecret'=>'1322ae83f14427dea0af85b877b57376', //填写高级调用功能的密钥 ); $we_obj = new \Wechat($options); $code =input('code'); if ($code) { Log::write($code); try { $json = $we_obj->getOauthAccessToken(); }catch (\Exception $e){ $this->redirect(url('mobile/login/index')); } Log::write($json); if (!$json) { $this->redirect(url('mobile/login/index')); } $openid=$json["openid"]; $unionid=$json["unionid"]; $access_token = $json['access_token']; $wxuser=['open_id'=>$openid]; //缓存获取用户资料 $cache=cache($openid); $nickname=$avatar=''; if($cache){ try { $userinfo=json_decode($cache,true); $nickname=$userinfo['nickname']; $avatar=$userinfo['avatar']; }catch (\Exception $e){} }else{ $userinfo=$we_obj->getOauthUserinfo($access_token,$openid); if ($userinfo && !empty($userinfo['nickname'])) { $nickname=$userinfo['nickname']; $avatar=$userinfo['headimgurl']; } $params=['nickname'=>$nickname,'avatar'=>$avatar]; cache($openid,json_encode($params)); } if($nickname)$wxuser['nickname']=$nickname; if($avatar)$wxuser['avatar']=$avatar; $wxuser['unionid']=$unionid; $wxuser['timestamp']=time(); $url=$this->hostpath."/api/auth/register"; $secret="098f6bcd4621d373cade4e832627b4f6"; $token=$this->getSign($secret, $wxuser); $wxuser['token']=$token; $result=['status'=>0]; Log::write($wxuser); try { $res=go_curl($url,'POST',$wxuser,['Accept'=>'application/json']); Log::write($res); $res=json_decode($res,true); if(isset($res['status'])&&$res['status']){ $result['status']=$res['status']; Session::delete('api_token'); session('api_token',$res['access_token']); } }catch (\Exception $e){ } if($result['status']){ $this->redirect(url('mobile/member/index')); }else{ $this->redirect(url('mobile/login/index')); } } } // 获取sign protected function getSign($secret, $data) { if (isset($data['token'])) unset($data['token']); // 对数组的值按key排序 ksort($data); // 生成url的形式 $params = http_build_query($data); // 生成sign $sign = md5($params . $secret); return $sign; } }