博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信Access Token 缓存方法
阅读量:6195 次
发布时间:2019-06-21

本文共 2816 字,大约阅读时间需要 9 分钟。

微信Access Token默认缓存是2小时,但是需要特别强调,微信服务号和微信企业号缓存并不相同。

(1)微信公众号号:每次Http请求Access Token 系统会返回不同的Token,并附带超时时间,默认是2小时。

(2)微信企业号:每次请求Access Token,默认有效期为2个小时,在这2个小时内获取的Access Token是一样的。

对于微信公众号,我们通过txt存储每次获取的Access Token。换句话说,当缓存后,再次获取Access时,直接从txt里获取。代码如下:

private static string wxml = HttpContext.Current.Server.MapPath("~/app_data/access_token.txt");          public static string GetAccessToken()    {        string json = "";        DateTime dt = DateTime.Now;        if (!System.IO.File.Exists(wxml))        {
//txt不存在,创建 json = GetTokenFromURL(); } else { json = System.IO.File.ReadAllText(wxml); } //获取最后txt写入的时间 dt = System.IO.File.GetLastWriteTime(wxml); DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(AccessToken)); var mStream = new MemoryStream(Encoding.Default.GetBytes(json)); AccessToken token = (AccessToken)serializer.ReadObject(mStream); //_expires_in默认为 7200秒,也就是2小时,也就是access_token2小时即失效。为了保证可靠性,系统让access_tokey 1.5小时失效。 int minRefreshTimeSpan = 1800 - int.Parse(token.expires_in); // -5400秒 if (minRefreshTimeSpan > 0) { minRefreshTimeSpan = -1800; } if (dt < DateTime.Now.AddSeconds(minRefreshTimeSpan)) { GetTokenFromURL(); json = System.IO.File.ReadAllText(wxml); serializer = new DataContractJsonSerializer(typeof(AccessToken)); mStream = new MemoryStream(Encoding.Default.GetBytes(json)); token = (AccessToken)serializer.ReadObject(mStream); } return token.access_token; } private static string GetTokenFromURL() { string appid = AppID; string secret = AppSecret; string strUrl = Access_Token_URL; string json = HttpUtility.SendGetHttpRequest(strUrl); System.IO.File.WriteAllText(wxml, json); return json; }

 (2)对于企业微信AccessToken,可以使用单列模式存储

private   static DateTime _lastGetTimeOfAccessToken = DateTime.Now.AddSeconds(-7201);    private static string _AccessToken="";    public static string GetAccessToken()    {        if (_lastGetTimeOfAccessToken < DateTime.Now )        {            var rsEntity = new { access_token = "", expires_in = 0, errcode = 0, errmsg = "" };            string json = GetTokenFromURL();            DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(AccessToken));            var mStream = new MemoryStream(Encoding.Default.GetBytes(json));            AccessToken token = (AccessToken)serializer.ReadObject(mStream);             _lastGetTimeOfAccessToken = DateTime.Now.AddSeconds( int.Parse(token.expires_in) - 1);            _AccessToken = token.access_token;                   }        return _AccessToken;              }

 

转载地址:http://whuca.baihongyu.com/

你可能感兴趣的文章
12月流量入口占比动态:搜索引擎季军 份额破20%
查看>>
Citrix XenDesktop虚拟化桌面定期重启命令
查看>>
Android Checkbox在对话框中显示
查看>>
解决JfreeChart在linux系统下乱码问题
查看>>
准备学习一下移动网站开发
查看>>
KeyMob移动广告聚合平台服务_广告聚合平台_工具
查看>>
Linux 下 项目管理
查看>>
Steve Souders 高性能网站建设指南14条提升网站页面速度的最佳实践(1)
查看>>
ORA-00932: 数据类型不一致: 应为 NUMBER, 但却获得 BINARY
查看>>
YMP开发框架快速上手(一)
查看>>
Oracle11g RAC下ASM 的管理与维护
查看>>
centos 安装ftp
查看>>
android 简单的 左右上下手势 判断
查看>>
CSS重置, 批量设置指定所有类型控件的CSS风格
查看>>
成为JavaGC专家Part I — 深入浅出Java垃圾回收机制
查看>>
linux 配置软连接的需要注意的一个问题
查看>>
如何对system.img和userdata.img解包,再重新打包
查看>>
都是 HBase 上的 SQL 引擎,Kylin 和 Phoenix 有什么不同?
查看>>
zookeepr集群环境搭建
查看>>
java.util.concurrent.CountDownLatch用方法
查看>>