微信公众号获取jsapi_ticket(多类型)
一、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种方式
- 存储在内存中(本文介绍这种方式,只适用于部署单点项目,部署多点项目会造成jsapi_ticket错误)
- 存储在数据库中
三、多类型是什么?
前一阵子做了卡券的项目,发现获取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(多类型)相关推荐
- tp5微信公众号获取用户openid_tp5+微信公众号获取用户基本信息
获取用户基本信息(UnionID机制) 获取用户基本信息(UnionID机制) 在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯 ...
- vue 微信公众号获取定位经纬度 腾讯地图逆地址解析为具体地址
最近做项目需要用到 微信公众号获取定位,并将定位转换为具体地址的需求,找了挺多,最后整理下,分享给大家~ 我这里使用的是腾讯地图,也可以使用其他的如百度.高德等. 思路是,先使用微信开放文档的获取定位 ...
- 微信公众号获取AccessToken
微信公众号获取AccessToken 微信公众号appid和appSecret及配置相关的ip白名单 用到的pom.xml文件 <!-- fastjson--><dependency ...
- 微信公众号获取事件监听
微信公众号获取事件监听 使用到的工具类 XML (MessageUtil) 实体类(TextMessage) /*** 验证消息来自于服务器** @param signature* @param ti ...
- springboot+h5页面+微信公众号获取微信用户信息
springboot项目,h5页面通过微信公众号获取微信用户信息 最近本人有一个项目需求,微信公众号里点击一个菜单进入一个商城购物系统. 对于在微信公众号还是小白的我来说难度有点大,但是做完后发现也就 ...
- 微信公众号获取用户头像的踩坑经历
微信公众号获取头像有两种方式 1.用户无感知的,静默授权 snsapi_base 2.需要用户需要点击确认的 snsapi_userinfo 官方文档 我用的是第二种 开发步骤 1.引导用户进入授权页 ...
- php微信获取openid_微信公众号获取openid(php实例)
微信公众号获取openid 公众号获取openid的方法跟小程序获取openid其实是一样的,只是code获取的方式不一样 小程序获取code: 用户授权登录时调用wx.login即可获取到code ...
- java根据手机号获取微信信息_Java实现的微信公众号获取微信用户信息示例
本文实例讲述了Java实现的微信公众号获取微信用户信息.分享给大家供大家参考,具体如下: 注: 这里获取用户信息方式和网页授权获取用户信息方式不同.两个access_token不同,返回的结果也不同. ...
- 微信公众号获取用户openId(扩展:小程序获取openId和手机号)
微信公众号获取用户openId 拼接的参数[可以直接配菜单中]: https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxb2363dd ...
最新文章
- c语言中如何设计和编写一个应用系统?
- wangEditor 上传图片,回调函数 Cannot read properties of undefined
- esp8266烧写机智云固件方法
- vbs复制自己到tmp目录
- servlet实现文件上传,预览,下载和删除
- oracle 11gdata guard,Oracle 11g Data Guard配置
- 在VMWare Workstation 8.0.1中安装苹果MAC OS X Lion Part 2
- eclipse中配置c++开发环境 Eclipse + CDT + MinGW
- linux显卡内核修改,如何为新内核添加老内核的显卡模块(私有驱动)
- MySQL的InnoDB表如何设计主键索引-转自淘宝MySQL经典案例
- COMSOL Multiphysics多物理场仿真技术与应用
- Qt5.10编写FTP客户端
- OpenGL第二讲——绘制简单的几何图形
- mybatis resulttype
- ios平台Ahorro记账APP换新机无法下载问题
- iOS开发---本地通知(UILocalNotification)
- 8、go语言:测试与性能调优
- 地图APP的产品分析-驴迹导游
- 微信小程序支付开发具体步骤
- adb命令查看app的日志