您的位置:首页 > 移动开发 > 微信开发

微信java开发3——获取access_token

2017-11-03 12:25 721 查看
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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 微信