access_token存入本地

来源:2-3 access_token的获取(下)

慕粉3254756

2016-06-15 22:55

怎么把access_token本地存写

写回答 关注

2回答

  • 6的
    2018-07-18 23:50:40

    您好  这两个方法该写在哪个类中呢

  • 忽职守
    2016-06-17 10:32:27

    我找到了一个方法,亲测有效的:

    写一个server  然后启动一个线程,线程里面定义一个全局静态变量,线程定时运行获取access_token,然后放到内存中,取的时候通过这个静态变量取就可以了。

    jar包自己找吧

    servlet----------
    public class InitServlet extends HttpServlet {    
        private static final long serialVersionUID = 1L;    
        private static Logger log = LoggerFactory.getLogger(WeixinUtil.class);
       
        public void init() throws ServletException {    
            // 获取web.xml中配置的参数 ,并初始化TokenThread.java中静态变量appid和appsecret
            TokenThread.appid = getInitParameter("appid");    
            TokenThread.appsecret = getInitParameter("appsecret");
            
            // web.xml未配置appid、appsecret时给出提示    
            if ("".equals(TokenThread.appid) || "".equals(TokenThread.appsecret)) {    
                log.error("请在web.xml的InitServlet中设置appid、appsecret参数"); 
            } else {
                // 启动定时获取access_token的线程    
                new Thread(new TokenThread()).start();
            }    
        }    
    }
    注意在web.xml配置参数appid ,appsecret


    线程=-----------
    public class TokenThread implements Runnable {
    	private static Logger log = LoggerFactory.getLogger(TokenThread.class);
    	// 第三方用户唯一凭证,从InitServlet中赋值
    	public static String appid = "";
    	// 第三方用户唯一凭证密钥,从InitServlet中赋值
    	public static String appsecret = "";
    	public static AccessToken accessToken = null;
    	public void run(){
    		/**
    		 *定期获取token
    		 */
    		while (true) {
    			try {
    				//调用公众平台接口获取access_token;
    				accessToken = WeixinUtil.getAccessToken(appid,appsecret);
    				if (null != accessToken) {
    					log.info("获取access_token成功,有效时长{}秒 token:{}", accessToken.getExpiresIn(), accessToken.getToken());
    					// 休眠7000秒  
    					Thread.sleep((accessToken.getExpiresIn() - 200) * 1000);
    				} else {
    					// 如果access_token为null,60秒后再获取
    					Thread.sleep(60 * 1000);
    				}
    			} catch (InterruptedException e) {
    				try {
    					Thread.sleep(10 * 1000);
    				} catch (InterruptedException e1) {
    					System.out.println();
    				}
    				System.out.println();
    			}
    		}
    	}
    }
    
    
    其他类中取值:String token = TokenThread.accessToken.getToken();


    6的

    我的第16行getAccessToken(appid,appsecret);报这个错,没找出来:The method getAccessToken() in the type WeixinUtil is not applicable for the arguments (String, String)

    2018-07-20 10:57:40

    共 3 条回复 >

Java微信公众号开发进阶

Java微信公众号开发的进阶课程,在入门的基础上更加深入

87757 学习 · 226 问题

查看课程

相似问题