一、jsapi_ticket是什么?

jsapi_ticket是公众号用于调用微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。由于获取jsapi_ticket的api调用次数非常有限,频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存jsapi_ticket 。

二、注意事项

由于jsapi_ticket有效期为2小时,并且每天有实时调用量上限次数,所以最好开发的时候最好把jsapi_ticket存储起来,判断上次获取的jsapi_ticket是否有效,如果有效,就需要再次发起请求去获取jsapi_ticket了。

存储jsapi_ticket有2种方式

  1. 存储在内存中(本文介绍这种方式,只适用于部署单点项目,部署多点项目会造成jsapi_ticket错误)
  2. 存储在数据库中

三、多类型是什么?

前一阵子做了卡券的项目,发现获取jsapi_ticket的地址是不同的,在这里面做下说明,省的大家开发时遇到麻烦

正常获取jsapi_ticket的url地址(type为jsapi):

https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi

微信卡券获取jsapi_ticket的url地址(type为wx_card):

https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=wx_card

四、代码实例

JsApiTicketUtils

下文代码中使用的获取token在微信公众号获取普通access_token中

/*** jsapi_ticket是公众号用于调用微信JS接口的临时票据* jsapi_ticket的每天有调用限额* 长期存储jsapi_ticket* */
public class JsApiTicketUtils {private static Logger log = LoggerFactory.getLogger(JsApiTicketUtils.class);private static Map<String, String> jsApiTicketMap = new HashMap<>();private final static String JSAPI_TICKET = "jsapi";//jsapi_ticketprivate final static String WX_CARD_JSAPI_TICKET = "wx_card";//微信卡券jsapi_ticket/*** 获取jsapi_ticket*/public static Map<String, String> getJsApiTicket() {String time = jsApiTicketMap.get("jsapi_ticket_time");String jsApiTicket = jsApiTicketMap.get("jsapi_ticket");Long nowDate = new Date().getTime();if (jsApiTicket != null && time != null && nowDate - Long.parseLong(time) < (1.5*60*60*1000)) {log.info("jsApiTicket存在,且没有超时,返回jsApiTicketMap");return jsApiTicketMap;}synchronized (JsApiTicketUtils.class) {if(jsApiTicket != null && time != null && nowDate - Long.parseLong(time) < (1.5*60*60*1000)) {log.info("jsApiTicket存在,且没有超时,返回jsApiTicketMap");return jsApiTicketMap;} log.info("jsApiTicket超时,或者不存在,重新获取");try {//获取accessTokenString accessToken=WeiXinUtils.getAccessToken();//根据accessToken获取jsapiTicketString jsapiTicket = WeiXinUtils.getJsApiTicket(accessToken,JSAPI_TICKET);log.info("jsapi_ticket_time:"+nowDate);log.info("jsapi_ticket:"+jsapiTicket);jsApiTicketMap.put("jsapi_ticket_time", nowDate + "");jsApiTicketMap.put("jsapi_ticket", jsapiTicket); } catch (Exception e) {log.error("微信服务器发生错误",e);}return jsApiTicketMap;}/*** 获取jsapi_ticket(微信卡券)*/public static Map<String, String> getWxCardJsApiTicket() {String time = jsApiTicketMap.get("wx_card_jsapi_ticket_time");String jsApiTicket = jsApiTicketMap.get("wx_card_jsapi_ticket");Long nowDate = new Date().getTime();if (jsApiTicket != null && time != null && nowDate - Long.parseLong(time) < (1.5*60*60*1000)) {log.info("jsApiTicket存在,且没有超时,返回jsApiTicketMap");return jsApiTicketMap;}synchronized (JsApiTicketUtils.class) {if(jsApiTicket != null && time != null && nowDate - Long.parseLong(time) < (1.5*60*60*1000)) {log.info("jsApiTicket存在,且没有超时,返回jsApiTicketMap");return jsApiTicketMap;} log.info("jsApiTicket超时,或者不存在,重新获取");try {//获取accessTokenString accessToken=WeiXinUtils.getAccessToken();//根据accessToken获取jsapiTicketString jsapiTicket = WeiXinUtils.getJsApiTicket(accessToken,WX_CARD_JSAPI_TICKET);log.info("wx_card_jsapi_ticket_time:"+nowDate);log.info("wx_card_jsapi_ticket:"+jsapiTicket);jsApiTicketMap.put("wx_card_jsapi_ticket_time", nowDate + "");jsApiTicketMap.put("wx_card_jsapi_ticket", jsapiTicket); } catch (Exception e) {log.error("微信服务器发生错误",e);}return jsApiTicketMap;}
}

WeiXinUtils

下文代码中使用的UrlConUtil在Http请求UrlConUtil工具类中

