http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 11907|回复: 1

[学习交流] 微信开发中如何缓存access_token

[复制链接]
发表于 2016-2-29 14:46:50 | 显示全部楼层 |阅读模式
    我们平时在做微信开发时,微信的一些业务处理的基本条件就是你首先得获取access_token,得到access_token之后我们才能往下进行我们的业务逻辑,比如网页授权获取openid,微信分享通过access_token获取临时票据jsapi_ticket。     关于access_token的介绍,微信开发文档说的很清楚。   
     access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。(引自官网)
    如果第三方不使用中控服务器,而是选择各个业务逻辑点各自去刷新access_token,那么就可能会产生冲突,导致服务不稳定。(引自官网)
    大家具体可参考微信开发文档:http://mp.weixin.qq.com/wiki/15/54ce45d8d30b6bf6758f68d2e95bc627.html
    官网文档上说的很明确,简单点说就是,我们通过请求微信服务器特定url获取access_token一天之中是有限制的,我们需要自己在服务器上缓存这个access_token,并且需要在快要过期时再重新获取一下,保证我们微信接口的业务不受其影响。
    大家可参考我写的帖子微信分享和微信第三方登录的源码,http://www.sufeinet.com/thread-14404-1-1.html(微信分享sdk和demo)以及http://www.sufeinet.com/thread-14389-1-1.html(微信第三方登录sdk和demo)
    下面是global全局文件中,缓存access_token的逻辑。
[C#] 纯文本查看 复制代码
// 在应用程序启动时运行的代码
            string appid = "";
            string secret = "";
            WeiXin.ConfigGlobalCredential(appid, secret);
            //设置获取微信access_token缓存的设置和获取方法
            WeiXin.ConfigAccessTokenCache((credential) =>
            {
                CacheHelper.Insert("wxAccessToken", credential.access_token, credential.expires_in / 60 - 1);
            }, () =>
            {
                return CacheHelper.GetCache<string>("wxAccessToken");
            });

    通过上面代码看,是在设置缓存时将2h*60-1分钟来处理的,也就是说,当接口在调用access_token时,缓存过期了(此时也代表access_token也已经过期),我们就会重新再次请求微信服务器得到一个最新的继续缓存,如果没有过期,继续使用该access_token,这样就能保证不会造成重复调用获取access_token的接口而导致微信业务受限。   
    当然如果你是多台不同的服务器都同时访问同一个access_token,建议用一些例如Memcached来全局缓存,这样就可以解决不同服务器之间的调用了。






1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2016-3-1 13:13:58 | 显示全部楼层
这是我的
[C#] 纯文本查看 复制代码
private static string access_token;
        private static DateTime ataddtime = new DateTime(2015, 9, 29, 9, 0, 0);
        private static string jsapi_ticket;
        private static DateTime jtaddtime = new DateTime(2015, 9, 29, 9, 0, 0);

        /// <summary>
        /// 得到access_token
        /// </summary>
        /// <returns></returns>
        public static string GetAccess_token() {
            if (string.IsNullOrEmpty(access_token)) //如果token为空
            {//获取token
                access_token = xiaoxi.主功能.access_token.得到access_token(Tools.StaticValue.appid, Tools.StaticValue.AppSecret);
                ataddtime = DateTime.Now;
            }
            else {
                DateTime xian = DateTime.Now;
                TimeSpan time = xian - ataddtime;
                if (time.TotalSeconds > 7100) { //token是否快过期
                    //获取token
                    access_token = xiaoxi.主功能.access_token.得到access_token(Tools.StaticValue.appid, Tools.StaticValue.AppSecret);
                    ataddtime = DateTime.Now;
                }
            }
            return access_token;
        }
        /// <summary>
        /// 得到jsapi_ticket
        /// </summary>
        /// <returns></returns>
        public static string GetJsapi_ticket() {
            if (string.IsNullOrEmpty(jsapi_ticket)) //如果ticket为空
            {//获取token
                jsapi_ticket = xiaoxi.主功能.JSSDK.得到jsapi_ticket(GetAccess_token());
                jtaddtime = DateTime.Now;
            }
            else
            {
                DateTime xian = DateTime.Now;
                TimeSpan time = xian - jtaddtime;
                if (time.TotalSeconds > 7100)   //ticket是否快过期
                {
                    //获取ticket
                    jsapi_ticket = xiaoxi.主功能.JSSDK.得到jsapi_ticket(GetAccess_token());
                    jtaddtime = DateTime.Now;
                }
            }
            return jsapi_ticket;
        }
    }
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-4-18 10:21

© 2014-2021

快速回复 返回顶部 返回列表