您的位置:首页 > 其它

【第三方登录】第三方登录 Part1 —— QQ登录(2016-09最新版)

2016-09-12 11:46 666 查看
由于楼主是web开发方向,所以这里就介绍一下web接入qq登录的方法,以及和app的qq登录打通的方法

0、前提

已经有一个在工信部备案过的域名的网站,具体可以查询工信部的备案页面(请注意这里的信息很重要,会影响之后qq登录申请时的资料填写)

工信部查询域名备案的网址:http://www.miitbeian.gov.cn/publish/query/indexFirst.action



1、去QQ互联申请应用(腾讯有很多个平台,网页的QQ登录一定是在QQ互联申请,App的是在腾讯开放平台)

QQ互联的网址:https://connect.qq.com/

1.1 成为开发者,并用开发者账号登录(如果之后要和在腾讯开放平台申请的App的QQ登录打通的话,请使用相同的开发者账号登录)

1.2 选择创建网页应用



1.3 填写基本信息

此处填写的网站名称必须与工信部域名备案查询页面的“网站名称”一栏填写一样的,否则将无法通过QQ互联的审核



1.4 完善资料

网站域名需要填写带http://或者https://的完整域名

网站回调域,需要填写完整的回调地址,

比如你的回调页面是放在 /网站根目录/qq_oauth/callback.php

那么网站回调域需要填写 http://域名/qq_oauth/callback.php
在QQ互联改版之前是支持填写多回调域的,比如有一个测试环境 http://dev.example.com 和一个正式环境 http://www.example.com
那么网站回调域可以填写为 http://www.example.com/qq_oauth/callback.php;http://dev.example.com/qq_oauth/callback.php
两者用分号分隔开,新版的QQ互联暂时没有测试过这个功能

提供方建议和工信部域名备案查询页面的“主办单位名称”一栏填写一样的

网站备案号必须与工信部域名备案查询页面的“网站备案/许可编号”一栏填写一样的

图标可以不传



1.5 完成创建,等待QQ互联的审核(这个审核如果资料和工信部备案的填写的一致,那么还是挺快就能获得通过的,楼主的经验是1-2天)

2、通过审核之后,能获取到app id和app key

这时候,使用官方的sdk,就能快速完成开发(楼主用的是php的sdk,第三方登录和获取用户信息,亲测可用)

这里要提醒的是,配置文件 /API/comm/inc.php 中

“callback”需要和在QQ互联填写的网站回调域保持一致(QQ互联中,如果填写的是两个环境的,那么此处根据环境不同填写一个回调地址)

两边回调地址填写的不同会造成调不通

3、如果网站的QQ授权回调已经调通,需要打通App的QQ登录和网站的QQ登录,那么请接着往下做

3.1 如图中所需资料,发送邮件给 connect@qq.com



网站ICP备案信息截图即可用工信部备案信息查询页面的截图

3.2 耐心等待回信(这个要看运气了,快的话当天就能收到回复,否则可能需要7天)

3.3 收到回信,为打通App和网站的QQ登录修改代码



网站和App的App Id和App Key并未改变,通过两套获取到的openid也是不同的,只是通过获取openid时多加一个 unionid=1 的参数,QQ将会多返回unionid,打通的网站和app的unionid是一致的(像微信那样了),需要根据unionid是否一致来判断网站来的用户是否和app来的用户为同一个QQ账户

如果是使用官方的php的sdk包的,可以参照如下操作

在callback时候,原来会$qc->get_openid(); 获取openid,这时候改成同时获取openid和unionid

3.3.1 在/API/class/Oauth.class.php中找到public function get_openid()

//-------请求参数列表
$keysArr = array(
"access_token" => $this->recorder->read("access_token"),
"unionid"	=>	1
);


请求参数列表增加第二行

//------记录openid
$this->recorder->write("openid", $user->openid);
$this->recorder->write("unionid", $user->unionid);


多增加一条记录

return Array(
'openid'	=>	$user->openid,
'unionid'	=>	$user->unionid
);
// return $user->openid;


返回从仅返回openid,改为同时返回openid和unionid

3.3.2 callback文件中,同时接收openid和unionid

$open_id_result = $qc->get_openid();

$open_id = $open_id_result['openid'];
$union_id = $open_id_result['unionid'];


这样就完成了web端的打通的工作(当然app或者服务端也需要做unionid的相应改动)

补充:

关于app如何打通的问题,这里做个介绍,qq官方的app的sdk是只能获取到access_token和openid的,而不能获取到unionid

所以app在获取了access_token之后,需要再发送一个请求到以下地址就可获取到unionid(绑定了的app和web,app的access_token和web的access_token都可以获取到相同的unionid,楼主亲测有效有效哦)
https://graph.qq.com/oauth2.0/me?access_token=ACCESSTOKEN&unionid=1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息