简单实用 微信授权登陆(网页版)

44 篇文章 2 订阅
31 篇文章 0 订阅

备注:使用该方法前要将你的微信公众号绑定到你的微信开放平台上面

    private $APP_ID = 'wx7b2a3-----------' ; //APP_ID
    private $APP_SECRET = '3dcaf80d6adf6-----------------'; //$APP_SECRET


    //获取Access Token
    private function getAccessToken($code){

        $ACCESS_TOKEN = file_get_contents('https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$this->APP_ID.'&secret='.$this->APP_SECRET.'&code='.$code.'&grant_type=authorization_code');
        return $ACCESS_TOKEN;
    }


    //获取用户信息方法
    private function getUserInfo($access_token,$openid){
        return(file_get_contents('https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token.'&openid='.$openid));
    }


    //获取登录;
    public function login(Request $request){
        $code = request('code');
        $language = request('language'); //中英文
        //获取access_token等信息
        $access_token=$this->getAccessToken($code);
        $assess_tokenArr = json_decode($access_token,true);
        //获取用户信息
        $userinfo = $this->getUserInfo($assess_tokenArr['access_token'],$assess_tokenArr['openid']);
        $wxinfo = json_decode($userinfo,true);
 
        $user = Users::where('wx_unionid',$wxinfo['unionid'])->first();

        if($user){
            if(empty($user->pic)){
                $user->pic = $wxinfo['headimgurl'];
            }
            $wxinfo['nickname'] = $this->removeEmoji($wxinfo['nickname']);
            if(!Users::where('nickname',$wxinfo['nickname'])->first()){
                $user->nickname = $wxinfo['nickname'];
            }

            Redis::hdel('wap_token:'.$user->wap_token,'wapUserInfo');
            $tokenKey = str_random(64);
            $user->wx_unionid = $wxinfo['unionid'];
            $user->login_ip = $request->ip();
            $user->login_time = time();
            $user->wap_token = $tokenKey;
            unset($user->password);
            if(empty($user['phone'])){
                $checkphone = 0;
            }else{
                $checkphone = 1;
            }
            if ($user->save()) {
                unset($user->wap_token);
                if (Redis::hmset('wap_token:' . $tokenKey, ['wapUserInfo' => $user]) == 'OK' && Redis::expire('wap_token:' . $tokenKey, 7200)) {
                    if($language == 'zh'){
                        $vdata = [
                            'status' => 1,
                            'msg' => '登录成功',
                            'wap_token' => $tokenKey,
                            'checkphone'=>$checkphone
                        ];
                    }else{
                        $vdata = [
                            'status' => 1,
                            'msg' => 'Login successfully',
                            'wap_token' => $tokenKey,
                            'checkphone'=>$checkphone
                        ];
                    }
                }
            }
        }else{
            $data['wx_unionid'] = $wxinfo['unionid'];
            $data['reg_time'] = time();
            $data['pic'] = $wxinfo['headimgurl'];
            $data['wap_token'] =  str_random(64);
            $data['username'] = 'mooby_'.uniqid();
            $wxinfo['nickname'] = $this->removeEmoji($wxinfo['nickname']);
            if(!Users::where('nickname',$wxinfo['nickname'])->first()) {
                $data['nickname'] = $wxinfo['nickname'];
            }else{
                $data['nickname'] = substr(md5(microtime(true)), 0, 8);
            }
            $data['login_ip'] = $request->ip();
            $data['login_time'] = time();
            if($insert_id = Users::create($data)){
                $userinfo = Users::find($insert_id->id);
                unset($userinfo->password);
                if (Redis::hmset('wap_token:' . $userinfo->wap_token, ['wapUserInfo' => $userinfo]) == 'OK' && Redis::expire('wap_token:' . $userinfo->wap_token, 7200)) {
                    $vdata = [
                        'msg' => 'Success',
                        'status' => 1,
                        'wap_token'=>$userinfo->wap_token,
                        'checkphone'=>0,
                    ];
                }else{
                    $vdata = [
                        'msg' => 'Error',
                        'status' => -1
                    ];
                }
            }
        }
        return response()->json($vdata);
    }

    //用户名称过滤不能保存的表情与字符
    function removeEmoji($clean_text) {
   
        // Match Emoticons
        $regexEmoticons = '/[\x{1F600}-\x{1F64F}]/u';
        $clean_text = preg_replace($regexEmoticons, '', $clean_text);
        // Match Miscellaneous Symbols and Pictographs
        $regexSymbols = '/[\x{1F300}-\x{1F5FF}]/u';
        $clean_text = preg_replace($regexSymbols, '', $clean_text);
        // Match Transport And Map Symbols
        $regexTransport = '/[\x{1F680}-\x{1F6FF}]/u';
        $clean_text = preg_replace($regexTransport, '', $clean_text);
        // Match Miscellaneous Symbols
        $regexMisc = '/[\x{2600}-\x{26FF}]/u';
        $clean_text = preg_replace($regexMisc, '', $clean_text);
        // Match Dingbats
        $regexDingbats = '/[\x{2700}-\x{27BF}]/u';
        $clean_text = preg_replace($regexDingbats, '', $clean_text);
        return $clean_text;
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值