前言
了不起学弟:了不起,我最近在学习开发一个小程序。
了不起:哟,不错哦,都在开发小程序了?
了不起学弟:哈哈哈是啊,最近的学习进度还是可以的。
了不起:可以,那调用接口方面感觉怎么样啊?
了不起学弟:额。。我有时候调成功,有时候会报access_token过期。
了不起小面:原来是这个问题啊,那我就来指导你一下吧。
正文
为什么要用access_token?:
access_token就是接口调用凭据,必须要有,才可以去调用接口。如果没有那就会拒绝请求。开发小程序,接口调用凭证是必须要的,他的有效期是7200秒,也就是两个小时。
如何获取access_token?:
GET https://api.weixin.qq.com/cgi-bin/token
我们调用这个链接就行,参数就是小程序的appid和secret,就是小程序的唯一凭证和唯一凭证秘钥。获取这个需要成为小程序的开发者才能获取。出参就是access_token 和 expire_in 有效时间。
如何定时刷新access_token?:
我们为何要定时刷新?因为access_token的有效期是2个小时,过了有效期,那这个凭证就会失效。同时如果凭证还没过期,再次获取凭证后,旧凭证就会在五分钟之后过期。在五分钟之内,新旧凭证都可以使用。在多个业务服务下,各服务需要维护一个access_token,不可以自己去刷新自己的,避免服务调用微信接口失败。
聊到这,大家就可以思考一下,我们需要做的是 定期获取+统一维护。小面给大家一个可实践的方案:我们使用定时任务去刷新access_token,然后使用redis分布式锁去维护同一个access_token。在多个服务下,使用redis分布式锁去维护一个access_token,这样子就可以避免自己调用自己的而造成的冲突。然后可以去使用quartz去定时任务刷新redis维护的access_token,比如一小时50分钟刷新一次,记得如果获取失败需要再重新调用一下。
这样子通过这两个技术手段,我们就可以维护一个24小时都没问题的access_token。小面在这里建议:还需要在你的管理后台去写一个获取access_token的接口,以防各种问题导致的获取access_token失败,最终redis里面的access_token都失效了,还没有获取到access_token。这样子不管是因为网络等原因导致的获取access_token失败,还是access_token失效期更新,我们都可以去手动执行一次定时任务去解决这个问题。
同时微信也有免维护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 }
问问chatgpt如何评价Accesstoken机制?:
微信开发的access token机制是一种用于验证开发者身份和访问微信公众平台接口的机制,具有以下优点和缺点:
优点:
- 简单易用:微信提供了简单易用的API,使开发者可以通过简单的HTTP请求获取access token。
- 自动续期:微信的access token有效期为2小时,但微信提供了自动续期机制,开发者无需手动维护access token的有效期。
- 安全性高:access token是通过appid和appsecret进行验证,保证了开发者身份的安全性。
缺点:
- 有效期短:access token的有效期仅为2小时,需要开发者不断地获取和更新。
- 并发限制:微信对每个公众号的access token并发请求进行了限制,如果请求过于频繁就会被封禁。
- 依赖网络:微信的access token机制依赖于网络,如果网络不稳定或者中断,将无法获取access token,影响业务正常运行。
总的来说,微信开发的access token机制在保证安全性和简单易用性的前提下,存在一些缺点需要开发者注意和解决。
总结
微信开发第一步,学会维护access_token~