AkiraZ's blog

愿键盘的余温传递到更遥远的将来

中文 / English
0%

微信公众号小程序第三方获取授权流程

这是一个类似平时的C-S模型,但在这模型中有一个问题,服务器能够获取到客户端的客户唯一标识,在微信中应该就是微信号。应该是出于保护用户隐私的目的,微信选择了使用openid来代替微信号作为唯一标识,同时,openid对于不同的公众号也是不同的,就是说,openid具有以下特征:

  • 同一个公众号的不同用户openid不同(废话)
  • 同一个用户对不同公众号openid不同

那么问题来了,公众号小程序是怎么知道当前访问的用户是哪个用户呢?

除此之外,可能是为了防止伪造身份,微信公众号/小程序除了appid外还有一个secret,官方文档中称该参数安全性极高,不能放置于客户端,那么就意味着请求必须从服务端发送

这时就需要微信服务器作为中间件来做授权。

以下简称:用户->客户端 (Client),公众号小程序->服务端 (Sever),微信=微信服务器 (WeChat)

获取 code

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

参数 是否必须 说明
appid 公众号的唯一标识
redirect_uri 授权后重定向的回调链接地址, 请使用 urlEncode 对链接进行处理
response_type 返回类型,请填写code
scope 应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 )
state 重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节
#wechat_redirect 无论直接打开还是做页面302重定向时候,必须带此参数

获取 openId

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

参数 是否必须 说明
appid 公众号的唯一标识
secret 公众号的appsecret
code 填写第一步获取的code参数
grant_type 填写为authorization_code