微信accesstoken缓存处理

微信accesstoken

/**
 * AccessToken缓存处理
 * 
 */

public class AccessTokenCache {
	//主动调用的access_token
	public static String access_token;
	//主动调用的请求时间
	public static Date access_token_date;
	//token的有效时间,默认7200,用于判断是否超时,考虑网络延迟是的减小
	public static long accessTokenInvalidTime=7200L;
	
	/**
	 * 
	 * @param corpId 企业号id
	 * @param corpsecret 管理组ID
	 * @return
	 */
	public static String getTokenFromWx(String corpId,String corpsecret){
		String token="";
		//判断当前已有access_token是否有效
		if(null==access_token||"".equals(access_token)||(new Date().getTime()-access_token_date.getTime())>=(accessTokenInvalidTime-200L)){
			//获取新的access_token
			CloseableHttpClient httpclient = HttpClients.createDefault();
			try{
				//创建httpget实例
				HttpGet httpget = new HttpGet("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid="+corpId+"&corpsecret="+corpsecret);
				//创建响应函数
				ResponseHandler<JSONObject> response=new ResponseHandler<JSONObject>() {
					public JSONObject handleResponse(final HttpResponse response)throws ClientProtocolException,IOException{
						//获取请求返回状态
						int status=response.getStatusLine().getStatusCode();
						if(status>=200&&status<300){
							HttpEntity entity=response.getEntity();
							if(null!=entity){
								String result=EntityUtils.toString(entity);
								JSONObject resultObj=JSONObject.fromObject(result);
								return resultObj;
							}else{
								return null;
							}
						}else{
							throw new ClientProtocolException("Unexpected response status: "+status);
						}
					}
				};
				//发送请求,并获取返回信息,其中httpget为请求内容,response为响应函数
				JSONObject responseBody=httpclient.execute(httpget,response);
				if(null!=responseBody&&null!=responseBody.get("access_token")){
					token=(String)responseBody.get("access_token");
					accessTokenInvalidTime=Long.valueOf(responseBody.get("exppires_in")+"");
					access_token=token;
					access_token_date=new Date();
				}
				httpclient.close();
			}catch (Exception e) {
				// TODO: handle exception
			}
		}else{
			token=access_token;
		}
		return token;
	}
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是获取企业微信accesstoken的Java方法,使用Redis缓存缓存时间为1.5小时: ```java import redis.clients.jedis.Jedis; public class AccessTokenManager { // 企业微信应用ID private final static String APP_ID = "your_app_id"; // 企业微信应用的secret private final static String APP_SECRET = "your_app_secret"; // Redis缓存的key值 private final static String REDIS_KEY = "access_token"; // Redis缓存缓存时间,单位:秒 private final static int CACHE_TIME = 5400; //即1.5小时 /** * 获取企业微信accesstoken * * @return accesstoken */ public static String getAccessToken() { // 先从缓存中获取 String accessToken = getCacheAccessToken(); if (accessToken == null) { // 缓存没有,则重新获取 accessToken = getNewAccessToken(); // 将新的accesstoken缓存到Redis中 setCacheAccessToken(accessToken); } return accessToken; } /** * 从缓存中获取accesstoken * * @return accesstoken */ private static String getCacheAccessToken() { Jedis jedis = null; String accessToken = null; try { jedis = new Jedis("localhost"); accessToken = jedis.get(REDIS_KEY); } catch (Exception e) { e.printStackTrace(); } finally { if (jedis != null) { jedis.close(); } } return accessToken; } /** * 将accesstoken缓存到Redis中 * * @param accessToken accesstoken */ private static void setCacheAccessToken(String accessToken) { Jedis jedis = null; try { jedis = new Jedis("localhost"); jedis.setex(REDIS_KEY, CACHE_TIME, accessToken); } catch (Exception e) { e.printStackTrace(); } finally { if (jedis != null) { jedis.close(); } } } /** * 获取新的accesstoken * * @return accesstoken */ private static String getNewAccessToken() { // 发送HTTP请求,获取新的accesstoken String url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + APP_ID + "&corpsecret=" + APP_SECRET; String accessToken = null; try { String response = HttpClientUtils.sendGet(url); JSONObject jsonObject = JSONObject.parseObject(response); accessToken = jsonObject.getString("access_token"); } catch (Exception e) { e.printStackTrace(); } return accessToken; } } ``` 以上方法中,`APP_ID`和`APP_SECRET`需要替换为自己企业微信应用的对应值。其中获取新的accesstoken的方法使用了`HttpClientUtils.sendGet(url)`这个HTTP请求的工具类,工具类可以自行百度实现。 另外,以上方法中的`Jedis`是Redis的Java客户端,需要通过`maven`引入。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值