微信网页受权

背景

用户在微信客户端中访问第三方网页,公众号能够经过微信网页受权机制,来获取用户基本信息,进而实现业务逻辑。html

配置

  1. 在微信公众号请求用户网页受权以前,开发者须要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页账号 - 网页受权获取用户基本信息”的配置选项中,修改受权回调域名。请注意,这里填写的是域名(是一个字符串),而不是URL,所以请勿加 http:// 等协议头;json

  2. 受权回调域名配置规范为全域名,好比须要网页受权的域名为:www.qq.com,配置之后此域名下面的页面http://www.qq.com/music.htmlhttp://www.qq.com/login.html 均可以进行OAuth2.0鉴权。但http://pay.qq.comhttp://music.qq.comhttp://qq.com没法进行OAuth2.0鉴权api

两种受权方式

微信提供了两种受权方式来应对不一样的使用场景。经过网页受权做用域 scope 参数控制。微信

静默受权

  1. 静默受权:用户进入页面后自动受权并跳转回页面,这种受权对用户无感知。经过这种受权咱们只能获取到用户的 openid,没法得到用户的其余信息。
  2. 使用场景:只须要标识该用户,而不须要收集其余信息的场景均可以使用。好比投票、点赞等场景。
  3. scope: snsapi_base

主动受权

  1. 主动受权:用户进入页面后会有受权弹窗,须要手动赞成。该方试用来获取用户的基本信息
  2. 注意:对于已关注公众号的用户,用户从公众号的会话或者自定义菜单进入本公众号的网页受权页,即便是scope: snsapi_userinfo,也是静默受权,用户无感知。
  3. scope: snsapi_userinfo

具体流程

  1. 用户进入页面,获取 code
  2. 经过 code 换取网页受权 access_tokenopenid,静默受权到这步结束
  3. 经过 access_token 获取用户信息

获取CODE

引导用户跳传至该连接app

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

用户赞成受权或静默受权后将跳转至 redirect_url?code=CODE&state=STATE 这个地址并带上生成的 codecode

code 做为换取access_token的票据,只能使用一次,5分钟未使用自动过时。htm

参数说明blog

经过 code 换取网页受权 access_token

注意,这里的 access_token调用公众平台API所需的基础 access_token不是一个东东,只是名字同样而已。token

这一步是在服务端完成的,须要公众号的 secretaccess_token 也不能够传给客户端。

请求接口

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

返回

{ 
  "access_token":"ACCESS_TOKEN",
  "expires_in":7200,
  "refresh_token":"REFRESH_TOKEN",
  "openid":"OPENID",
  "scope":"SCOPE" 
}

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

当网页受权做用域为 snsapi_userinfo时,开发者经过 access_tokenopenid 获取用户信息。

请求接口

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

返回

{    
  "openid": "OPENID",
  "nickname": "NICKNAME",
  "sex": "1",
  "province": "PROVINCE"
  "city": "CITY",
  "country": "COUNTRY",
  "headimgurl":    "http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",
  "privilege": [ "PRIVILEGE1" "PRIVILEGE2"     ],
  "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}

参考资料

微信网页受权官方文档

文章首发:https://www.jianshu.com/u/13cd86311525

相关文章
相关标签/搜索