access_token类型
1. 普通的获取用户信息,只需要调用微信用户信息接口就能获取,因而使用的是第一种普通的access_token。
2. 网页授权时获取微信用户信息,用的就是第二种,网页授权access_token。
两种access_token混淆的话就会有 “invalid access_token” 的错误。
要注意的是,第一种
普通的access_token是全局性的,就是说一旦重新调用接口获取一个新的普通的access_token,之前的那个旧的普通的access_token就会失效,因而用旧的普通的access_token就无法成功地调用相关的接口。所以这种特性可能会导致一些情况,比如说,多个不同的进程独立的去获取这种普通的access_token,就会导致有些接口没办法正常地调用相关的微信接口。一般的话,可以用定时器定时地更新access_token,或者将其缓存在缓存或者数据库当中,设置失效时间,在缓存当中找不到或者已经失效的情况下,再通过接口重新获取的方式来解决类似的问题。
网页授权access_token
微信网页授权是通过OAuth2.0机制实现的,在用户授权给公众号后,公众号可以获取到一个网页授权特有的接口调用凭证(网页授权access_token),通过网页授权access_token可以进行授权后接口调用,如获取用户基本信息。
code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。
通过code换取网页授权access_token
如果网页授权的作用域为snsapi_base,则本步骤中获取到网页授权access_token的同时,也获取到了openid,snsapi_base式的网页授权流程即结束。
具体是将上步获取到的code值传给下面的链接,即替换code=CODE中的CODE。
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
刷新access_token
由于access_token拥有较短的有效期,当access_token超时后,可以使用refresh_token进行刷新,refresh_token有效期为30天,当refresh_token失效之后,需要用户重新授权。
具体做法:利用上步获取到的refresh_token来重新授权。
https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
链接中的参数只需要将REFRESH_TOKEN替换成上一步获取到的access_token值,APPID换成自己公众号的appid就可以重新获得授权。返回的参数和上一步获取access_token返回的参数一样,都是那五种。
利用access_token获取用户信息
如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了。
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
详见微信开发文档
利用普通access_token获取用户信息
在关注者与公众号产生信息交互后,公众号可获得关注者(注意:用此种方法获取用户信息,前提是用户必须关注公众号)的openid(加密后的微信号,每个用户对每个公众号的openid是唯一的)。公众号可通过本接口来根据openid获取用户基本信息,包括昵称、头像、性别、所在城市、语言和关注时间。
调用接口https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN,请求方式为GET。
评论区