微信java开发3——获取access_token

来源:互联网 发布:js点击按钮旋转图片 编辑:程序博客网 时间:2024/06/06 08:36

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

这里提供一个获取access_token的工具类

package com.lonbon.util;

import com.lonbon.model.menu.AccessToken;
import net.sf.json.JSONException;
import net.sf.json.JSONObject;

import static com.lonbon.util.MenuUtil.httpRequest;

/**
* Created by hst on 2017/10/25.
*/
public class GetTokenUtil {

public static final String APPID = "换成你自己的APPID";public static final String APPSECRET = "换成你自己的APPSECRET ";// 获取access_token的接口地址(GET) 限200(次/天)public final static String access_token_url =        "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";public static AccessToken getAccessToken() {    AccessToken accessToken = null;    String requestUrl = access_token_url.replace("APPID", APPID).replace("APPSECRET", APPSECRET);    JSONObject jsonObject = httpRequest(requestUrl, "GET", null);    // 如果请求成功    if (null != jsonObject) {        try {            accessToken = new AccessToken();            accessToken.setToken(jsonObject.getString("access_token"));            accessToken.setExpiresIn(jsonObject.getInt("expires_in"));        } catch (JSONException e) {            accessToken = null;        }    }    System.out.println("accessToken: " + accessToken.getToken());    return accessToken;}

}

上面的代码提到了,一天之内获取access_token也是有次数限制的。所以需要把获取到的access_token保存起来。我的做法是把access_token保存到数据库中,具体操作如下。

public String getAccessToken() {
String accessToken = “”;
//先到数据库查找access_token
Token token = tokenDAO.findToken();
if(null == token) {
//如果为null,则发请求获取
AccessToken access = GetTokenUtil.getAccessToken();
accessToken = access.getToken();
//拿到access_token后 存入数据库
token.setAccessToken(access.getToken());
token.setExpiresIn(access.getExpiresIn());
token.setCreateTime(dateToStr(new Date()));
tokenDAO.saveToken(token);
} else {
//如果不为null,判断accessToken是否失效
Date dbDate = strToDate(token.getCreateTime());
Date date = new Date();
//毫秒值
long time = date.getTime() - dbDate.getTime();
//判断accessToken是否失效
if(time < token.getExpiresIn() * 1000) {
//有效,从本地获取
accessToken = token.getAccessToken();
} else {
//无效,重新请求
AccessToken access = GetTokenUtil.getAccessToken();
accessToken = access.getToken();
//修改数据库的accessToken与创建时间
token.setAccessToken(accessToken);
token.setExpiresIn(access.getExpiresIn());
token.setCreateTime(dateToStr(new Date()));
tokenDAO.updateToken(token);
}
}
return accessToken;
}

原创粉丝点击