微信Access Token 缓存方法
微信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; }
微信Access Token 缓存方法的更多相关文章
- 使用缓存Memcache存储更新微信access token
关键字:Memcache access_token 更新 存储 7200 本文介绍如何使用缓存Memcache存储及更新 access token的方法. 一.Access Token access_ ...
- 微信公众平台开发(112) 自动更新微信access token
关键字:Memcache access_token 更新 存储 7200 本文介绍如何存储及更新 access token的方法. 一.Access Token access_token是公众号的全局 ...
- 微信access token过期
两台服务器使用同一个微信账号(同一个app id) 时,当其中一台服务器向微信请求access token时,会造成另一台服务器的access token过期
- C# v3微信 access token 过期处理的问题
//记录access token 申请时的时间 private static DateTime GetAccessToken_Time; /// <summary> /// 过期时间为72 ...
- Force.com微信开发系列(四)申请Access Token及自定义菜单之创建菜单
在微信接口开发中,许多服务的使用都离不开Access Token,Access Token相当于打开这些服务的钥匙,正常情况下会在7200秒内失效,重复获取将导致上次获取的Token失效,本文将首先介 ...
- .NET微信开发通过Access Token和OpenID获取用户信息
本文介绍如何获得微信公众平台关注用户的基本信息,包括昵称.头像.性别.国家.省份.城市.语言. 本文的方法将囊括订阅号和服务号以及自定义菜单各种场景,无论是否有高级接口权限,都有办法来获得用户基本信息 ...
- 微信开发-ACCESS TOKEN 过期失效解决方案
微信开发-ACCESS TOKEN 过期失效解决方案 起因:因为access_token的重要性,开发过微信的都知道,但是他有自己的生命周期,官方解释为:"有效期为7200秒",一 ...
- 微信公众平台开发(26) ACCESS TOKEN
本文介绍微信公众平台下Access Token的概念及获取方法. 一.Access Token access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token.正常 ...
- 微信公众平台开发视频教程-03-获取Access Token和获取微信服务器IP,添加微信菜单
1 获取access token 此token是以后每次调用微信接口都会带上的票据,token是公众号全局唯一票据,在调用其他接口之前都需要先得到token,taoken长度至少512个字符,通常用s ...
随机推荐
- 036 SQLContext和HiveContext
1.SqlContext SQLContext依赖SparkContext 功能:支持SparkSQL操作(不依赖Hive) SQLContext在一个JVM中默认允许存在多个 只有SQLContex ...
- Windows下CRF++进行中文人名识别的初次尝试
语料来自1998年1月份人民日报语料 1 语料处理 1.1 原始语料数据格式 语料中,句子已经被分词好,并且在人名后以“/”标注了“nr”表示是人名,其他非人名的分词没有进行标注 1.2 CRF++要 ...
- Could not resolve com.android.support:appcompat-v7:28.0.0 错误处理
20181008 总是出现错误 Could not resolve com.android.support:appcompat-v7:28.0.0 1.先是怀疑前些天降级了jdk 1.8 ,所以重 ...
- Ubuntu16.04 14.04 配置caffe(CPU only)
1.安装依赖 sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-seria ...
- C#泛型的抗变与协变
C#泛型的抗变与协变 学习自 C#本质论6.0 https://www.cnblogs.com/pugang/archive/2011/11/09/2242380.html Overview 一直以来 ...
- UOJ.26.[IOI2014]Game(交互 思路)
题目链接 \(Description\) 有一张\(n\)个点的图.M每次询问\((u,v)\),你需要回答图中\((u,v)\)间是否有边.如果M可以用\(<n(n-1)/2\)次询问确定图中 ...
- mySql---剖析InnoDB索引原理
摘要: 本篇为参考别人的文章(http://blog.csdn.net/voidccc/article/details/40077329) 1 各种树形结构 本来不打算从二叉搜索树开始,因为网上已经有 ...
- 使用Puppeteer进行数据抓取(四)——图片下载
大多数情况下,图片获取并不是很困难的事情,获取图片的url,然后模拟浏览器请求即可.但是,有的时候这种方法往往无法生效,常见的情形有: 动态图片,每次获取都是一个新的,例如图片验证码,重新获取时是一个 ...
- Booting dircetly into Redlink FW from flash
Booting dircetly into Redlink FW from flash Hello, the usual way to use the Redlink FW is a two-step ...
- Driving proportional valves from microcontroller
Driving proportional valves from microcontroller I am looking to drive a current regulated proportio ...