首页  >  文章  >  Java  >  java微信开发(wechat4j)——access_token中控服务器实现

java微信开发(wechat4j)——access_token中控服务器实现

高洛峰
高洛峰原创
2017-02-13 16:03:432365浏览

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请求有次数限制。 这样处理只有有两个好处:

保证access_token每日都不会超出访问限制,保证服务的正常。

提高服务的性能,不用每次发送业务请求之前都先发送一次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() */@Overridepublic 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() */@Overridepublic 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过期的情况发生。

更多java微信开发(wechat4j)——access_token中控服务器实现相关文章请关注PHP中文网!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn