zoukankan      html  css  js  c++  java
  • 如何保证access_token长期有效--微信公众平台开发

    http://blog.csdn.net/qq_33556185/article/details/52758781

    import javax.servlet.ServletContext;
    
    import org.apache.log4j.Logger;
    import org.springframework.web.context.ContextLoader;
    import org.springframework.web.context.WebApplicationContext;
    
    import com.alibaba.fastjson.JSONException;
    import com.alibaba.fastjson.JSONObject;
    
    
    public class TokenUtil {
    
        private static final Logger logger = Logger.getLogger(MessageService.class);
    
        public static String getAccessToken(String appId, String appSecret,String flag) {
            WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
            ServletContext application = webApplicationContext.getServletContext();
    
            if (application.getAttribute(flag) != null) {
    
                WeixinAccessToken tempToken = (WeixinAccessToken) application.getAttribute(flag);
    
                if (System.currentTimeMillis() < tempToken.getExpirationTime()) {
                    return tempToken.getAccessToken();
                } else {
                    return getAccessTokenContent(appId, appSecret, application,flag);
                }
            }
            return getAccessTokenContent(appId, appSecret, application,flag);
    
        }
    
        private static String getAccessTokenContent(String appId, String appSecret, ServletContext application,String flag) {
            WeixinAccessToken accessTokenFromUrl = getAccessTokenFromUrl(appId, appSecret);
            String accessToken = null;
            if (accessTokenFromUrl != null) {
                application.setAttribute(flag, accessTokenFromUrl);
                accessToken = accessTokenFromUrl.getAccessToken();
                logger.info("accessToken from url");
            }
            return accessToken;
        }
    
        public static WeixinAccessToken getAccessTokenFromUrl(String appId, String appSecret) {
            String requestUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=SECRET";
    
            requestUrl = requestUrl.replace("APPID", appId);
            requestUrl = requestUrl.replace("SECRET", appSecret);
    
            JSONObject jsonObject = CommonUtil.httpsRequest(requestUrl, "GET", null);
            WeixinAccessToken tokenModel = null;
            if (null != jsonObject) {
                try {
                    String access_token = jsonObject.getString("access_token");
                    int expires_in = jsonObject.getIntValue("expires_in");
                    tokenModel = new WeixinAccessToken(access_token, System.currentTimeMillis() + expires_in*1000);
                } catch (JSONException e) {
                    logger.info("获取token失败 errcode:" + jsonObject.getIntValue("errcode") + ",errmsg:"
                            + jsonObject.getString("errmsg"));
                }
            }
            return tokenModel;
        }
    }

    WeixinAccessToken

    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;  
        }  
          
      
    }  
    View Code
  • 相关阅读:
    java8特性 Optional 工具类
    SpringBoot 配置支付宝接口
    Redis宕机 快速恢复
    flowable流程引擎通过模型ID部署流程
    java OA系统 自定义表单 流程审批 电子印章 手写文字识别 电子签名 即时通讯
    Mybatis 动态执行SQL语句
    idea 访问 jsp 404问题
    变量名的命名
    CSS设计 Search窗口
    jQuery实现Ajax功能示例
  • 原文地址:https://www.cnblogs.com/newlangwen/p/7660883.html
Copyright © 2011-2022 走看看