微信全局获取并缓存Accesstoken的值

原创 2015年08月25日 17:46:09

由于本项目中使用自定义菜单接口、获取用户信息接口、用户分组接口、消息发送接口等,都需要传入一个相同的参数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;

        }

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

微信公众号开发之用户分组

微信公众号开发之用户分组

微信公共平台接口开发--Java实现

Java微信实现,采用SpringMVC 架构,采用SAXReader解析XML @RequestMapping(value="/extend") public class WeixinCon...

微信公众号【用户分组管理-web页面】

人生的意志和劳动将创造奇迹般的奇迹。Model层实体类: public class UserList { public string total { get; set; }...
  • WuLex
  • WuLex
  • 2016-10-08 11:04
  • 1621

JAVA利用HttpClient进行POST请求(HTTPS)

目前,要为另一个项目提供接口,接口是用HTTP URL实现的,最初的想法是另一个项目用JQuery post进行请求。 但是,很可能另一个项目是部署在别的机器上,那么就存在跨域问题,而JQuery的...

Java版微信公共号开发之分组管理接口

开发者可以使用接口,对公众平台的分组进行查询、创建、修改操作,也可以使用接口在需要时移动用户到某个分组。

“工作流”与“业务流程管理”两个领域的关系

一、什么是工作流?    1)从工作流业务范畴角度    企业的经营管理如同太空中的行星一样有自己的轨道,遵循一定的规律;也就是说企业在经营管理过程中,其业务受外部社会环境、市场环境以及企业自身内部环...

微信公众号入门笔记(四)获取access_token

作者:zhutulang   以下是微信公众平台开发者文档中截取的内容:   access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。开发者需要进行...

java版实时获取access_token

java版微信公众号开发之实时获取access_token

微信公共平台开发接口(二)

是不是在关注了有些订阅号或者服务号之后,马上会收到一条消息。什么回复1,怎样怎样;回复2,怎样怎样之类的。 拿我自己的博客举例,我的关注语是:     感谢您关注AndyYang个人博客微信小助手...
  • ycdyx
  • ycdyx
  • 2014-04-27 12:49
  • 615
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)