摘要:有且不限于百度、QQ、微信、Gitee、Github、微博等
总结汇总一下第三方登陆的方法及流程
https://developer.baidu.com/
选择应用管理,创建自己的应用即可
其中的回调地址可以是本地的地址,也可以是localhost,十分方便测试
创建后保存好自己的信息
百度提供了sdk与api,这里主要讲使用api
1、获取code
$clientId = env('BAIDU_API_KEY');
$redirectUri = env('BAIDU_REDIRECT_URI');
header("location:https://openapi.baidu.com/oauth/2.0/authorize?response_type=code&client_id=$clientId&redirect_uri=$redirectUri&display=popup");
2、利用code获取accesstoken
$code = $this->getBaiduCode();
$redirect_uri = env('BAIDU_REDIRECT_URI');
$client_secret = env('BAIDU_SECRET_KEY');
$client_id = env('BAIDU_API_KEY');
$url = "https://openapi.baidu.com/oauth/2.0/token?grant_type=authorization_code&code=$code&client_id=$client_id&client_secret=$client_secret&redirect_uri=$redirect_uri";
# 发送CURL,获得Access_Token
$res = $this->https_request($url);
$data = json_decode($res, true);
$this->baiduAccessToken = $data['access_token'];
return $data['access_token'];
3、根据token调用接口获取需要的信息(这里获取的是用户信息)
$access_token = $accessToken;
$url = 'https://openapi.baidu.com/rest/2.0/passport/users/getLoggedInUser?access_token='.$access_token;
$res = $this->https_request($url);
$userinfo = json_decode($res, true);
return $userinfo;
4、这里是api文档
DOC http://developer.baidu.com/wiki/index.php?title=docs/oauth/rest/file_data_apis_list
setiting->Developer settings->GitHub Apps
可以使用本地配置的域名进行测试
获取对应的id 及key
GET 方式
$clientId = env('GITHUB_CLIENTID');
header("location:https://github.com/login/oauth/authorize?client_id=$clientId");
POST 方式请求
$ch = curl_init();
$data = array(
'client_id'=>env('GITHUB_CLIENTID'),
'client_secret'=>env('GITHUB_SECRET_KEY'),
'code'=>$code,
'redirect_uri'=>env('GITHUB_REDIRECT_URI'),
'grant_type'=>'authorization_code',
);
$url = "https://github.com/login/oauth/access_token";
$res = $this->https_request($url,$data);
return $res;
CURL进行发送的时候需要携带UA参数,否则会被github驳回
$access_token = $accessToken;
$url = 'https://api.github.com/user?'.$access_token;
$res = $this->https_request($url,null,true);
$result = json_decode($res, true);
return $result;
eg:
if($ua){
$useragent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11";
curl_setopt($curl, CURLOPT_USERAGENT, $useragent); //模拟常用浏览器的useragent
}
设置->第三方应用
设置完成后保存对应信息。
可以使用本地域名进行开发测试
$clientId = env('GITEE_CLIENTID');
$redirect_uri = env('GITEE_REDIRECT_URI');
header("location:https://gitee.com/oauth/authorize?client_id=$clientId&redirect_uri=$redirect_uri&response_type=code");
$code = $this->getGiteeCode();
$data = [
'client_id'=>env('GITEE_CLIENTID'),
'client_secret'=>env('GITEE_SECRET_KEY'),
'code'=>$code,
'redirect_uri'=>env('GITEE_REDIRECT_URI'),
'grant_type'=>'authorization_code',
];
$url = "https://gitee.com/oauth/token";
$res = $this->https_request($url,$data);
return json_decode($res,true)['access_token'];
$url = 'https://gitee.com/api/v5/user?access_token='.$access_token;
$res = $this->https_request($url);
$result = json_decode($res, true);
return $result;
这里不需要进行UA认证
填写个人信息
注意:照片需要个人手持身份证,且身份证的头像在照片的右侧
注意点
1、网站名称需要与备案的网站名称一致
2、需要填写备案号
3、回调地址不能是本地地址,需要在线上可以访问的地址
$app_id = env('QQ_APP_ID');
$redirect_uri = env('QQ_REDIRECT_URI');
header("location:https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=$app_id&redirect_uri=$redirect_uri");
$client_id = env('QQ_APP_ID');
$client_secret = env('QQ_APP_KEY');
$redirect_uri = env('QQ_REDIRECT_URI');
$code = $this->getQqCode();
$url = "https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id=$client_id&client_secret=$client_secret&code=$code&redirect_uri=$redirect_uri";
$res = $this->https_request($url);
return $res;
这里返回的token是一个类似get传参形式的string,需要进行处理
$token = $token;
$url = "https://graph.qq.com/oauth2.0/me?access_token=$token";
$res = $this->https_request($url);
$callback = trim(trim($res),'callback');
$callback = ltrim($callback,'(');
$callback = rtrim($callback,');');
return json_decode($callback,TRUE);
qq返回的格式,是方便js调用的,这里需要进行处理,去除外层的信息,只留下内层的json数据
$token = $token;
$client_id = $openid['client_id'];
$openid_str = $openid['openid'];
$url = "https://graph.qq.com/user/get_user_info?access_token=$token&oauth_consumer_key=$client_id&openid=$openid_str";
$res = $this->https_request($url);
return $res;
这里并没有类似之前的集中的uid,所以作区分需要使用openid充作platform_uid
不支持本地测试,需要使用线上域名
在提交广场审核后会被驳回,因为广成审核已经下架,可以直接使用
你的应用“会武术的地瓜”广场未通过
驳回理由:您好,广场审核已下线,现在只要通过普通应用审核,应用就可以正常使用,所以无需再提交广场审核。请您放心使用。
$client_id = env('WEIBO_APP_KEY');
$redirect_uri = env('WEIBO_REDIRECT_URI');
header("location:https://api.weibo.com/oauth2/authorize?client_id=$client_id&response_type=code&redirect_uri=$redirect_uri");
$code = $this->getWeiboCode();
$data = [
'user_post' => 'null_post'
];
$client_id = env('WEIBO_APP_KEY');
$client_secret = env('WEIBO_APP_SECRET');
$redirect_uri = env('WEIBO_REDIRECT_URI');
$url = "https://api.weibo.com/oauth2/access_token?client_id=$client_id&client_secret=$client_secret&grant_type=authorization_code&code=$code&redirect_uri=$redirect_uri";
$res = $this->https_request($url,$data);
return $res;
踩坑点:
1、这里需要使用post数据,但是post并不提交参数,参数是由url提交的,否则会报错21323 ,提示参数找不到
2、使用post这里使用了空的,在编写的curl函数中,以为是空的,没走post方式走了get,报错10021,这时候写个post参数进去即可获取结果
$token = $accessToken['access_token'];
$uid = $accessToken['uid'];
$url = "https://api.weibo.com/2/users/show.json?access_token=$token&uid=$uid";
$userinfo = $this->https_request($url);
return $userinfo;