评论

对微信公众号Access_Token的一点心得

要啥简介,要啥自行车

Access_Token: 基于Token的认证模式,允许应用访问一个资源 API,利用Access_Token调用微信相关的 API(有时效性,有效期是7200秒(两小时),每次申请的token都是随机的157位字符串)

Access_Token详解与使用流程

相关文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html

一种是普通的Access_Token(立于公众号)

这种Access_Token,是公众号的全局唯一接口调用凭据,有效时间两个小时,公众号调用各接口时都需使用Access_Token,一个公众号每天获取它的次数上限是2000次

官方建议:

公众号开发者使用中控服务器统一限制IP调用,获取,(主动)刷新Access_Token,其他业务逻辑服务器所使用的access_token均来自于该中控服务器,不应该各自去刷新,否则容易造成冲突

导致Access_Token覆盖而影响业务

PS:刷新Access_Token后公众平台后台会保证在5分钟内,新老access_token都可用,保证第三方业务的平滑过渡

接口:

【GET】 https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

响应:{"access_token":"ACCESS_TOKEN","expires_in":7200}

使用举例:

创建公众号菜单API接口:【POST】 https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN

另一种是网页授权Access_Token

通过OAuth2.0机制实现的,在用户授权给公众号后,公众号可以获取到一个网页授权特有的接口调用凭证(网页授权access_token),通过网页授权access_token可以进行授权后接口调用,如获取用户基本信息

流程:

第一步:用户登录公众号进入设置,需要配置网页授权的跳转域名,(填写域名,下载txt,放于域名根目录,完成)

第二步:用户同意授权,获取code

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

常用的参数:

redirect_uri:重定向页面路径(注意:必须现在公众号号管理页设置网页域名,如果你是测试号,下边会后配置的地方以供测试,不配置将会返回redirect_uri域名与后台配置不一致

state:重定向后会带上 state 参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节(白话就是你想在跳转路径后加参数,那就付给state参数,跳转后获取state参数即可)

scope:该字段表示授权作用域,snsapi_base吧(不弹出授权页面,直接跳转,只能获取用户openid,也就是常说的静默授权),snsapi_userinfo (弹出授权页面,可通过 openid 拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息,也就是非静默授权或显式授权。注意:微信调整了开发者在网页中在不规范使用发起 snsapi_userinfo 网页授权时,微信将默认打开网页快照页模式进行基础浏览。 能力调整将于 2022年7月12日24时生效,此时会有用户扫码进入授权后页面时获取的用户openId为虚拟openId,对后面一些业务会有影响)

第三步:通过code换取网页授权access_token

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

返回的Access_Token既是网页授权的Access_Token

里面的refresh_token(refresh_token有效期为30天,当refresh_token失效之后,需要用户重新授权,这个参数下一步会用到)

第四步:刷新access_token(如果需要)

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

参数中REFRESH_TOKEN,在上一步可获取到

第五步:拉取用户信息(需 scope 为 snsapi_userinfo)

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

(这里有坑了。自2022年7月12日24时,实际上提前了好几个小时,到账前面openId为虚拟openId,后面查的用户昵称“微信用户”,头像为一张白的默认头)

校验Access_Token有没有混淆

接口:【GET】 https://api.weixin.qq.com/sns/auth?access_token=ACCESS_TOKEN&openid=OPENID


最后吐槽一下发帖的排版,咋看咋别扭.....

最后一次编辑于  2022-07-15  
点赞 1
收藏
评论

2 个评论

  • yo木
    yo木
    2022-12-30

    您好,我想问一下,有没有校验token失效的 api 我公司业务现在经常导致 测试环境和生产环境的token互相覆盖

    2022-12-30
    赞同
    回复
  • 从言䠶聲
    从言䠶聲
    2022-08-11

    关于快照导致OpenId 串号您有碰到吗


    2022-08-11
    赞同
    回复 1
    • 䜗涧
      䜗涧
      2022-09-18
      如果不要求获取用户昵称和头像,静默获取openId即可,反之写一个微信授权页面显式获取用户信息也可以
      2022-09-18
      回复
登录 后发表内容