微信网页授权获取用户信息等机制

参考官方文档

https://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html

1.用户进入授权界面(APP?WeChat

  引导用户打开链接:

  https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
微信网页授权获取用户信息等机制图片来源于微信公众平台开发者文档

a-zA-Z0-9:小写字母a至z;大写字母A至Z;数字0至9

state补充说明:开发者自定义的参数,比如一个内部的回调地址。如redirect_uri是一个用户进入内部各种回调地址的入口entry,state包含了这个内部的回调地址。

302重定向:302重定向又称之为302代表暂时性转移(Temporarily Moved ),英文名称:302 redirect。 也被认为是暂时重定向(temporary redirect),一条对网站浏览器的指令来显示浏览器被要求显示的不同的URL,当一个网页经历过短期的URL的变化时使用。


2.用户同意授权后,跳转至redirect_uri/?code=CODE&state=STATE(WeChat?中转)

微信网页授权获取用户信息等机制

补充说明:中转获取到code后,可以通过3,4等进行一系列的操作获取用户openid及用户基本信息,处理后再与state中的内部回调地址结合完成app内的跳转等。(中转?APP


3.通过code换取网页授权access_token及用户openid等(中转?WeChat

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

   以获取access_token。

    其中:appid:公众号的唯一标识;secret:公众号的appsecret;code:2中获取的code参数;grant_type=authorization_code默认不变

  若CODE有效(是2中获取的参数)且未过期,appid(是1中的appid)和secret一致,返回JSON数据:

 

{
   "access_token":"ACCESS_TOKEN",//网页授权接口调用凭证
   "expires_in":7200,//access_token接口调用凭证超时时间,单位(秒)
   "refresh_token":"REFRESH_TOKEN",//用户刷新access_token
   "openid":"OPENID",//用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID
   "scope":"SCOPE",//用户授权的作用域,使用逗号(,)分隔
   "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"//只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段
}

 

  这里通过code换取的是一个特殊的网页授权access_token,与基础支持中的access_token(该access_token用于调用其他接口)不同。如果网页授权的作用域为snsapi_base,则本步骤中获取到网页授权access_token的同时,也获取到了openid,snsapi_base式的网页授权流程即到此为止。

 

 (3.1)刷新access_token(如果需要)

  由于access_token拥有较短的有效期,当access_token超时后,可以使用refresh_token进行刷新,refresh_token拥有较长的有效期(7天、30天、60天、90天),当refresh_token失效的后,需要用户重新授权。

  请求https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN

   appid:公众号的唯一标识;grant_type=refresh_token不变;refresh_token:3中获取到的refresh_token。

  返回JSON数据:

{
   "access_token":"ACCESS_TOKEN",//网页授权接口调用凭证
   "expires_in":7200,//access_token接口调用凭证超时时间,单位(秒)
   "refresh_token":"REFRESH_TOKEN",//用户刷新access_token
   "openid":"OPENID",//用户唯一标识
   "scope":"SCOPE"//用户授权的作用域,使用逗号(,)分隔
}

4.拉取用户信息(需scope为 snsapi_userinfo)

请求方法:http:GET(请使用https协议)

https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

参数:access_token:3中的获取的网页授权接口调用凭证;openid:3中获取的用户openid;lang:返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语。

返回JSON:

{
   "openid":" OPENID",//用户的唯一标识
   " nickname": NICKNAME,//用户昵称
   "sex":"1",//用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
   "province":"PROVINCE",//用户个人资料填写的省份
   "city":"CITY",//普通用户个人资料填写的城市
   "country":"COUNTRY",//国家,如中国为CN
    //用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。
    "headimgurl":   "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",
    "privilege":[
    "PRIVILEGE1"
    "PRIVILEGE2"
    ],//用户特权信息,json 数组,如微信沃卡用户为(chinaunicom)
    "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"//只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段
}

附:用户特权信息:目前已知有微信沃卡用户:群组特权、表情特权、支付特权、流量特权和游戏特权(https://zhidao.baidu.com/question/583338933.html

微信网页授权获取用户信息等机制

上一篇:微信小程序,前端大梦想(五)


下一篇:微信开发