springboot獲取微信JSDK簽名信息的實現示例
更新時間:2023年11月27日 14:43:30 作者:sccd2009
本文介紹了如何在Spring Boot應用中獲取微信JSDK的簽名信息,包括獲取接口URL、參數設置、簽名算法和獲取簽名結果的步驟,具有一定的參考價值,感興趣的可以了解一下
目標
現實項目的需要,需要獲取微信jssdk簽名信息
步驟
1. 初始化配置信息
public Map initJSSDKConfigInfo(String shareUrl) throws Exception {
//String accessToken = this.getAccessToken();
String jsapiTicket = this.getJsApiTicket();
String timestamp = Long.toString(System.currentTimeMillis() / 1000);
String nonceStr = UUID.randomUUID().toString();
String signature = this.buildJSSDKSignature(jsapiTicket,timestamp,nonceStr,shareUrl);
Map<String,String> map = new HashMap<String,String>();
map.put("shareUrl", shareUrl);
map.put("jsapi_ticket", jsapiTicket);
map.put("nonceStr", nonceStr);
map.put("timestamp", timestamp);
map.put("signature", signature);
map.put("appid", WeChatConfig.appId);
return map;
}2. ticket信息獲取
private String getJsApiTicket() {
String jsApiTicket =redisCache.getCacheObject(JS_API_TICKET);
if (!StrUtil.isNotEmpty(jsApiTicket)){
//獲取全局的access_token,唯一票據
String accessToken = redisCache.getCacheObject(ACCESS_TOKEN_KEY);
//log.info("getJsApiTicket"+accessToken);
if (StringUtils.isNotBlank(accessToken)) {
//獲取jsapi_ticket
String url = WeChatConfig.getTicketUrl+"access_token="+accessToken+"&type=jsapi";
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
//請求
RestTemplate restTemplate = new RestTemplate();
HttpEntity<String> request = new HttpEntity<>(headers);
ResponseEntity<String> responseString = restTemplate.postForEntity(url, request, String.class);
JSONObject json = JSONObject.parseObject(responseString.getBody());
jsApiTicket = json.getString("ticket");
redisCache.setCacheObject(JS_API_TICKET, jsApiTicket, 115, TimeUnit.MINUTES);
}else {
//access為空打印
log.info("accessToken","重新獲取");
this.creatAccessToken();
accessToken = redisCache.getCacheObject(ACCESS_TOKEN_KEY);
String url = WeChatConfig.getTicketUrl+"access_token="+accessToken+"&type=jsapi";
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
//請求
RestTemplate restTemplate = new RestTemplate();
HttpEntity<String> request = new HttpEntity<>(headers);
ResponseEntity<String> responseString = restTemplate.postForEntity(url, request, String.class);
JSONObject json = JSONObject.parseObject(responseString.getBody());
jsApiTicket = json.getString("ticket");
redisCache.setCacheObject(JS_API_TICKET, jsApiTicket, 115, TimeUnit.MINUTES);
}
}
log.info("getJsApiTicket jsApiTicket: {}", jsApiTicket);
return jsApiTicket.trim();
}3. 信息處理封裝
public static String buildJSSDKSignature(String ticket,String timestamp,String nonceStr ,String url) throws Exception {
String orderedString = "jsapi_ticket=" + ticket
+ "&noncestr=" + nonceStr + "&timestamp=" + timestamp
+ "&url=" + url;
return sha1(orderedString);
}
public static String sha1(String orderedString) throws Exception {
String ciphertext = null;
MessageDigest md = MessageDigest.getInstance("SHA-1");
byte[] digest = md.digest(orderedString.getBytes());
ciphertext = byteToStr(digest);
return ciphertext.toLowerCase();
}
private static String byteToStr(byte[] byteArray) {
String strDigest = "";
for (int i = 0; i < byteArray.length; i++) {
strDigest += byteToHexStr(byteArray[i]);
}
return strDigest;
}
private static String byteToHexStr(byte mByte) {
char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
char[] tempArr = new char[2];
tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
tempArr[1] = Digit[mByte & 0X0F];
String s = new String(tempArr);
return s;
}到此這篇關于springboot獲取微信JSDK簽名信息的實現示例的文章就介紹到這了,更多相關springboot獲取微信JSDK簽名信息內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java中使用JavaMail多發(fā)郵件及郵件的驗證和附件實現
這篇文章主要介紹了Java中使用Java Mail多發(fā)郵件及郵件的驗證和附件實現,包括在郵件中加入圖片等功能的實現講解,需要的朋友可以參考下2016-02-02
springboot + rabbitmq 如何實現消息確認機制(踩坑經驗)
這篇文章主要介紹了springboot + rabbitmq 如何實現消息確認機制,本文給大家分享小編實際開發(fā)中的一點踩坑經驗,內容簡單易懂,需要的朋友可以參考下2020-07-07

