springboot獲取微信JSDK簽名信息的實現(xiàn)示例
更新時間:2023年11月27日 14:43:30 作者:sccd2009
本文介紹了如何在Spring Boot應用中獲取微信JSDK的簽名信息,包括獲取接口URL、參數(shù)設置、簽名算法和獲取簽名結(jié)果的步驟,具有一定的參考價值,感興趣的可以了解一下
目標
現(xiàn)實項目的需要,需要獲取微信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,唯一票據(jù)
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簽名信息的實現(xiàn)示例的文章就介紹到這了,更多相關springboot獲取微信JSDK簽名信息內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
springboot整合netty實現(xiàn)心跳檢測和自動重連
本文主要介紹了Spring Boot中整合Netty實現(xiàn)心跳檢測和自動重連,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-11-11
SpringBoot項目中日志管理與調(diào)優(yōu)指南
在 Spring Boot 開發(fā)過程中,日志管理是開發(fā)者必須掌握的重要技能之一,合理的日志配置不僅能幫助開發(fā)者追蹤應用程序的執(zhí)行流程、定位問題,還能提升應用程序的可維護性,本文將詳細探討 Spring Boot 項目中日志管理的常見問題、解決方案以及最佳實踐2024-10-10
mybatis-plus之自動映射字段(typeHandler)的注意點及說明
這篇文章主要介紹了mybatis-plus之自動映射字段(typeHandler)的注意點及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04
基于spring boot 2和shiro實現(xiàn)身份驗證案例
這篇文章主要介紹了基于spring boot 2和shiro實現(xiàn)身份驗證案例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-04-04

