微信全局获取并缓存Accesstoken的值
由于本项目中使用自定义菜单接口、获取用户信息接口、用户分组接口、消息发送接口等,都需要传入一个相同的参数access_token,其有效期 是7200秒(两小时),在有效期内可以使用,一旦access_token过期,需要重新通过调用微信接口获取。目前微信接口上面获取 access_token每日限额为2000次,如果Oauth2.0授权、发送主动消息、获取用户信息、群发信息之前都去获取,必然会达到该接口的频率 限制,因此需要把获取到的access_token存储起来,然后设置有效期,在有效期过期后再去获取,以保证access_token实时的有效性。详 细代码如下:
a. 新建xml文件,命名为XMLToken.xml。
<?xml version="1.0" encoding="utf-8"?>
<xml>
<AccessToken></AccessToken>
<AccessExpires></AccessExpires>
</xml>
b. AccessToken实体结构如下:
public class AccessToken
{
public stringaccess_token { get; set;}
public int expires_in{ get; set; }
}
c. 获取AccessToken()和getJson()方法如下:
public AccessTokenGetAccessToken(string CorpId, string Secret)
{
string str_accessToken ="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid="+ CorpId +"&corpsecret=" +Secret;
string accessToken = GetJson(str_accessToken);
AccessToken getAccessToken =js.Deserialize<AccessToken>(accessToken);
return getAccessToken;
}
public stringGetJson(string url)
{
WebClient wc = newWebClient();
wc.Credentials = CredentialCache.DefaultCredentials;
wc.Encoding = Encoding.UTF8;
string returnText = wc.DownloadString(url);
if (returnText.Contains("errcode"))
{
//可能出错
}
return returnText;
}
d. 校验AccessToken是否过期方法 GetExistAccessToken()如下:
public stringGetExistAccessToken()
{
string filepath = System.Web.HttpContext.Current.Server.MapPath("XMLToken.xml");
StreamReader str = newStreamReader(filepath ,System.Text.Encoding.UTF8);
XmlDocument xml = newXmlDocument();
xml.Load(str);
str.Close();
str.Dispose();
string token = xml.SelectSingleNode("xml").SelectSingleNode("AccessToken").InnerText;
string time = xml.SelectSingleNode("xml").SelectSingleNode("AccessExpires").InnerText;
if (string.IsNullOrEmpty(token)||string.IsNullOrEmpty(time))
{
AccessToken getAccessToken =GetAccessToken(str_CorpId, str_Secret);
xml.SelectSingleNode("xml").SelectSingleNode("AccessToken").InnerText =getAccessToken.access_token;
DateTime _accessExpires =DateTime.Now.AddSeconds(getAccessToken.expires_in);
xml.SelectSingleNode("xml").SelectSingleNode("AccessExpires").InnerText =_accessExpires.ToString();
xml.Save(filepath);
token = getAccessToken.access_token;
}
else if (!string.IsNullOrEmpty(token) || !string.IsNullOrEmpty(time))
{
DateTime AccessExpires =Convert.ToDateTime(time);
if (DateTime.Now> AccessExpires)
{
AccessToken getAccessToken =GetAccessToken(str_CorpId, str_Secret);
xml.SelectSingleNode("xml").SelectSingleNode("AccessToken").InnerText =getAccessToken.access_token;
DateTime _accessExpires =DateTime.Now.AddSeconds(getAccessToken.expires_in);
xml.SelectSingleNode("xml").SelectSingleNode("AccessExpires").InnerText =_accessExpires.ToString();
xml.Save(filepath);
token = getAccessToken.access_token;
}
}
return token;
}
微信全局获取并缓存Accesstoken的值的更多相关文章
- Spring Boot中微信全局token的缓存实现
为什么要缓存token? 这里的token指的是微信JSAPI中基础支持的ACCESS_TOKEN,并非网页授权ACCESS_TOKEN.网页授权Token每天的调用次数没有限制,不需要缓存. 接口 ...
- 微信公众号的搭建-第四天(2)-获取并缓存access_token
1. 什么是access_token? 为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台 开放了许多接口,包括自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等 ...
- 单例设计模式全局缓存accessToken
使用微信JS-SDK开发的小伙伴们,看文档经常会看到这样一句话:(下面是微信开发文档的一部分原话截图) 这句话就是:开发者必须在自己的服务全局缓存access_token,jsapi_ticket 下 ...
- php开发微信支付获取用户地址
http://mp.weixin.qq.com/s/uNpWE_Z5RZ48PDIWkmGBYQ 使用微信获取地址信息是和微信支付一道申请的,微信支付申请通过,就可以使用该功能. 微信商城中,使用微信 ...
- 如何获取byte的各个bit值以及常见位操作
项目中通过信号采集板的数据获取车上仪表盘指示灯的信息,将接收到的数据转成byte后,还要将每一个Byte的各个Bit值分离出来,这样才知道每个bit的值代表的具体信息.这里记录下如何获取byte的各个 ...
- [转] Android进阶——安卓接入微信,获取OpenID
PS: sendAuthRequest拿到code,通过code拿到access_token和openId,access_token可以拿到用户的信息 http://blog.csdn.net/hao ...
- 转:微信开发获取地理位置实例(java,非常详细,附工程源码)
微信开发获取地理位置实例(java,非常详细,附工程源码) 在本篇博客之前,博主已经写了4篇关于微信相关文章,其中三篇是本文基础: 1.微信开发之入门教程,该文章详细讲解了企业号体验号免费申请与一 ...
- 绑定微信以及获取openId
由于公司最近在做一个微信公众号的项目,需要获取用户openId,我再一次踏入了微信的坑! 先在这里告诫后来的同志,如果一样要开始做有关微信的东西,最好是有前辈,或者直接看完文档,不懂或者纳闷的地方直接 ...
- 微信授权获取用户openid前端实现
近来,倒霉的后台跟我说让我拿个openid做微信支付使用,寻思很简单,开始干活. 首先引导用户打开如下链接,只需要将appid修改为自己的就可以,redirect_url写你的重定向url h ...
随机推荐
- MathType如何插入连乘
这个就是连乘符号,只不过看着不习惯......就在眼皮子底下.
- Plplot中line width 问题
Plplot延续了Pgplot的设计风格,线的宽度函数plwid(int width)只能用整型变量,不能精确控制线宽.用pscairo画出的曲线总是太粗,这是plplot一个很老的问题(issue) ...
- Kubernetes master节点的高可用配置
了解Kubernetes架构都知道Master节点在整个集群中的位置,为了保证整个架构的高可用,Kubernetes提供了HA的架构,处于兴趣和对架构的进一步了解,我在自己的电脑实践以下. 环境: C ...
- Kubernetes dashboard集成heapster
图形化展示度量指标的实现需要集成k8s的另外一个Addons组件: Heapster . Heapster原生支持K8s(v1.0.6及以后版本)和 CoreOS ,并且支持多种存储后端,比如: In ...
- 函数指针&指针函数
https://blog.csdn.net/luoyayun361/article/details/80428882
- javascript快速入门5--数组与对象
数组 数组,实际上就是将一大堆相似的数据有秩序的放在格子箱中,十分像药房里的那些柜子. 数据1 数据2 数据3 数据4 数据5 数据6 用代码创建数组 var arr = new Array();// ...
- Druid对比Hadoop
Druid对比Hadoop Hadoop 向世界证明, 花费很少的钱实现典型的解决方案, 将数据保存在一般的商用机器的数据仓库里是可行的. 当人们将自己的数据保存在Hadoop, 他们发现两个问题 ...
- Docker解析及轻量级PaaS平台演练(一)--Docker简介与安装
Container技术: 传统的虚拟化技术: 通过对硬件层模拟,从而实现了能够在一套硬件上面运行多个操作系统,因为通过硬件虚拟化,使得操作系统认为在它之下就是硬件层 但是实际情况是这样的:虚拟机中的O ...
- Spark Streaming揭秘 Day1-三大谜团
Spark Streaming揭秘 Day1 三大谜团 引子 在Spark的众多组件中,Streaming最接近企业级应用程序,学习Spark Streaming,是掌握大数据技术的一条捷径.今天是第 ...
- 【重点突破】—— Vue2.0 transition 动画Demo实践填坑
前言:vue1.0版本和2.0版本的过渡系统改变是很大的,具体请详看文档介绍.本文转载自郭锦荣的博客,一共列举了四种transition的使用实践,分别是css过渡.css动画.javascript钩 ...