TP5qq登陆

264阅读-0评论-作者:博主 tp5 qq登陆
艰辛万苦
<a href="{:url('index/index/QqLogin')}"><img src="__ADMIN__/index/img/bt_blue_76X24.png" alt="QQ登录" /></a>
//    第三方登陆
   public function QqLogin()
   {
       $app_id = "id";
       //回调地址
       $redirect_uri = urlencode("地址");
       $url = "https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=".$app_id."&redirect_uri=".$redirect_uri."&scope=get_user_info&state=text";
       //跳转到$url
       //Step1:获取Authorization Code
       // header("location".$url);
       $this->redirect($url);

   }
// 回调地址
public function qqCallBack()
{
   // $code = $_GET['code'];
   // dump($code);exit;
   // appid
   $app_id = "id";
   //appkey
   $app_secret = "secret";
   //成功授权后的回调地址
   $my_url = urlencode("回调地址");
   //获取code
   $code = $_GET['code'];

   //Step2:通过Authorization Code获取Access Token

   $token_url = "https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id=".$app_id."&redirect_uri=".$my_url."&client_secret=".$app_secret."&code=".$code."";
   //file_get_contents() 把整个文件读入一个字符串中。
   $response = file_get_contents($token_url);


   //Step3:在上一步获取的Access Token,得到对应用户身份的OpenID

   $params = array();
   //parse_str() 函数把查询字符串('a=x&b=y')解析到变量中。
   parse_str($response,$params);


   $graph_url = "https://graph.qq.com/oauth2.0/me?access_token=".$params['access_token']."";
   $str = file_get_contents($graph_url);
   // dump($str);die;
   // --->找到了字符串:callback( {"client_id":"YOUR_APPID","openid":"YOUR_OPENID"} )
   //
   // strpos() 函数查找字符串在另一字符串中第一次出现的位置,从0开始
   if(strpos($str,"callback")!==false)
   {
       $lpos = strpos($str,"(");
       // strrpos() 函数查找字符串在另一字符串中最后一次出现的位置。
       $rpos = strrpos($str,")");
       //substr(string,start,length) 截取字符串某一位置
       $str = substr($str,$lpos+1,$rpos-$lpos-1);
   }
   // json_decode() 函数用于对 JSON 格式-->{"a":1,"b":2,"c":3,"d":4,"e":5}<--的字符串进行解码,并转换为 PHP 变量,默认返回对象
   $user = json_decode($str);
   // dump($user->openid);die;
   session('openid',$user->openid);

   //Step4: 调用OpenAPI接口,得到json数据,要转换为数组

   $huiyuan = "https://graph.qq.com/user/get_user_info?access_token=".$params['access_token']."&oauth_consumer_key=".$app_id."&openid=".$user->openid."";
   //加上true,得到数组,否则默认得到对象
   $res = json_decode(file_get_contents($huiyuan),true);
   $re = db('member')->where(array('openid'=>$user->openid))->find();
   //如果没有找到,进行注册
   if(!$re){
       if($res['gender']==""){
           $res['gender'] = 1;
       }else{
           $res['gender'] = 2;
       }
       $data = [
           'openid'=>$user->openid,
           'username'=>$res['nickname'],
           'image'=>$res['figureurl_qq_2'],
           'gender'=>$res['gender'],
           'create_time'=>time(),
       ];
       $r = db('member')->insert($data);
       if($r){
           $this->success('注册成功!','/');
       }else{
           $this->error('注册失败!');
       }
   }else{
       $this->redirect('login_qq');
   }
}
// 如果有账号直接登录
public function login_qq()
{
   $res = db('member')->field('id, username')->where('openid',session('openid'))->find();
   if(!$res){
       $this->error('不是本站会员!');
   }else{
       session('index',$res);
       $this->success('登录成功!','/');

   }
}


春春春2021-02-06 22:41:28
把我累得哟, 终于结合网上的弄好了