微信开发笔记之缓存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超时现象。。。。

你可能感兴趣的:(微信开发)