@GetMapping("/getSignature")
@ApiOperation(value = "获取签名")
public ServerResponse getSignature(String url) throws IOException {
String signature = "";
//获取noncestr
String noncestr = UUID.randomUUID().toString();
//获取timestamp
String timestamp = Long.toString(System.currentTimeMillis() / 1000);
//获取access_token
String access_token = wxTokenUtil.get_FUWUHAO_Access_token();
//获取jspai_ticket
String jsapi_ticket = wxPublicUtil.getTicket(access_token);
//将四个数据进行组合,传给SHA1进行加密
StringBuffer str = new StringBuffer("jsapi_ticket=");
str.append(jsapi_ticket).append("&noncestr=").append(noncestr).append("×tamp=").append(timestamp).append("&url=").append(url);
//sha1加密
signature = wxPublicUtil.SHA1(str.toString());
Map map = new HashMap();
map.put("appId",publicAppid);
map.put("timestamp",timestamp);
map.put("nonceStr",noncestr);
map.put("signature",signature);
return ServerResponse.createServerResponseBySuccess("ok",map);
}
//获取服务号AccessToken
//获取服务号AccessToken
public synchronized String get_FUWUHAO_Access_token() {
String accessToken = cache.get(Const.REDIS_CATCH_FUWUHAO_TOKEN);
if(null == accessToken || "".equals(accessToken)){
this.TimedTasksOfFuwuhaoToken();//获取服务号Token
}
return accessToken;
}
//获取ticket
//获取ticket
public String getTicket(String accessToken) throws IOException {
// 网页授权接口jsapi_ticket
String GetPageJsapiTicketUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+accessToken+"&type=jsapi";
JSONObject jsonObject = AuthUtil.doGetJson(GetPageJsapiTicketUrl);
String ticket = String.valueOf(jsonObject.get("ticket"));//获取ticket
int expires_in = Integer.parseInt(String.valueOf(jsonObject.get("expires_in")));//获取时间
return ticket;
}
//SHA1加密
//SHA1加密
public String SHA1(String str) {
try {
MessageDigest digest = java.security.MessageDigest
.getInstance("SHA-1"); //如果是SHA加密只需要将"SHA-1"改成"SHA"即可
digest.update(str.getBytes());
byte messageDigest[] = digest.digest();
// Create Hex String
StringBuffer hexStr = new StringBuffer();
// 字节数组转换为 十六进制 数
for (int i = 0; i < messageDigest.length; i++) {
String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
if (shaHex.length() < 2) {
hexStr.append(0);
}
hexStr.append(shaHex);
}
return hexStr.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
@Value("${IsRotationTraining}")
Boolean IsRotationTraining;
@Scheduled(fixedRate = 7200 * 1000)
public void TimedTasksOfFuwuhaoToken(){
if(!IsRotationTraining){
return;
}
//获取access_token
String accessToken = null;
String url = Const.IP_GET_FUWUHAO_ACCESS_TOKEB + "appid=" + publicAppid + "&secret=" + publicAppSecret;
String response = RestTemplateUtil.sendGet(url);//微信平台返回json
WxTokenResponseVO tokenResponseVO = com.alibaba.fastjson.JSONObject.parseObject(response, WxTokenResponseVO.class);
accessToken = tokenResponseVO.getAccess_token();
if(null == accessToken || "".equals(accessToken)){
log.error("获取公众号accessToken失败!!!原因:" + tokenResponseVO.getErrmsg());
return;
}
cache.set(Const.REDIS_CATCH_FUWUHAO_TOKEN,accessToken,tokenResponseVO.getExpires_in());
}
public static final String IP_GET_FUWUHAO_ACCESS_TOKEB="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&";