微信授权流程
前言
最近项目接触到微信 h5 页面开发,对于一个对微信只接触过小程序的小白来说,整个流程都是懵懵逼逼的。对微信授权流程之前只是有个大致的了解,自己并不是很清楚其中的通信,刚好有机会跟小组长一起去探讨这个问题,梳理了一下基于我们项目的微信授权逻辑。
由上顺序图可以看到
用户进入微信 h5 页面,调用微信授权接口,返回用户授权界面,微信授权接口如下:
https://open.weixin.qq.com/co…
这里有两个参数比较注意的是:redirect_uri 和 state,redirect_uri 主要是存放后台的接口访问地址,state 主要存放微信授权成功后需要跳转的页面地址。与整个微信授权流程紧密相关,请先记住了!!记不住记得回来回忆一下
若提示该链接无法访问,请检查参数是否填写错误,是否拥有 scope 参数对应的授权作用域权限。微信返回参数错误的原因一般有两种:一是在微信公众平台没有配置相应的参数;二是前端配置的接口参数与公众平台不一致。
具体参数说明
参数
是否必须
说明
appid
是
公众号的唯一标识
redirect_uri
是
授权后重定向的回调链接地址,需要使用 urlEncode 对链接进行处理
response_type
是
返回类型,填写 code
scope
是
应用授权作用域,snsapi_base(不弹出授权页面,直接跳转,只能获取用户 openid),snsapi_userinfo(弹出授权页面,可通过 openid 拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息)
state
否
重定向后会带上 state 参数,传递什么返回什么
wechat_redirect
是
无论直接打开还是做页面 302 重定向时候,必须带此参数
用户同意授权之后,即向微信发送同意授权请求,微信返回一个 302 的重定向数据包 (redirect_uri+code+state),客户端浏览器重定向 redirect_uri+code。此处相当于向后台请求了一次接口,后台存取相关请求信息并通过获取的 code 换取网页授权 access_token(后端)由于公众号的 secret 和获取到的 access_token 安全级别都非常高,必须只保存在服务器,不允许传给客户端。后续刷新 access_token、通过 access_token 获取用户信息等步骤,也必须从服务器发起
如果网页授权作用域为 snsapi_userinfo,则此时开发者可以通过 access_token 和 openid 拉取用户信息了。后台用 access_token 换取用户信息之后,向客户端返回一个重定向数据包 (state+token), 客户端浏览器根据 state 进行重定向并在该页面存取相关 token 信息
https://api.weixin.qq.com/sns…
此时客户端已经获取 token 信息,根据 token 信息可以向后台请求接口获取相关信息。
注意
调取微信授权接口时根据 scope 的不同有两种授权方式:snsapi_base 是用来获取用户的 openid,不需要用户手动授权。而 snsapi_userinfo 是用来获取用户基本信息,需要用户手动授权。
检验授权凭证(access_token)是否有效
请求方法:
http:GET(请使用 https 协议)https://api.weixin.qq.com/sns…
参数
说明
access_token
网页授权接口调用凭证, 注意:此 access_token 与基础支持的 access_token 不同
openid
用户的唯一标识