微信开发使用JS-SDK,全局缓存jsapi_ticket

请问:http GET请求获得jsapi_ticket(有效期7200秒,开发者必须在自己的服务全局缓存jsapi_ticket),如何进行全局缓存。

我目前想到的是:

在ehcache中创建个cache:

cache中配置如下:

<cache name="jsapi_ticketCache"
            maxElementsInMemory="10000"  
            eternal="false"  
            timeToIdleSeconds="7200"  
            timeToLiveSeconds="7200"  
            overflowToDisk="true"  
            maxElementsOnDisk="10000000"  
            diskPersistent="false"  
            diskExpiryThreadIntervalSeconds="120"  
            memoryStoreEvictionPolicy="LRU"  
             clearOnFlush="true"
            />

在Controller中如下实现:


ApiConfig ac = new ApiConfig();
// 配置微信 API 相关常量
ac.setAppId(PropKit.get("appId"));
ac.setAppSecret(PropKit.get("appSecret"));
ApiConfigKit.setThreadLocalApiConfig(ac);
String jsapi_ticket = CacheKit.get("jsapi_ticketCache", paras);
if (jsapi_ticket == null) {
JsTicket jsTicket=JsTicketApi.getTicket(JsApiType.jsapi);
jsapi_ticket=jsTicket.getTicket();
CacheKit.put("jsapi_ticketCache", paras,jsapi_ticket);
}
System.out.println(">>>>>>>>>>>>>>>>>>"+jsapi_ticket);
Map<String, String> signMap=Sign.sign(jsapi_ticket, url);
setAttr("url", signMap.get("url"));
setAttr("jsapi_ticket", signMap.get("jsapi_ticket"));
setAttr("nonceStr", signMap.get("nonceStr"));
setAttr("timestamp", signMap.get("timestamp"));
setAttr("signature", signMap.get("signature"));

这些操作更新到服务器

测试总是提示:invalid signature签名错误。

官方提示可能有如下几种错误,缓存应该怎么存:

blob.png


评论区

Dreamlu

2016-11-22 17:15

jfinal-weixin内部已经帮你处理!单tomcat不需要配置,多服务时查看:http://git.oschina.net/jfinal/jfinal-weixin/blob/master/src/main/java/com/jfinal/weixin/demo/WeixinConfig.java 里面的redis存储access_token、js_ticket,需要先启动RedisPlugin配置那块即可。

精彩飞扬

2016-11-22 17:21

@Dreamlu 好的,谢谢。