jsapi_ticket是使用js-sdk必须要的一个凭证,需要配置在js中。

jsapi_ticket获取

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

String jsapi_ticket = TokenProxy.jsApiTicket();

jsapi_ticket中控服务器

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

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

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

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

默认中控服务器

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

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

自定义中控服务器

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

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

  • 创建自己的服务器类,需要继承wechat4j的CustomerServer类,实现save和find方法,前者是将jsapi_ticket保存到数据库的操作,后者是从数据库中查询jsapi_ticket的方法,里面可以是一个sql操作之类的。
public class CustomerJsApiTicketServer 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 = 'jsapi_ticket'";
// accessToken = DBUtil.query(sql);
return accessToken;
} /* (non-Javadoc)
* @see org.sword.wechat4j.token.DbAccessTokenServer#save()
*/
@Override
public boolean save(Token jsapiTicket) {
//如果没有需要插入,如果有的就更新,假设已经有了数据库配置项
// String sql = "update cfg set cfg.cfgValue=" + jsapiTicket.getToken() +
// " where cfg.cfgKey= 'jsapi_ticket'";
// DBUtil.execute(sql);
return true;
}
}
  • 在wechat4j.properties配置文件中配置wechat.ticket.jsapi.server.class项,配上刚才新建的服务器类的路径,示例如下:
 wechat.ticket.jsapi.server.class=com.sample.wechat.CustomerJsApiTicketServer
  • 在web.xml中配置wechat4j的监听器。代码如下:
  	<listener>
<listener-class>org.sword.wechat4j.token.TokenListener</listener-class>
</listener>

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

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

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

wechat4j技术交流QQ群: 423134346

java微信开发(wechat4j)——支持微信JS-SDK的jsapi_ticket中控服务器的更多相关文章

  1. Java微信开发_Exception_03_非微信官方网页-invalid signature

    由于natapp免费隧道的域名是系统随机分配的,老是在变.故昨天又换了内网映射工具,分别换了ngrok和花生壳,然而在做JSSDK网页开发时,按了微信的view菜单按钮进行页面跳转时,微信官方提示“非 ...

  2. 微信开发中使用微信JSSDK和使用URL.createObjectURL上传预览图片的不同处理对比

    在做微信公众号或者企业微信开发业务应用的时候,我们常常会涉及到图片预览.上传等的处理,往往业务需求不止一张图片,因此相对来说,需要考虑的全面一些,用户还需要对图片进行预览和相应的处理,在开始的时候我使 ...

  3. 前端工作日常爬坑之——单页面微信开发Jssdk相关,以及jssdk图片直传自己服务器的实现。

    日常爬坑 遇到的情况大致说明: 项目基于Vue2全家桶实现,vue-router控制前端路由,路由模式是History(主要是领导追求太高,觉得hash带#号太丑,然后遇到了小坑...),主要是服务于 ...

  4. 微信开发-业务域名、JS接口安全域名、网页授权域名

    在微信公众平台上可配置这些域名. 1.业务域名:在微信浏览器中点击文本框,会弹出下面的提示,很不爽,通过配置业务域名可以将该提示去掉 2.JS接口安全域名:分享到朋友圈(js-sdk)时用上,此接口要 ...

  5. iOS版微信开发小结(微信支付,APP跳转微信公众号)

    最近公司心血来潮,一心要搞微信.废话不多说,直接上干货. 开发前准备: 1.在微信开发者平台获取开发者认证:(一年300元人民币) PS:具体流程按照微信流程指示操作即可,在这就不废话了. 2.下载微 ...

  6. .NET微信开发Charles突破微信授权,获取任意微信网页源代码(含Https)

    简介 Charles其实是一款代理服务器,通过成为电脑或者浏览器的代理,然后截取请求和请求结果达到分析抓包的目的.该软件是用Java写的,能够在Windows,Mac,Linux上使用.开发iOS都在 ...

  7. [微信开发] - UnionID以及微信开放平台

  8. java微信开发

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

  9. Java企业微信开发_03_通讯录同步

    一.本节要点 1.获取通讯录密钥 获取方式: 登录企业微信—>管理工具—>通讯录同步助手—>开启“API接口同步”  ; 开启后,即可看到通讯录密钥,也可设置通讯录API的权限:读取 ...

随机推荐

  1. 一个方法告诉你as3的removeChild性能有多烂

    其实as3这个坑我早就踩过,不过那时没太注意,最近把项目的removeChild干掉换成了visible=false,发现效率质的提升…… 先贴一下代码吧 private function testR ...

  2. Alsa驱动snd_soc_read的底层实现

    在分析snd_soc_codec_driver的结构体时,发现有些芯片的驱动中定义了字段reg_word_size, reg_cache_size, reg_cache_default,但没有定义re ...

  3. Android 自定义View实现多行RadioGroup (MultiLineRadioGroup)

    一.项目概况 我们都知道RadioGroup可以实现选择框,但它有一个局限性,由于它是继承自LinearLayout的,所以只能有一个方向,横向或者纵向:但有时候仅一行的RadioGroup并不能满足 ...

  4. Web离线存储的几种方式

    随着HTML5的正式定稿,我们也可以大量使用HTML离线网络应用程序的特性. #1.Application Cache Application Cache 可以很简单让我们的WebApp具有离线的能力 ...

  5. 用JavaScript修改浏览器tab标题

    修改tab或者window的标题,是一项较老的实践.Gmail 用它来提示用户新的聊天消息,当有新的page通过AJAX加载的时候,本站同样用它更新tab title.这是怎样做到的呢?当时是通过设置 ...

  6. 15个私有云上的DevOps 开源工具

    本文由来:之前工作需要,在查找运维自动化资料时,发现了这篇文章的英文原版,觉得很不错.它综合的介绍了哪些工具,我们运维人员需要掌握,并且如何进行结合其它工具一起使用.给了一些指导性的意见.由于是英文的 ...

  7. 邮箱mail 发送类 ASP.NET C#

    没有牛B的设计模式,代码精练精练实用,功能齐全,调用简单 ..全全完完为码农考虑 MailSmtp ms = new MailSmtp("smtp.qq.com","12 ...

  8. CentOS6.5菜鸟之旅:安装SUN JDK1.7和Tomcat7

    一.前言   CentOS6.5系统自带Open JDK1.7.1.6和1.5,但OpenJDK部分内容与SUN JDK不兼容,因此打算重新安装SUN JDK1.7来开发. 二.卸载Open JDK ...

  9. SQL中对XML的处理

    DECLARE  @PreSOMasterXML XMLDECLARE   @SDA VARCHAR(100)SET @PreSOMasterXML=N'<ProcessTaskRequest& ...

  10. [Solution] 简单数字识别之Tesseract

    图像识别涉及的理论:傅里叶变换,图形形态学,滤波,矩阵变换等等. Tesseract的出现为了解决在没有这些复杂的理论基础,快速识别图像的框架. 准备: 1.样本图像学习,预处理 (平均每1个元素出现 ...