getRegisterConfig($this->site_id,'shop'); if(strstr($config_info['data']['value']['login'],'username') === FALSE) return $this->response($this->error([],"用户名登录未开启!")); // $auth_info = Session::get("auth_info"); // if (!empty($auth_info)) { // $this->params = array_merge($this->params, $auth_info); // } // 校验验证码 $config_model = new Config(); $info = $config_model->getCaptchaConfig(); if($info['data']['value']['shop_reception_login'] == 1){ $captcha = new Captcha(); $check_res = $captcha->checkCaptcha(); if($check_res['code'] < 0) return $this->response($check_res); } // 登录 $login = new LoginModel(); if(empty($this->params["password"])) return $this->response($this->error([],"密码不可为空!")); $res = $login->login($this->params); //生成access_token if($res['code'] >= 0){ $token = $this->createToken($res['data']['member_id']); return $this->response($this->success([ 'token' => $token, 'can_receive_registergift' => $res['data']['can_receive_registergift'] ])); } return $this->response($res); } /** * 第三方登录 */ public function auth(){ $login = new LoginModel(); // 登录操作 $isPromise = (int)input('is_promise',0); if($isPromise) $res = $login->promiseLogin($this->params); else $res = $login->authLogin($this->params); //生成 access_token if($res['code'] >= 0){ $token = $this->createToken($res['data']['member_id']); $data = [ 'token' => $token, 'can_receive_registergift' => $res['data']['can_receive_registergift'] ]; if(isset($res['data']['is_register'])) $data['is_register'] = 1; return $this->response($this->success($data)); } return $this->response($res); } /** * 授权登录仅登录 * @return false|string */ public function authOnlyLogin(){ $login = new LoginModel(); $res = $login->authOnlyLogin($this->params); //生成access_token if($res['code'] >= 0){ $token = $this->createToken($res['data']['member_id']); $data = [ 'token' => $token, ]; return $this->response($this->success($data)); } return $this->response($res); } /** * 检测openid是否存在 */ public function openidIsExits(){ $login = new LoginModel(); $res = $login->openidIsExits($this->params); return $this->response($res); } /** * 手机动态码登录 */ public function mobile(){ $config = new ConfigModel(); $config_info = $config->getRegisterConfig($this->site_id,'shop'); if(strstr($config_info['data']['value']['login'],'mobile') === FALSE) return $this->response($this->error([],"动态码登录未开启!")); $key = $this->params['key']; $verify_data = Cache::get($key); if(!empty($verify_data) && $verify_data["mobile"] == $this->params["mobile"] && $verify_data["code"] == $this->params["code"]){ $register = new RegisterModel(); $exist = $register->mobileExist($this->params["mobile"],$this->site_id); if($exist){ $login = new LoginModel(); $res = $login->mobileLogin($this->params); if($res['code'] >= 0){ $token = $this->createToken($res['data']['member_id']); $res = $this->success([ 'token' => $token, 'can_receive_registergift' => $res['data']['can_receive_registergift'] ]); } } else{ $res = $this->error("","该手机号未注册"); } } else{ $res = $this->error("","手机动态码不正确"); } return $this->response($res); } /** * 微信公众号登录 新增2021.06.18 * captcha_id 验证码id * captcha_code 验证码 * mobile 手机号码 * code 手机验证码 */ public function wechatLogin(){ //校验验证码 $captcha = new Captcha(); $check_res = $captcha->checkCaptcha(); if($check_res['code'] < 0) return $this->response($check_res); $auth_info = Session::get("auth_info"); if(!empty($auth_info)){ $this->params = array_merge($this->params,$auth_info); } $key = $this->params['key']; $verify_data = Cache::get($key); //判断手机验证码 if($verify_data["mobile"] == $this->params["mobile"] && $verify_data["code"] == $this->params["code"]){ $register = new RegisterModel(); $exist = $register->mobileExist($this->params["mobile"],$this->site_id); if($exist){ //手机号码存在绑定wx_openid并登录 //绑定openid 如果该手机号有openid直接替换 $member_id = $register->getMemberId($this->params["mobile"],$this->site_id); $res = $register->wxopenidBind([ 'wx_openid' => $this->params['wx_openid'], 'member_id' => $member_id, 'site_id' => $this->site_id ]); if($res['code'] >= 0){ $login = new LoginModel(); $res = $login->mobileLogin($this->params); if($res['code'] >= 0){ $token = $this->createToken($res['data']['member_id']); $res = $this->success([ 'token' => $token, 'can_receive_registergift' => $res['data']['can_receive_registergift'] ]); } } } else{ //获取存放的缓存推荐人id $source_member = Session::get('source_member') ?? 0; if($source_member > 0){ $this->params['source_member'] = $source_member; } //手机号码不存在注册账号 $res = $register->mobileRegister($this->params); if($res['code'] >= 0){ $token = $this->createToken($res['data']); $res = $this->success(['token' => $token]); } } } else{ $res = $this->error("","手机动态码不正确"); } return $this->response($res); } /** * 获取手机号登录验证码 * @throws Exception */ public function mobileCode(){ // 校验验证码 $config_model = new Config(); $info = $config_model->getCaptchaConfig(); if($info['data']['value']['shop_reception_login'] == 1){ $captcha = new Captcha(); $check_res = $captcha->checkCaptcha(FALSE); if($check_res['code'] < 0) return $this->response($check_res); } $mobile = $this->params['mobile']; if(empty($mobile)) return $this->response($this->error([],"手机号不可为空!")); $register = new RegisterModel(); $exist = $register->mobileExist($this->params["mobile"],$this->site_id); if(!$exist) return $this->response($this->error([],"该手机号未注册!")); $code = str_pad(random_int(1,9999),4,0,STR_PAD_LEFT);// 生成4位随机数,左侧补0 $message_model = new Message(); $res = $message_model->sendMessage([ 'type' => 'code', "mobile" => $mobile, "site_id" => $this->site_id, "support_type" => ['sms'], "code" => $code, "keywords" => "LOGIN_CODE" ]); if($res["code"] >= 0){ //将验证码存入缓存 $key = 'login_mobile_code_'.md5(uniqid(NULL,TRUE)); Cache::tag("login_mobile_code")->set($key,['mobile' => $mobile,'code' => $code],600); return $this->response($this->success(["key" => $key])); } else{ return $this->response($res); } } /** * 获取第三方首次扫码登录绑定/注册手机号码验证码 手机号码存不存在都可以发送 新增2021.06.18 * captcha_id 验证码id * captcha_code 验证码 * mobile 手机号码 */ public function getMobileCode(){ // 校验验证码 start $captcha = new Captcha(); $check_res = $captcha->checkCaptcha(FALSE); if($check_res['code'] < 0) return $this->response($check_res); // 校验验证码 end $mobile = $this->params['mobile']; if(empty($mobile)) return $this->response($this->error([],"手机号不可为空!")); $register = new RegisterModel(); $exist = $register->mobileExist($this->params["mobile"],$this->site_id); //判断该手机号码是否已绑定wx_openid // $opneid_exist = $register->openidExist($this->params["mobile"], $this->site_id); // if ($opneid_exist) return $this->response($this->error([], "该手机号已绑定其他微信公众号!")); if($exist){ $keywords = 'LOGIN_CODE'; } else{ $keywords = 'REGISTER_CODE'; } $code = str_pad(random_int(1,9999),4,0,STR_PAD_LEFT);// 生成4位随机数,左侧补0 $message_model = new Message(); $res = $message_model->sendMessage([ 'type' => 'code', "mobile" => $mobile, "site_id" => $this->site_id, "support_type" => ['sms'], "code" => $code, "keywords" => $keywords ]); if($res["code"] >= 0){ // if ($res["code"]) { //将验证码存入缓存 $key = 'login_mobile_code_'.md5(uniqid(NULL,TRUE)); Cache::tag("login_mobile_code")->set($key,['mobile' => $mobile,'code' => $code],600); return $this->response($this->success(["key" => $key])); // return $this->response($this->success(["key" => $key,"code"=>$code])); } else{ return $this->response($res); } } /** * 手机号授权登录 */ public function mobileAuth(){ $decrypt_data = event('DecryptData',$this->params,TRUE); if($decrypt_data['code'] < 0) return $this->response($decrypt_data); $this->params['mobile'] = $decrypt_data['data']['purePhoneNumber']; $register = new RegisterModel(); $exist = $register->mobileExist($this->params["mobile"],$this->site_id); if($exist){ $login = new LoginModel(); $res = $login->mobileLogin($this->params); if($res['code'] >= 0){ $token = $this->createToken($res['data']['member_id']); $res = $this->success(['token' => $token]); } } else{ $res = $register->mobileRegister($this->params); if($res['code'] >= 0){ $token = $this->createToken($res['data']); $res = $this->success(['token' => $token]); } } return $this->response($res); } /** * 验证token有效性 */ public function verifyToken(){ $token = $this->checkToken(); if($token['code'] < 0) return $this->response($token); return $this->response($this->success()); } /** * 检测登录 * @return false|string */ public function checkLogin(){ $key = $this->params['key']; $cache = Cache::get('wechat_'.$key); if(!empty($cache)){ if(isset($cache['openid']) && !empty($cache['openid'])){ $login = new LoginModel(); $data = [ 'wx_openid' => $cache['openid'], 'site_id' => $this->site_id ]; $is_exits = $login->openidIsExits($data); if($is_exits['data']){ // 存在即登录 $res = $login->authLogin($data); //生成access_token if($res['code'] >= 0){ $token = $this->createToken($res['data']['member_id']); // Session::set($this->params[ 'app_type' ] . "_token_" . $this->site_id, $token); // Session::set($this->params[ 'app_type' ] . "_member_id_" . $this->site_id, $res[ 'data' ][ 'member_id' ]); return $this->response($this->success([ 'token' => $token, 'can_receive_registergift' => $res['data']['can_receive_registergift'] ])); } return $this->response($res); } else{ // 将openid存入session Session::set("auth_info",[ 'wx_openid' => $cache['openid'], 'nickname' => $cache['nickname'], 'headimg' => $cache['headimgurl'] ]); $config = new ConfigModel(); $config_info = $config->getRegisterConfig($this->site_id,'shop'); if($config_info['data']['value']['third_party'] && !$config_info['data']['value']['bind_mobile']){ $data = [ 'wx_openid' => $cache['openid'] ?? "", 'site_id' => $this->site_id, 'avatarUrl' => $cache['headimgurl'], 'nickName' => $cache['nickname'], 'wx_unionid' => $cache['unionid'], ]; Cache::set('wechat_'.$key,NULL); $res = $login->authLogin($data); //生成access_token if($res['code'] >= 0){ $token = $this->createToken($res['data']['member_id']); // Session::set($this->params[ 'app_type' ] . "_token_" . $this->site_id, $token); // Session::set($this->params[ 'app_type' ] . "_member_id_" . $this->site_id, $res[ 'data' ][ 'member_id' ]); return $this->response($this->success([ 'token' => $token, 'can_receive_registergift' => $res['data']['can_receive_registergift'] ])); } } Cache::set('wechat_'.$key,NULL); return $this->response($this->success()); } } elseif(time() > $cache['expire_time']){ Cache::set('wechat_'.$key,NULL); return $this->response($this->error('','已失效')); } else{ return $this->response($this->error('','no login')); } } else{ return $this->response($this->error('','已失效')); } } /** * Common: 第三方登录 —— 开始处理 * Author: wu-hui * Time: 2023/01/05 15:31 * @return false|string */ public function thirdPartyLogin(){ // 参数获取 $wholeParams = input(); $wholeParams['site_id'] = $this->site_id; $provider = $wholeParams['provider']; $code = $wholeParams['code']; if(!$provider || !$code) $this->response($this->error('','登录失败,参数无效,请刷新重试!')); // 请求处理 try{ $login = new LoginModel(); $funName = $provider.'LoginHandle'; $result = $login->$funName($wholeParams); //生成 access_token if($result['code'] == 0){ $token = $this->createToken($result['data']['member_id']); $data = [ 'token' => $token, 'can_receive_registergift' => $result['data']['can_receive_registergift'], 'is_register' => $result['data']['is_register'] ?? 0 ]; return $this->response($this->success($data)); } return $this->response($this->error('',$result['message'])); }catch(\Exception $e){ return $this->response($this->error('',$e->getMessage())); } } }