access_token是与微信服务器交互过程中的一个凭证,每次客户服务器主动与微信服务器通信都需要带上access_token以确认自己的身份。wechat4j内部封装了对access_token的操作,包括获取access_token和access_token中控服务器的实现。

access_token获取

要获取access_token可以使用如下的方法

String accessToken = TokenProxy.accessToken();

access_token中控服务器

access_token每日有一个次数限制,所以客户服务器不能每次是都去请求一个新的access_token,每次请求之后,access_token都有一个过期时间。因此微信平台建议你使用一个中控服务器来定时刷新token,取得之后存起来不用再去请求token,因为access_token请求有次数限制。 这样处理只有有两个好处:

  1. 保证access_token每日都不会超出访问限制,保证服务的正常。
  2. 提高服务的性能,不用每次发送业务请求之前都先发送一次access_token获取请求。

wechat4j获取access_token是通过access_token的代理TokenProxy来获取,而此代理封装了access_token的中控服务器。对access_token的保存有两种方式,一种是内存保存,一种是持久化保存(数据库或者文件)。内存保存方式的中控服务器由wehcat4j实现,客户不做任何操作。如果客户要使用持久化保存,那么就需要自己去定义中控服务器。所以有如下两种中控服务器:

  • access_token默认中控服务器
  • access_token自定义中控服务器

默认中控服务器

wechat4j的默认中控服务器是内存模式,即将access_token保存在内存中,直到过期的时候再去请求一个新的来替代。默认中控服务器对应的类是AccessTokenMemServer。

  • 优点:此模式的中控服务器有点是效率高,使用方便,客户不用关心。
  • 缺点:无法支持多服务器的集群,如果多个服务器的时候,此方式将不被支持。

自定义中控服务器

如果你需要将access_token保存在数据库或者文件中,那么就需要使用自定义的中控服务器。自定义的服务器需要客户自己完成,必须继承抽象类CustomerServer,完成其中的保存和查询方法即可,同时自定义的服务器是由定时器来驱动操作的,需要配置监听器。

配置自定义access_token服务器的详细步骤:

  • 创建自己的服务器类,需要继承wechat4j的CustomerServer类,实现save和find方法,前者是将access_token保存到数据库的操作,后者是从数据库中查询access_token的方法,里面可以是一个sql操作之类的。
public class CustomerAccessTokenServer extends CustomerServer{

	/* (non-Javadoc)
* @see org.sword.wechat4j.token.DbAccessTokenServer#find()
*/
@Override
public String find() {
String accessToken = null;
//执行数据库操作
// String sql = "select cfgValue from cfg where cfg.cfgKey = 'access_token'";
// accessToken = DBUtil.query(sql);
return accessToken;
} /* (non-Javadoc)
* @see org.sword.wechat4j.token.DbAccessTokenServer#save()
*/
@Override
public boolean save(Token accessToken) {
//如果没有需要插入,如果有的就更新,假设已经有了数据库配置项
// String sql = "update cfg set cfg.cfgValue=" + accessToken.getToken() +
// " where cfg.cfgKey= 'access_token'";
// DBUtil.execute(sql);
return true;
}
}
  • 在wechat4j.properties配置文件中配置wechat.accessToken.server.class项,配上刚才新建的服务器类的路径,示例如下:
 wechat.accessToken.server.class=com.sample.wechat.CustomerAccessTokenServer
  • 在web.xml中配置wechat4j的access_token监听器。代码如下:
  	<listener>
<listener-class>org.sword.wechat4j.token.TokenListener</listener-class>
</listener>

通过如上三步就能配置好自己的数据库access_token服务器。这样由中控服务器定时去刷新access_token,然后保存到数据库中,业务逻辑中要使用access_token的时候,是通过代理去数据库拿到数据。

定时刷新任务会提前200秒运行,防止到有效期之后运行过程中新access_token没有取得旧的access_token过期的情况发生。

wechat4j框架官方文档: https://github.com/sword-org/wechat4j/wiki

wechat4j技术交流QQ群: 423134346

