access_token是与微信服务器交互过程当中的一个凭证,每次客户服务器主动与微信服务器通讯都须要带上access_token以确认本身的身份。wechat4j内部封装了对access_token的操做,包括获取access_token和access_token中控服务器的实现。java
要获取access_token可使用以下的方法git
String accessToken = TokenProxy.accessToken();
access_token每日有一个次数限制,因此客户服务器不能每次是都去请求一个新的access_token,每次请求以后,access_token都有一个过时时间。所以微信平台建议你使用一个中控服务器来定时刷新token,取得以后存起来不用再去请求token,由于access_token请求有次数限制。 这样处理只有有两个好处:github
wechat4j获取access_token是经过access_token的代理TokenProxy来获取,而此代理封装了access_token的中控服务器。对access_token的保存有两种方式,一种是内存保存,一种是持久化保存(数据库或者文件)。内存保存方式的中控服务器由wehcat4j实现,客户不作任何操做。若是客户要使用持久化保存,那么就须要本身去定义中控服务器。因此有以下两种中控服务器:web
wechat4j的默认中控服务器是内存模式,即将access_token保存在内存中,直到过时的时候再去请求一个新的来替代。默认中控服务器对应的类是AccessTokenMemServer。sql
若是你须要将access_token保存在数据库或者文件中,那么就须要使用自定义的中控服务器。自定义的服务器须要客户本身完成,必须继承抽象类CustomerServer,完成其中的保存和查询方法便可,同时自定义的服务器是由定时器来驱动操做的,须要配置监听器。
配置自定义access_token服务器的详细步骤:数据库
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; } }
wechat.accessToken.server.class=com.sample.wechat.CustomerAccessTokenServer
<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微信