天天看点

QQ微信微博联合登录流程总结

第三方联合登录一般可以降低网站的获客成本,所以一般的网站都会做一些联合登录,常用的就是qq、微信、微博了,下面简单的介绍一下这些联合登录的方法。

QQ微信微博联合登录流程总结

看了一号店的qq登录源码可知,点击图标直接访问的是这个链接

<a href="https://passport.yhd.com/qq/login.do?tp=2.0.0.0.0.lwyye4h-10-c%60toe&amp;ti=h2h3vt">https://passport.yhd.com/qq/login.do?tp=2.0.0.0.0.lwyye4h-10-c`toe&amp;ti=h2h3vt</a>

它首先请求的是自己网站的请求,后面那两个参数应该没用,大家自己项目可以不用加,不过抓包能看出来它在服务端做了一个重定向指向了腾讯的qq授权登录页面

<a href="https://graph.qq.com/oauth2.0/authorize?response_type=code&amp;client_id=100234077&amp;redirect_uri=https://passport.yhd.com/qq/callback.do&amp;scope=get_user_info&amp;state=6172a6f6f311570fe739e96be57b6a67">https://graph.qq.com/oauth2.0/authorize?response_type=code&amp;client_id=100234077&amp;redirect_uri=https://passport.yhd.com/qq/callback.do&amp;scope=get_user_info&amp;state=6172a6f6f311570fe739e96be57b6a67</a>

这里一号店只申请了昵称头像性别的权限,一般都会同意的。

接下来就是qq的重定向了,qq自己到了这个请求。

<a href="https://graph.qq.com/oauth/show?which=login&amp;display=pc&amp;response_type=code&amp;client_id=100234077&amp;redirect_uri=https://passport.yhd.com/qq/callback.do&amp;scope=get_user_info&amp;state=6172a6f6f311570fe739e96be57b6a67">https://graph.qq.com/oauth/show?which=login&amp;display=pc&amp;response_type=code&amp;client_id=100234077&amp;redirect_uri=https://passport.yhd.com/qq/callback.do&amp;scope=get_user_info&amp;state=6172a6f6f311570fe739e96be57b6a67</a>

但是当qq回调你方法的时候就成了这样

<a href="https://passport.yhd.com/qq/callback.do?code=78df205e46bfece1d22d31fd77bfd925&amp;state=8625864ecaa9b8424aa40a7e12b4cdb9">https://passport.yhd.com/qq/callback.do?code=78df205e46bfece1d22d31fd77bfd925&amp;state=8625864ecaa9b8424aa40a7e12b4cdb9</a>

在这里qq加上了一个code参数和state参数,code是用来获取token值的,只有10分钟有效期,state参数是让你校验你的请求有没有被篡改,如果被篡改,你得有相应的处理。在这个回调方法里,我们得按照qq联合登录的文档用申请qq登录所分发的appid和appkey来获取token,

QQ微信微博联合登录流程总结

获取完token,你就得按文档再根据token去获取用户的openid

QQ微信微博联合登录流程总结
QQ微信微博联合登录流程总结

当走到这里时,你已经得到了用户的openid和其他的用户信息,应为openid是唯一的,所以不可能重复,这时候整个联合登录就已经走完了。你可以根据openid给用户在你的站内创建一个账号,设置登录token,认为用户已经登录了。

qq联合登录说的这么清楚了,其实微信联合登录也是这个套路,具体看文档调接口就可以了

<a href="https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&amp;t=resource/res_list&amp;verify=1&amp;id=open1419316505&amp;token=%e2%8c%a9=zh_cn">微信联合登录</a>

<a href="https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&amp;t=resource/res_list&amp;verify=1&amp;id=open1419316518&amp;token=%e2%8c%a9=zh_cn">微信联合登录查询用户信息</a>

如果你的微信开放平台下有多个应用,你可以用appid+unionid的形式来保证用户id的唯一性。