微信开发笔记之缓存access_token

官方解释:access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。

使用redis缓存access_token、定时任务采用spring quartz。
逻辑见代码
更新access_token代码

/**
     * 
     * @Title: updateAccessToken 
     * @Description: 供 定时任务更新 AccessToken,同时更新 JsAPITicket
     * @return
     * @throws 
     * @author 
     */
    public synchronized boolean updateAccessToken()  throws Exception{
        boolean updateRes = Boolean.FALSE;
        try {

            for (int i = 0; i < WeiXinConstants.WEIXIN_CACHE_RETRY; i++) {
                String accessTokenFromWeixin = getAccessTokenFromWeiXin();
                String jsApiTicketFromWeiXin = this.getJsApiTicketFromWeiXin(accessTokenFromWeixin);
//放入缓存              cacheManager.set(WeiXinConstants.WEIXIN_CACHE_KEY_ACCESS_TOKEN, accessTokenFromWeixin);
                cacheManager.set(WeiXinConstants.WEIXIN_CACHE_KEY_JS_API_TICKET, jsApiTicketFromWeiXin);
                updateRes = Boolean.TRUE;
                if(updateRes){
                    break;
                }
            }

        } catch (Exception e) {
            logger.error("定时任务更新 微信 端 access token 和 js api ticket 异常:",e);
            throw e;
        }

        return updateRes;
    }

从缓存中获取access_token

/**
     * @Title: getAccessToken 
     * @Description: 获取 微信 AccessToken
     * @return
     * @throws 
     * @author
     */
    public String getAccessToken()  throws Exception{
        String accessToken = "";
        try {
            accessToken =  cacheManager.getString(WeiXinConstants.WEIXIN_CACHE_KEY_ACCESS_TOKEN);
            if(StringUtils.isBlank(accessToken)){
                this.updateAccessToken();
                accessToken =  cacheManager.getString(WeiXinConstants.WEIXIN_CACHE_KEY_ACCESS_TOKEN);
            }
        } catch (Exception e) {
            logger.error(" 获取 微信 AccessToken 异常:",e);
            throw e;
        }

        return accessToken;
    }

Spring quartz 的频率刚开始定为1小时一次,后代码中出现access_token 超时现象,最后检查代码未发现其他地方直接去微信服务器拿token的【因为只有从微信服务器端拿过后,缓存中token就会失效】,后又把定时频率调整为半小时一次,24X2=48,每天才48次,未出现access_token超时现象。。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值