php网页微信登录,获取用户信息

第一步:调起微信授权页面

public function wxLogin(){
        //1.调起授权页面
        $appid=self::APPID;
        $redirect_uri=urldecode("http://微信后台配置的js安全 域名/Index/getWxinfo.html");  //微信后台配置的回调地址
        $url_sq="https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appid
            ."&redirect_uri=".$redirect_uri."&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect";
        echo "<script>"; 
        echo " window.location.href = '$url_sq' "; 
        echo "</script>"; 
    }

第二步:用户同意授权后,跳转到$redirect_uri指向的方法


    public function getWxinfo(){
            $appid=self::APPID;
            $secret=self::APPSCRIPT;
            $code=$_GET['code'];    //微信回传的参数
            $state=$_GET['state'];    //微信回传的参数
            $url_getAStoken="https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid
                            ."&secret=".$secret."&code=".$code."&grant_type=authorization_code";
            $result_astoken = $this->curl_file_get_contents($url_getAStoken);
            
            $aa=json_decode($result_astoken, true);  //返回结果转成数组
            
            //拉取用户信息,获取access_token
            $access_token=$aa['access_token'];
            //如果access_token失效,重新拉取
            
            $openId=$aa['openid'];

           //带着参数,请求获取用户信息的接口
            $url_getInfo="https://api.weixin.qq.com/sns/userinfo?access_token=".$access_token."&openid=".$openId."&lang=zh_CN";
            $bb=$this->curl_file_get_contents($url_getInfo);
            $wx_info=json_decode($bb, true);
            unset($wx_info['privilege']);
            $cc=M("ly_user")->where(array("openid"=>$wx_info['openid']))->find();
            if(empty($cc)){

                $wx_info['nickname']=$this->removeEmoji($wx_info['nickname']); //处理微信名
                $saveid=M("ly_user")->add($wx_info);    //保存到数据库
                $userinfo['uId']=$saveid;
            }else{
                $userinfo['uId']=$cc['id'];
            }
            $userinfo['open_id']=$wx_info['openid'];
            session("front_user",$userinfo);   //保存登录信息到session
            
            $this->redirect(U('Index/index'));    //跳转页面
                
    }

  //通过正则去掉用户名的emoji表情,否则存入数据库报错

     public function removeEmoji($nickname)
    {
        $nickname = preg_replace('/[\x{1F600}-\x{1F64F}]/u', '', $nickname);
        $nickname = preg_replace('/[\x{10000}-\x{10FFFF}]/u', '', $nickname);
        $nickname = preg_replace('/[\x{1F300}-\x{1F5FF}]/u', '', $nickname);
        $nickname = preg_replace('/[\x{1F680}-\x{1F6FF}]/u', '', $nickname);
        $nickname = preg_replace('/[\x{2600}-\x{26FF}]/u', '', $nickname);
        $nickname = preg_replace('/[\x{2700}-\x{27BF}]/u', '', $nickname);
        $nickname = str_replace(array('"', '\''), '', $nickname);
        return addslashes(trim($nickname));
    }    
    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值