获取access token
access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。
公众平台的API调用所需的access_token的使用及生成方式说明:
1、为了保密appsecrect,第三方需要一个access_token获取和刷新的中控服务器。而其他业务逻辑服务器所使用的access_token均来自于该中控服务器,不应该各自去刷新,否则会造成access_token覆盖而影响业务;
2、目前access_token的有效期通过返回的expire_in来传达,目前是7200秒之内的值。中控服务器需要根据这个有效时间提前去刷新新access_token。在刷新过程中,中控服务器对外输出的依然是老access_token,此时公众平台后台会保证在刷新短时间内,新老access_token都可用,这保证了第三方业务的平滑过渡;
3、access_token的有效时间可能会在未来有调整,所以中控服务器不仅需要内部定时主动刷新,还需要提供被动刷新access_token的接口,这样便于业务服务器在API调用获知access_token已超时的情况下,可以触发access_token的刷新流程。
公众号调用各接口时都需使用access_token,我们如何获取access_token?
1. 创建 token 的 Po 类
根据返回值说明,创建 Po 类
AccessToken
public class AccessToken {private String token;private int expiresIn;
根据微信的 APPID ,APPSECRET 获取 token:
private static final String APPID = "填自己的";private static final String APPSECRET = "填自己的";private static final String ACCESS_TOKEN_URL = "https://api./cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
public static AccessToken getAccessToken() throws ParseException, IOException{AccessToken token = new AccessToken();String url = ACCESS_TOKEN_URL.replace("APPID", APPID).replace("APPSECRET", APPSECRET);JSONObject jsonObject = doGetStr(url);if(jsonObject!=null){token.setToken(jsonObject.getString("access_token"));token.setExpiresIn(jsonObject.getInt("expires_in"));}return token;}
2. 获取 token
public class WeixinTest {public static void main(String[] args) throws ParseException, IOException {//返回票据AccessToken token = WeiXinUtil.getAccessToken();System.out.println("票据"+token.getToken());System.out.println("有效时间"+token.getExpiresIn());}}
票据
4Utt_7vDsUROljc9HHly5QQwXIuLJ7ixxpQ2hhhjhPdw7ULYhygsM8Af8Tv404oCopQMkGsOSsU7UsDzy0hKcGLdVfXWIRmU5oFWSHI4WcoUFSjAFAMXK
有效时间7200
token的获取次数有限,如果微信公众号的使用人数很多,不能每次都创建新的 token。同时产生多个 token 会产生冲突,且 token 的有效时间是 2 小时,所以可以把获取的 token 写入文件中,当失效是重新获取 token ,这样一天最多获取 12 次。