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

由于楼主是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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值