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;
} }

如何保证access_token长期有效--微信公众平台开发的更多相关文章

  1. 第五篇 :微信公众平台开发实战Java版之如何获取公众号的access_token以及缓存access_token

    一.access_token简介 为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台 开放了许多接口,包括自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等, 开 ...

  2. 微信公众平台开发-access_token获取及应用(含源码)

    微信公众平台开发-access_token获取及应用(含源码)作者: 孟祥磊-<微信公众平台开发实例教程> 很多系统中都有access_token参数,对于微信公众平台的access_to ...

  3. [转]抢先Mark!微信公众平台开发进阶篇资源集锦

    FROM : http://www.csdn.net/article/2014-08-01/2820986 由CSDN和<程序员>杂志联合主办的 2014年微信开发者大会 将于8月23日在 ...

  4. 第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装

    微信服务器和第三方服务器之间究竟是通过什么方式进行对话的? 下面,我们先看下图: 其实我们可以简单的理解: (1)首先,用户向微信服务器发送消息: (2)微信服务器接收到用户的消息处理之后,通过开发者 ...

  5. Senparc.Weixin.MP SDK 微信公众平台开发教程(十七):个性化菜单接口说明

    前不久微信上线了个性化菜单接口,Senparc.Weixin SDK也已经同步更新. 本次更新升级Senparc.Weixin.MP版本到v13.5.2,依赖Senparc.Weixin版本4.5.4 ...

  6. PHP实现微信公众平台开发 全套视频资源下载

    好久没有在博客园更新东西了,今天给大家分享一份比较不错的视频学习资源吧. 主要是关于PHP实现微信公众平台开发,  不知道大家对于微信平台的开发有多少了解,那么今天就从基础开始吧,资源目录如下(PS ...

  7. Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明

    一.基础说明 这里说的“通用接口(CommonAPIs)”是使用微信公众账号一系列高级功能的必备验证功能(应用于开发模式). 我们通过微信后台唯一的凭证,向通用接口发出请求,得到访问令牌(Access ...

  8. Senparc.Weixin.MP SDK 微信公众平台开发教程(九):自定义菜单接口说明

    上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明>介绍了如何通过通用接口获取AccessToken,有了AccessToken,我们就可以来操作 ...

  9. Senparc.Weixin.MP SDK 微信公众平台开发教程(十一):高级接口说明

    这里所说的高级接口是指面向通过认证的服务号开通的高级功能. 高级功能大致可以分类为: 用户接口 分组接口 客服接口(有别于之前介绍的多客服) 群发接口 多媒体接口 二维码接口 模板消息接口(不是所有账 ...

随机推荐

  1. hdu 1251简单字典树

    #include<stdio.h> #include<iostream> #include<string.h> using namespace std; struc ...

  2. openjudge7627 鸡蛋的硬度

    描述 最近XX公司举办了一个奇怪的比赛:鸡蛋硬度之王争霸赛.参赛者是来自世 界各地的母鸡,比赛的内容是看谁下的蛋最硬,更奇怪的是XX公司并不使用什么精密仪器来测量蛋的硬度,他们采用了一种最老土的办法- ...

  3. Web 后端编程的几个关键点(总结中...)

    基础 服务端结构 服务器如何部署,负载均衡,代理技术,如何向B端提供服务? 分布式架构 与前端界面的交互形式 数据 CURD 表之间的关联 较为棘手 如何将一对多 多对多的概念进行 面向对象 描述 前 ...

  4. Django的static和media

    2013-09-09 18:13:57|          最近用到Django的静态文件,关于static和media,配置了很多次,终于可以用了.        首先是static,在'site/ ...

  5. jackson的应用

    直接上代码 package com.demo.jackson.utils; import com.fasterxml.jackson.core.JsonProcessingException; imp ...

  6. Ubuntu 16.04使用sudo apt-get -f install解决依赖时的注意事项(重点)

    注意:在觉得软件依赖时,一般使用sudo apt-get -f install,但是也是非常危险的,尤其时一些软件需要删除某些依赖时,会导致原有安装的软件全部卸载.所以使用此命令时要时刻注意输出的这条 ...

  7. [GraphQL] Query Local and Remote Data in Apollo Link State

    In this lesson, you will learn how to query local and remote data in Apollo Link State in the same c ...

  8. MAVEN项目模块化

    maven的最大的特点之中的一个就是能够把项目模块化. 前面的一篇文章MAVEN创建并打包web项目已经创建了一个简单的webapp,注意这个webapp的打包方式是war. 假设如今又要划分出来一个 ...

  9. Postgis经常使用函数

    1,基本操作函数 AddGeometryColumn(<schema_name>, <table_name>,<column_name>, <srid> ...

  10. 【Unix编程】进程间通信(IPC)

    进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息.IPC的方式通常有管道(包括无名管道和命名管道).消息队列.信号量.共享存储.Socket. ...