zoukankan      html  css  js  c++  java
  • 微信全局获取并缓存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;

            }

  • 相关阅读:
    VMWare安装Solaris虚拟机的网络设置
    PeopleTools预警程序制作
    listener.ora增加监听端口
    用.Net Mage工具更新WPF ClickOnce应用程序部署清单
    基本测试方法用例场景
    Qt Vs msvc debug版本没有问题但release版本出现异常
    Qt 打包release发布问题
    Qt 鼠标悬浮按钮上出现浮窗效果
    Qt 样式对于QPushbutton 增加 hover press release效果
    阿里云ECS无法通过SSL远程链接问题。
  • 原文地址:https://www.cnblogs.com/superstar/p/5159936.html
Copyright © 2011-2022 走看看