Java获取微信access_token(支持缓存)

微信公众号 java 文章 2021-01-24 21:13 0 22 全屏看文

Java获取微信access_token。

但是我偷懒,所以有的部分使用了依赖包。

<dependency>
	<groupId>cn.hutool</groupId>
	<artifactId>hutool-all</artifactId>
	<version>5.3.1</version>
</dependency>
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>fastjson</artifactId>
	<version>1.2.7</version>
</dependency>


之后就是代码了。

package cn.sanshu;

import com.alibaba.fastjson.JSONObject;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import cn.sanshu.pojo.AccessToken;



public class TokenUtil {
	//从微信后台拿到APPID和APPSECRET 并封装为常量
    private static final String APPID = "您的APPID";
    private static final String APPSECRET = "您的APPSECRET";
    private static final String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
   
    
    /**
     * 获取AccessToken
     * @return 返回拿到的access_token及有效期
     */
    public static AccessToken getAccessToken(String appid){
    	String tokenFilePath = "D:\\temp\\"+appid+"_token.json";
    	AccessToken token=null;
    	if(FileUtil.exist(tokenFilePath)) {
    		String accessTokenStr = FileUtil.readUtf8String(tokenFilePath);
    		token = JSONObject.parseObject(accessTokenStr, AccessToken.class);
    		if(token.getExpire_time()<System.currentTimeMillis()) {
    			token = null;
    		}
    	}
    	if(token ==null) {
	        String url = ACCESS_TOKEN_URL.replace("APPID", APPID).replace("APPSECRET", APPSECRET);//将URL中的两个参数替换掉
	        String tokenResp =HttpUtil.get(url);
	        if(StrUtil.isEmpty(tokenResp)) {
	        	System.err.println("获取token失败,返回为空");
	        }
	        token = JSONObject.parseObject(tokenResp, AccessToken.class);
	        long expireTime = System.currentTimeMillis()+token.getExpires_in()*1000;
	        token.setExpire_time(expireTime);
	        FileUtil.writeUtf8String(JSONObject.toJSONString(token), tokenFilePath);
    	}
        return token;
    }
}


调用方法:

public static void main(String[] args) {
	AccessToken token = getAccessToken(APPID);
	System.out.println(JSONObject.toJSONString(token));
}


-EOF-