public class CreateAccessTokenUtil {
private static final Logger logger = Logger.getLogger(CreateAccessTokenUtil.class);
/**
* 根据appId和appSecret 生成access_token
* @param appId
* @param appSecret
* @return
*/
public static synchronized String createAccessToken(String appId,String appSecret){
String access_token =null;
try {
//判断对列中是否存在 
List<AccessToken> accessTokenList = Constant.accessTokenList;
boolean isExists = false;
AccessToken theExistsToken = null;//存在的这个对象
for(AccessToken aToken: accessTokenList ){
if(appId.equals(aToken.getAppId()) && appSecret.equals(aToken.getAppSecret())){
theExistsToken = aToken;
isExists = true;
break;
}
}
//已存在
if(isExists){
Date now = new Date();
//判断是否过期
if(now.getTime()-theExistsToken.getCreateTime().getTime()>Constant.WECHAT_EXPIRESIN*1000){
//已过期,重新获取
AccessToken newAccessToken = CreateAccessTokenUtil.getAccessToken(appId, appSecret);
if(newAccessToken!=null){
access_token = newAccessToken.getAccessToken();
Constant.accessTokenList.remove(theExistsToken);
Constant.accessTokenList.add(newAccessToken);
}
}else{
//未过期,直接取值
access_token = theExistsToken.getAccessToken();
}
}else{
//不存在 直接获取token
AccessToken newAccessToken = CreateAccessTokenUtil.getAccessToken(appId, appSecret);
if(newAccessToken!=null && !StringUtil.isEmpty(newAccessToken.getAccessToken())){
access_token = newAccessToken.getAccessToken();
Constant.accessTokenList.add(newAccessToken);
}
}
} catch (Exception e) {
e.printStackTrace();
}

return access_token;
}

/**
* 查询AccessToken 返回对象
* @param appId
* @param appSecret
* @return
*/
public static AccessToken getAccessToken(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);

AccessToken accessToken = null;
logger.info("getAccessToken===requestUrl===="+requestUrl);
JSONObject jsonObject = WeixinUtil.httpRequest(requestUrl, "GET", null);
if (jsonObject != null){
try {
logger.info("getAccessToken===jsonObject===="+jsonObject.toString());
String access_token = jsonObject.getString("access_token");
String expires_in = jsonObject.getString("expires_in");
accessToken = new AccessToken();
accessToken.setAppId(appId);
accessToken.setAppSecret(appSecret);
accessToken.setAccessToken(access_token);
accessToken.setExpiresIn(Integer.parseInt(expires_in));
accessToken.setCreateTime(new Date());
} catch (Exception e) {
String errCode = jsonObject.getString("errcode");
String errMsg = jsonObject.getString("errmsg");
logger.error("获取token失败errcode:{" + errCode + "} errmsg{" + errMsg + "}");
}
}
return accessToken;
}

}

创建AccessToken工具类相关推荐

  1. 物联网萤石云获取登录的accessToken工具类

    刚刚接触物联网,萤石云平台,编写萤石云获取登录的accessToken工具类 我接手写公司物联网的模块,入坑不少,主要不知道有哪些东西要写. 总结流程: 1.先边设备调试好(摄像头),在手机上看到画面 ...

  2. Jackson的使用与创建Jackson工具类

    1.Jackson的使用 Jackson 是当前用的比较广泛的,用来序列化和反序列化 json 的 Java 的开源框架.Jackson 社 区相对比较活跃,更新速度也比较快, 从 Github 中的 ...

  3. java数据库设计工具_Java课程设计---创建数据库工具类

    1.传统的数据库操作 package com.java.mysql; import java.sql.Connection; import java.sql.DriverManager; import ...

  4. java 创建数组工具类_用Java创建数组工具类ArrayTool

    起步阶段写的代码,欢迎大家批评指正! public class ArrayTool { /** The constructor of the class ArrayTool,which is empt ...

  5. Android FileUtil(android文件工具类)

    android开发和Java开发差不了多少,也会有许多相同的功能.像本文提到的文件存储,在Java项目和android项目里面用到都是相同的.只是android开发的一些路径做了相应的处理. 下面就是 ...

  6. 项目添加JWT工具类

    在common_utils模块中添加jwt工具依赖 在pom中添加 <dependencies><!-- JWT--><dependency><groupId ...

  7. 二、MyBatis常用对象分析 封装工具类

    1.0 MyBatis 对象分析 (1) Resources 类 Resources 类,顾名思义就是资源,用于读取资源文件.其有很多方法通过加载并解析资源文件,返回不同类型的 IO 流对象. (2) ...

  8. android文件读取工具类,Android 下读取Assets Properties操作封装工具类

    Android 下读取Assets Properties操作封装工具类 发布时间:2018-06-03作者:laosun阅读(2081) 为了方便使用,首先创建BaseApplication类,如下所 ...

  9. 小汤学编程之JDBC番外篇——DBUtil工具类

    一.编写 在学完dbutils框架和DataSource连接池后,我们已经可以较轻松的查询和操作数据库了,但是每次进行查询和操作时,都需要配置数据库连接相关信息.获取连接池.等一系列重复的操作,故我们 ...

最新文章

  1. mpvue 转uni-app 操作记录
  2. Unity3D热更新LuaFramework入门实战
  3. Eclipse中查看没有源码的Class文件的方法
  4. Word 2007中隐藏段落和格式标记
  5. 前端学习(1780):前端调试之快速转存站点的方法
  6. OPNET网络仿真分析-1.2、OPNET安装教程
  7. Windows10下解压版mysql-8.0.11安装教程
  8. 用R进行meta分析(metafor包)
  9. 查看系统使用率命令 vmstat 输出详解!
  10. [转] 串、并行加法器
  11. c语言专业认知实践报告怎么写,c语言实践报告心得范文
  12. MvcPager分页控件
  13. np.random用法
  14. (DDIA)SQL与NoSQL数据模型简介
  15. AWS abbreviation
  16. MarkDownPad2实用教程及MarkDown常用语法
  17. 生死看淡,不服就GAN
  18. 如何让编辑器运行你的代码
  19. Apache Camel - 4 - Camel元素
  20. 谁应该去读 C++ Programming Language

热门文章

  1. 蓝牙模块芯片型号有哪些?国产还是进口?核心指标有哪些
  2. 计算机的录像功能在哪里找,电脑自带录屏软件在哪?一键开启视频录制的方法...
  3. 前端python开发_【2020Python修炼记】前端开发之 前端工具和HTML
  4. 一文了解下一代互联网核心技术HTTP/3及技术发展
  5. web service方法进行全文检索_软件架构分层方法论
  6. 用计算机作文的评价量规,作文分级评价量规..ppt
  7. Easy EDA #学习笔记08# | 创建元件库(原理图库与PCB封装库)
  8. HMS华为账号登入全部流程加详解流程机制
  9. 元数据管理系统解决方案及产品调研-数仓系列(一)
  10. C# DataGridView控件动态添加行与列