import com.jfb.jfbmanager.utils.StringUtil;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* @description: 微信临时票据 长期
* @author: hqh
* @create: 2020-07-01 10:26
**/
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_ticket
private 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");
log.info("jsApiTicket:"+jsApiTicket+" time:"+time);
Long nowDate = new Date().getTime();
if ( StringUtils.isNotBlank(jsApiTicket)&& StringUtils.isNotEmpty(jsApiTicket) && time != null && nowDate - Long.parseLong(time) < (1.5*60*60*1000)) {
log.info("jsApiTicket存在,且没有超时,返回jsApiTicketMap");
return jsApiTicketMap;
}
synchronized (JsApiTicketUtils.class) {
if(StringUtils.isNotBlank(jsApiTicket)&&StringUtils.isNotEmpty(jsApiTicket) && time != null && nowDate - Long.parseLong(time) < (1.5*60*60*1000)) {
log.info("jsApiTicket存在,且没有超时,返回jsApiTicketMap");
return jsApiTicketMap;
}
log.info("jsApiTicket超时,或者不存在,重新获取");
try {
//获取accessToken
String accessToken=SignUtil.getWxToken();
//根据accessToken获取jsapiTicket
String jsapiTicket = SignUtil.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 {
//获取accessToken
String accessToken=SignUtil.getWxToken();
//根据accessToken获取jsapiTicket
String jsapiTicket = SignUtil.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("微信服务器发生错误,时间:"+ StringUtil.getCurrentTime(),e);
}
return jsApiTicketMap;
}
}
}