微信公众号获取普通access_token

(本文介绍的是普通access_token,不是网页授权access_token)

一、普通access_token是什么?

access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新。

二、注意事项

由于access_token有效期为2小时,并且每天有实时调用量上限次数,所以最好开发的时候最好把access_token存储起来,判断上次获取的access_token是否有效,如果有效,就需要再次发起请求去获取access_token了。

重复获取将导致上次获取的access_token失效

存储access_token有2种方式

  1. 存储在内存中(本文介绍这种方式只适用于部署单点项目,部署多点项目会造成access_token错误
  2. 存储在数据库中

三、官方文档

三、代码实例

AccessTokenUtils 

/**
 * access_token是公众号的全局唯一接口调用凭据
 * access_token的每天有调用限额
 * 长期存储access_token
 * */
public class AccessTokenUtils {
    private static Logger log = LoggerFactory.getLogger(AccessTokenUtils.class);
    private static Map<String, String> accessTokenMap = new HashMap<>();
    public static Map<String, String> getAccessToken() {
        String time = accessTokenMap.get("time");
        String accessToken = accessTokenMap.get("access_token");
        Long nowDate = new Date().getTime();
        if (accessToken != null && time != null && nowDate - Long.parseLong(time) < (1.5*60*60*1000)) {
            log.info("accessToken存在,且没有超时 , 返回accessTokenMap");
            return accessTokenMap;
        }
        synchronized (AccessTokenUtils.class) {
            if(accessToken != null && time != null && nowDate - Long.parseLong(time) < (1.5*60*60*1000)) {
                log.info("accessToken存在,且没有超时 , 返回accessTokenMap");
                return accessTokenMap;
        } 
        log.info("accessToken 超时 , 或者不存在 , 重新获取");
        try {
            String accessToken=WeiXinUtils.getAccessToken();
            log.info("time:"+nowDate);
            log.info("access_token:"+accessToken);
            accessTokenMap.put("time", nowDate + "");
            accessTokenMap.put("access_token", accessToken); 
        } catch (Exception e) {
            log.error("微信服务器发生错误",e);
        }
        return accessTokenMap; 
    }
}

WeiXinUtils

下文代码中使用的UrlConUtil在Http请求UrlConUtil工具类

/** 
 * access_token是公众号的全局唯一接口调用凭据
 * */
public static String getAccessToken(){
	String accessToken = "";
	String grantType = "client_credential";// 获取access_token填写client_credential
	String appId ="自己微信公众号的appId";// 第三方用户唯一凭证
	String secret = "自己微信公众号的密钥";// 第三方用户唯一凭证密钥,即appsecret
	// 这个url链接地址和参数皆不能变
	String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=" + grantType + "&appid=" + appId + "&secret="+ secret;
	try {
		JSONObject jsonObject = UrlConUtil.httpsRequest(url, "GET", null);
		logger.info("获取access_token返回的json:"+jsonObject);
		Long expiresIn = jsonObject.getLong("expires_in");
		logger.info("微信获取的expires_in:"+expiresIn);
		String accessToken = jsonObject.getString("access_token");
		logger.info("微信获取的access_token:"+accessToken);
	}catch (Exception e){
		logger.debug("获取access_token发生异常",e);
	}
	return accessToken;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值