<?php /** * Created by PhpStorm. * User: 张永峰 * Date: 2021/3/15 * Time: 11:11 * ━━━━━━━━━神兽出没━━━━━━━━━ * ┏┓ ┏┓+ + * ┏┛┻━━━┛┻┓ + + * ┃ ┃ * ┃ ━ ┃ ++ + + + * ████━████ ┃+ * ┃ ┃ + * ┃ ┻ ┃ * ┃ ┃ + + * ┗━┓ ┏━┛ * ┃ ┃ * ┃ ┃ + + + + * ┃ ┃ Code is far away from bug with the animal protecting * ┃ ┃ + 神兽保佑,代码无bug * ┃ ┃ * ┃ ┃ + * ┃ ┗━━━┓ + + * ┃ ┣┓ * ┃ ┏┛ * ┗┓┓┏━┳┓┏┛ + + + + * ┃┫┫ ┃┫┫ * ┗┻┛ ┗┻┛+ + + + * ━━━━━━━━━感觉萌萌哒━━━━━━━━━ */ namespace zyf; /** * @title 类标题 * @desc 类说明 * Class QQ * @package zyf * @Date : 2021/3/15 * @Time : 11:11 */ class QQ { /** * QQ登录接口 * @return mixed * @author zyf <1322816443@qq.com> * */ public function login() { $app_id = config('qq.main.app_id'); //回调地址 $redirect_uri = config('qq.main.redirect_uri'); $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"; redirect($url); } /** * QQ登录 * @param string code 返回码 * @return mixed * @author zyf <1322816443@qq.com> * */ public function token() { // Step1:定义参数 // appid $app_id = config('qq.main.app_id'); // appkey $app_secret = config('qq.main.app_secret'); // 成功授权后的回调地址 $my_url = urlencode(config('qq.main.redirect_uri')); // 获取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); // 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); $openid = $user->openid; // Step4: 调用OpenAPI接口,得到json数据,要转换为数组 $arr = "https://graph.qq.com/user/get_user_info?access_token=". $params['access_token']."&oauth_consumer_key=".$app_id."&openid=".$user->openid; // 加上true,得到数组,否则默认得到对象 $result = json_decode(file_get_contents($arr), true); $memMod = new appcommonmodelMember(); $res = $memMod->getOneWhereCache([], [['open_id', '=', $openid]]); // 如果没有找到,进行注册 // 把 id 存session if (!$res) { $data = [ 'open_id' => $openid, 'sex' => $res['gender'], 'nickname' => $res['nickname'], 'headimg' => $res['figureurl_qq_2'], 'province' => $res['province'], 'city' => $res['city'], ]; $is_add = $memMod->edit($data); if ($is_add) { session('indexId', $is_add['id']); } } else { session('indexId', $res['id']); } } }