最近一直在研究围绕微信平台的相关开发,其中踩到了不少坑,特来此记录一番,也方便交流。真想吐槽为什么微信弄个开放平台还要加一个公众平台呢?两边文档还不一样。类似的功能还得写两次。上网查了下,果然有人在喷微信文档多次误导第三方sdk写错了:)
上次接到一个任务,PC网站要支持微信第三方登陆功能。一直以为是在服务号那边做相应的配置和处理,看的是这边的文档 。尝试了多次都是提示scope没有相关权限,授权地址格式如下:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE&connect_redirect=1#wechat_redirect
后面去分析了下第三方网站的微信授权地址,正确的格式如下:
https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect上面是我遇到的第一个坑,糗大了:) .微信就是比较特别,其他SNS账户叫client_id 微信这边叫appid, 还要在URL末尾搞个#wechat_redirect,刚开始也没太在意它的作用,为了保持代码的一致整洁,授权地址里面的client_id我没有去掉,这样一来,URL里面的参数个数实际上比微信需要的多一个,这样也为后面的BUG埋下了伏笔。
微信开放平台的文档在这。整体来说比较顺利,网站在这里:爱玩儿HTML5.欢迎体验。
PC端微信登陆做好了,接下来是微信浏览器里面的微信登陆。如果没有对PC端微信登陆和微信环境下登陆做区分,在微信环境下点击授权登陆,你将看到的是一个扫码页面,类似这样:
在移动端扫码,这样的体验很糟糕。一些朋友想到的可能是跳过扫码的页面,直接让用户点击确认授权的页面,殊不知,PC端扫码也是微信授权流程的一部分,这个扫码并确认的过程就是获取授权码code的过程。有了之前的经验,我知道必须在公众号后台来完成授权登陆的过程。授权地址如下:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&client_id=xxx&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect忘记 把client_id去掉了,导致跳转后页面一片空白,也没有提示错误信息。经过多种尝试,确认appid是没问题的,redirect_uri也是合法域名下的地址。问题得不到解决,把想过的法子都尝试了,只好把第三方授权地址拷贝出来看,严格按照微信文档的GET参数顺序和个数来填写,问题得到了解决:)。
这里主要有两个问题,一个问题是多了一个client_id,另外一个问题是URI参数的顺序问题。必须严格按照微信官方的格式来。
最后想说以下URL里面#号参数的作用,#可以为网页位置指定标识符,作为超链接标签<a>的一个锚点。#并不是HTTP协议的内容。单单改变#后的部分,浏览器只会滚动到相应位置,不会重新加载网页。