java微信开发(wechat4j)——access_token中控服务器实现的更多相关文章

  1. java微信开发API第一步 服务器接入

    I如何接入服务器,下面就为大家进行介绍 一.说明 * 本示例根据微信开发文档:http://mp.weixin.qq.com/wiki/home/index.html最新版(4/3/2016 5:34 ...

  2. java微信开发

    所谓的微信开发就是在微信开发模式之下,对微信进行公众号和企业号的扩展开发.     如果要让你的微信公众号有更多的功能,比如菜单支持,自动的信息服务,查询,消息推送等,就必须开启微信的开发模式.进入微 ...

  3. Java微信开发_00_资源汇总贴

    1.微信公众平台技术文档(https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432) 2.微信企业号开发接口文档(ht ...

  4. 分享 Java微信开发SDK

    分享 Java微信开发SDK •发布于 4周前  •作者 朋也  •432 次浏览  •最后一次编辑是 2周前  •来自 分享 给大家分享两个java开发微信公众号的sdk jfinal-weixin ...

  5. java微信开发API解析(二)-获取消息和回复消息

    java微信开发API解析(二)-获取消息和回复消息 说明 * 本演示样例依据微信开发文档:http://mp.weixin.qq.com/wiki/home/index.html最新版(4/3/20 ...

  6. 微信开发 api 需要 https 服务器

    微信开发 api 需要 https 服务器 先建一个环境,本地的 https 服务器. 以下这篇不错,很完整. https://zhuanlan.zhihu.com/p/23640321

  7. java微信开发(wechat4j)——支持微信JS-SDK的jsapi_ticket中控服务器

    jsapi_ticket是使用js-sdk必须要的一个凭证,需要配置在js中. jsapi_ticket获取 要获取jsapi_ticket可以使用如下的方法 String jsapi_ticket ...

  8. java微信开发(wechat4j)——wechat4j配置文件解读

    wechat4j的配置文件是wechat4j.properties.需要放置在项目src目录下.在wechat4j.jar中的META-INF下有一个wechat4j.properties.sampl ...

  9. java微信开发(wechat4j)——发送客服消息

    微信支持主动发送客服消息.如果你要实现此功能,需要使用CustomerMsg类. 获得access_token access_token请求之后有一个过期时间,微信平台建议你使用一个中控服务器来定时刷 ...

随机推荐

  1. Java Web dev搭建经验总结

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! 回馈分析法使我看到,我对专业技术人员,不管是工程师.会计师还是市场研究人员,都容易从直觉上去理解 ...

  2. Python strange questions list

    sys.setrecursionlimit(1<<64) Line 3: OverflowError: Python int too large to convert to C long ...

  3. 发布FTP服务,防火墙配置

    最近需要在Web服务器上发布一下FTP,不想安装Server-U之类的,就用IIS的了,安装好后,发现外网无法连接.经过测试,发现是防火墙的问题. 查找了下关于FTP的资料,ftp server支持两 ...

  4. 突破短板,传统桌面程序 使用webapi 扩展迎合web和移动端融合的需求

    传统桌面程序不能完全被web和移动端替代,但是需要改造.这里要说的是巧用webapi把以前用dll和com组件,ocx等方式做接口,做分布式开发的方式,改成restful 风格api的方式实现跨平台, ...

  5. BZOJ 1006 [HNOI2008] 神奇的国度(简单弦图的染色)

    题目大意 K 国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即 AB 相互认识,BC 相互认识,CA 相互认识,是简洁高效的.为了巩固三角关系,K 国禁止四边关系,五边关系等 ...

  6. java攻城狮之路(Android篇)--ListView与ContentProvider

    一.ListView 1.三种Adapter构建ListView ListView添加条目的时候, 可以使用setAdapter(ListAdapter)方法, 常用的ListAdapter有三种 B ...

  7. Java知多少(110)数据库之插入记录

    插入数据表记录有3种方案 一.使用Statement对象 实现插入数据表记录的SQL语句的语法是: insert into 表名(字段名1,字段名2,……)value (字段值1,字段值2,……) 例 ...

  8. Mina、Netty、Twisted一起学(三):TCP消息固定大小的前缀(Header)

    在上一篇博文中,有介绍到用换行符分割消息的方法.但是这种方法有个小问题,如果消息中本身就包含换行符,那将会将这条消息分割成两条,结果就不对了. 本文介绍另外一种消息分割方式,即上一篇博文中讲的第2条: ...

  9. Reinforcement Learning

    Q-learning 高潮博文 http://mnemstudio.org/path-finding-q-learning-tutorial.htm 模式识别与机器学习的区别. http://www. ...

  10. tiny4412的中断资源连接关系示意图

    在tiny4412的设备树中可以发现,中断资源是以树的形式呈现的,下面是我画的一张图,大致描述了tiny4412上中断资源的连接关系. 可以到http://pan.baidu.com/s/1ge0sz ...