微信公众号接口访问凭证access_token获取机制

1:在web,xml中配置servlet

   
        initServlet  
          
            com.wizincloud.wx.manager.InitServlet  
          
          
          
            appid  
            wxee1894c6b5a44b8e  
          
          
            appsecret  
            7a938414e38c9f007608c40bbb6478fc  
          
        0  
      

配置了appid(应用ID)和appsecret(应用秘钥)。


2:servlet实现

/**
 * InitServlet.java
 * 创建:刘彦亮 2015年5月5日
 */
package com.wizincloud.wx.manager;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

/**
 * @author liuyanliang
 * 
 */
public class InitServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public void init() throws ServletException {
		// 获取web.xml中配置的参数
		TokenThread.appid = getInitParameter("appid");
		TokenThread.appsecret = getInitParameter("appsecret");

		System.out.println("weixin api appid=" + TokenThread.appid);
		System.out.println("weixin api appsecret=" + TokenThread.appsecret);

		// 未配置appid、appsecret时给出提示
		if ("".equals(TokenThread.appid) || "".equals(TokenThread.appsecret)) {
			System.out
					.println("appid and appsecret configuration error, please check carefully.");
		} else {
			// 启动定时获取access_token的线程
			new Thread(new TokenThread()).start();
		}
	}

}

3:获取access_token的线程

/**
 * TokenThread.java
 * 创建:刘彦亮 2015年5月5日
 */
package com.wizincloud.wx.manager;

import com.wizincloud.wx.bean.AccessToken;
import com.wizincloud.wx.util.WeixinUtil;

/**
 * @author liuyanliang
 * 
 */
public class TokenThread implements Runnable {
	// 第三方用户唯一凭证
	public static String appid = "";
	// 第三方用户唯一凭证密钥
	public static String appsecret = "";
	public static AccessToken accessToken = null;

	public void run() {
		while (true) {
			try {
				accessToken = WeixinUtil.getAccessToken(appid, appsecret);
				if (null != accessToken) {
					System.out.println("获取access_token成功,有效时长="
							+ accessToken.getExpiresIn()
							+ ",token="+accessToken.getToken());
					// 休眠7000秒
					Thread.sleep((accessToken.getExpiresIn() - 200) * 1000);
				} else {
					// 如果access_token为null,60秒后再获取
					Thread.sleep(60 * 1000);
				}
			} catch (InterruptedException e) {
				try {
					Thread.sleep(60 * 1000);
				} catch (InterruptedException e1) {
					e1.printStackTrace();
				}
			}
		}
	}
}


你可能感兴趣的:(微信公众号接口访问凭证access_token获取机制)