第三方登录

前言

修修改改总算把第三方登录,遇到很多坑,很多在网上也搜不到。涉及有QQ、微信、微博,我想读完这文章能少走很多弯路,还有注意文章的时间。那么从坑最多的来讲。

当有多个网站需求但是只有一个 appid 的时候可以考虑下 proxy 的实现方式了。

关于测试

如果说是为公司开发,公司没有提供appid,那么就可以自己在平台注册一个开发者,这样拿到开发账号就可以直接测试了。

如果遇到问题,移动开发可以看是否提供sdk源码,如果在 github 上,可以在 issue中看到很多别人遇到的问题,这样也能少走很多弯路,比如最近 ios10,开发者们都已早早更新,微博出现了 https 错误的问题,在 issue 里就找到了答案。

QQ 登录

QQ 坑是最多的,QQ 分为互联和开放平台,开放平台和互联管理的各不同,开放平台管的是空间微博朋友网授权以及移动授权,并不支持 PC 上 Web 授权登录,想要申请 Web授权就需要到互联申请,但是千万不要将这两个平台的账号管理起来,不然就需要全部审核成功后才能上线。

当然授权是为了拿到用户信息,还有就是openid,也是就是用户的唯一标识,但是互联和开放平台拿到的openid 是不同的,这点要做全平台登录的一定要注意了。后来咨询 QQ 那边,互联改版后支持移动和Web 两种授权方式了,所以可以直接在互联申请了。也是很坑,这是我在做完之后遇到问题才改版的。结果是我们只有移动端的注册。

QQ 的文档很老旧,接口返回还有 jsonp 和 query 的形式。要自己写解析的。

微信登录

微信比较好,但是也分为开放平台和公众平台,公众平台绑定开放平台后能拿到 unionid这点也是要注意的。所以,在写登录的时候就要看需不需要这个 unionid 了,不然拿到的就是 openid。

登录分两种,一种是扫码登录,这个是在开放平台的。还有种是在微信客户端内登录,这个是公众平台的,所以看文档注意自己看的是哪个平台的文档。

微信公众平台提供了测试工具,还算比较方便的,但是有很多隐患,比如在真机上出现的问题会在测试工具上无法复现,也许是被测试工具吞掉了抛错。

另一点是登录请求的 url 的 query 一定要是排序的,不然也会抛错。

微信的 get_user_info 拿到的信息会有问题,在存储的时候可能会是乱码,因为它给你的是一个 utf8的 encode 位串,这点最好注意一下。

记住一定要把微信的文档全都复印一遍,然后烧掉它,这只是一种仪式感。

微博登录

应该是最好的了,没有太多的问题,认真看文档。

后记

一个人做完了微信、微博、QQ第三方登录,这也是我第一次做,经验不多犯了很多错,写这篇文章分享一下,让别人能少走一些弯路。还有设计 API 的时候一定要求同,保证接口一致,只是微信移动端 SDK 里出的一些问题。

如果有其他问题都可以在留言中提出。