You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
489 lines
19 KiB
489 lines
19 KiB
<?php
|
|
// +----------------------------------------------------------------------
|
|
// | YFCMF [ WE CAN DO IT MORE SIMPLE ]
|
|
// +----------------------------------------------------------------------
|
|
// | Copyright (c) 2015-2016 http://www.rainfer.cn All rights reserved.
|
|
// +----------------------------------------------------------------------
|
|
// | Author: rainfer <81818832@qq.com>
|
|
// +----------------------------------------------------------------------
|
|
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;
|
|
}
|
|
}
|