/** * jsapi_ticket是公众号用于调用微信JS接口的临时票据* */
public static String getJsApiTicket(String accessToken, String type){String jsApiTicket = "";// 这个url链接地址和参数皆不能变String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+accessToken+"&type="+type;try {JSONObject jsonObject = UrlConUtil.httpsRequest(url, "GET", null);logger.info("获取jsapi_ticket返回的json:"+jsonObject);Long expiresIn = jsonObject.getLong("expires_in");logger.info("微信获取的expires_in:"+expiresIn);String ticket = jsonObject.getString("ticket");logger.info("微信获取的ticket:"+ticket);}catch (Exception e){logger.debug("获取jsapi_ticket发生异常",e);}return jsApiTicket;
}

微信公众号获取jsapi_ticket(多类型)相关推荐

  1. tp5微信公众号获取用户openid_tp5+微信公众号获取用户基本信息

    获取用户基本信息(UnionID机制) 获取用户基本信息(UnionID机制) 在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯 ...

  2. vue 微信公众号获取定位经纬度 腾讯地图逆地址解析为具体地址

    最近做项目需要用到 微信公众号获取定位,并将定位转换为具体地址的需求,找了挺多,最后整理下,分享给大家~ 我这里使用的是腾讯地图,也可以使用其他的如百度.高德等. 思路是,先使用微信开放文档的获取定位 ...

  3. 微信公众号获取AccessToken

    微信公众号获取AccessToken 微信公众号appid和appSecret及配置相关的ip白名单 用到的pom.xml文件 <!-- fastjson--><dependency ...

  4. 微信公众号获取事件监听

    微信公众号获取事件监听 使用到的工具类 XML (MessageUtil) 实体类(TextMessage) /*** 验证消息来自于服务器** @param signature* @param ti ...

  5. springboot+h5页面+微信公众号获取微信用户信息

    springboot项目,h5页面通过微信公众号获取微信用户信息 最近本人有一个项目需求,微信公众号里点击一个菜单进入一个商城购物系统. 对于在微信公众号还是小白的我来说难度有点大,但是做完后发现也就 ...

  6. 微信公众号获取用户头像的踩坑经历

    微信公众号获取头像有两种方式 1.用户无感知的,静默授权 snsapi_base 2.需要用户需要点击确认的 snsapi_userinfo 官方文档 我用的是第二种 开发步骤 1.引导用户进入授权页 ...

  7. php微信获取openid_微信公众号获取openid(php实例)

    微信公众号获取openid 公众号获取openid的方法跟小程序获取openid其实是一样的,只是code获取的方式不一样 小程序获取code: 用户授权登录时调用wx.login即可获取到code ...

  8. java根据手机号获取微信信息_Java实现的微信公众号获取微信用户信息示例

    本文实例讲述了Java实现的微信公众号获取微信用户信息.分享给大家供大家参考,具体如下: 注: 这里获取用户信息方式和网页授权获取用户信息方式不同.两个access_token不同,返回的结果也不同. ...

  9. 微信公众号获取用户openId(扩展:小程序获取openId和手机号)

    微信公众号获取用户openId 拼接的参数[可以直接配菜单中]: https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxb2363dd ...

最新文章

  1. c语言中如何设计和编写一个应用系统?
  2. wangEditor 上传图片,回调函数 Cannot read properties of undefined
  3. esp8266烧写机智云固件方法
  4. vbs复制自己到tmp目录
  5. servlet实现文件上传,预览,下载和删除
  6. oracle 11gdata guard,Oracle 11g Data Guard配置
  7. 在VMWare Workstation 8.0.1中安装苹果MAC OS X Lion Part 2
  8. eclipse中配置c++开发环境 Eclipse + CDT + MinGW
  9. linux显卡内核修改,如何为新内核添加老内核的显卡模块(私有驱动)
  10. MySQL的InnoDB表如何设计主键索引-转自淘宝MySQL经典案例
  11. COMSOL Multiphysics多物理场仿真技术与应用
  12. Qt5.10编写FTP客户端
  13. OpenGL第二讲——绘制简单的几何图形
  14. mybatis resulttype
  15. ios平台Ahorro记账APP换新机无法下载问题
  16. iOS开发---本地通知(UILocalNotification)
  17. 8、go语言:测试与性能调优
  18. 地图APP的产品分析-驴迹导游
  19. 微信小程序支付开发具体步骤
  20. adb命令查看app的日志

热门文章

  1. 升级Win10系统后使用其杀软defender还有必要使用360安全卫士等其他杀毒软件吗?
  2. AsyncQueryHandler
  3. m基于FPGA的MSK调制解调系统verilog开发,并带FPGA误码检测模块和matlab仿真程序
  4. 【观察】神州鲲泰:发力新计算产业,背后的谋篇与布局
  5. UHF超高频RFID应用RFID珠宝盘点管理
  6. 2021河南省城市活力大数据报告
  7. 0 2JavaScript
  8. 密码安全之密码技术【2】替代密码
  9. 四大组件之BroadcastReceiver(二)-使用权限和常用的系统广播
  10. Eclipse版本介绍