何为access_token?引用微信官方的一定义:access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。微信获取access_token接口每日限制调用2000次,因此我们必须将token保存起来,省着点去获取新的access_token。
WeixinAccessToken类:
发送get请求和post请求工具类略。
最简单的方式就是保存在内存中,此方法适用于单机应用。如果服务是集群或者分布式应用,还是保存在数据库中吧。此例以保存在内存中为例。
1:token过期的时候重新去获取新的token。
2:内存中拿不到token的时候去调用微信接口获取token。
CoreService类:
- /**
- * 获取微信公众号平台接口的ACCESS_TOKEN
- * @return
- */
- public String getWeixinAccessToken(){
- WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
- ServletContext application = webApplicationContext.getServletContext();
- if(application.getAttribute("tokenMap")!=null){
- WeixinAccessToken tempToken=(WeixinAccessToken) application.getAttribute("tokenMap");
- if(System.currentTimeMillis()>tempToken.getExpirationTime()){
- return tempToken.getAccessToken();
- }else{
- return getAccessToken();
- }
- }else{
- return getAccessToken();
- }
- }
- private String getAccessToken() {
- WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
- ServletContext application = webApplicationContext.getServletContext();
- String appId=appid;
- String appSecret=secret;
- String url="https://api.weixin.qq.com/cgi-bin/token";
- String returnData=Common.sendGet(url,"grant_type=client_credential&appid="+appId+"&secret="+appSecret);
- JSONObject json=JSONObject.fromObject(returnData);
- if(json.containsKey("access_token")){
- if(json.get("access_token")!=null&&!json.get("access_token").equals("")){
- application.setAttribute("tokenMap", new WeixinAccessToken(json.get("access_token").toString(),
- System.currentTimeMillis()+Integer.parseInt(json.get("expires_in").toString())));
- return json.get("access_token").toString();
- }
- }
- return null;
- }
- public class WeixinAccessToken {
- private String accessToken;
- private long expirationTime;
- public WeixinAccessToken(){
- }
- public WeixinAccessToken(String accessToken,long expirationTime){
- this.accessToken=accessToken;
- this.expirationTime=expirationTime;
- }
- public String getAccessToken() {
- return accessToken;
- }
- public void setAccessToken(String accessToken) {
- this.accessToken = accessToken;
- }
- public long getExpirationTime() {
- return expirationTime;
- }
- public void setExpirationTime(long expirationTime) {
- this.expirationTime = expirationTime;
- }
- }