springboot獲取微信JSDK簽名信息的實(shí)現(xiàn)示例
目標(biāo)
現(xiàn)實(shí)項(xiàng)目的需要,需要獲取微信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);
//請(qǐng)求
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);
//請(qǐng)求
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;
}到此這篇關(guān)于springboot獲取微信JSDK簽名信息的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)springboot獲取微信JSDK簽名信息內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot整合netty實(shí)現(xiàn)心跳檢測(cè)和自動(dòng)重連
本文主要介紹了Spring Boot中整合Netty實(shí)現(xiàn)心跳檢測(cè)和自動(dòng)重連,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-11-11
Java FTPClient連接池的實(shí)現(xiàn)
這篇文章主要介紹了Java FTPClient連接池的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-06-06
java?WebSocket?服務(wù)端實(shí)現(xiàn)代碼
WebSocket協(xié)議是基于TCP的一種新的網(wǎng)絡(luò)協(xié)議。它實(shí)現(xiàn)了瀏覽器與服務(wù)器全雙工(full-duplex)通信——允許服務(wù)器主動(dòng)發(fā)送信息給客戶端,這篇文章主要介紹了java?WebSocket?服務(wù)端代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02
SpringBoot項(xiàng)目中日志管理與調(diào)優(yōu)指南
在 Spring Boot 開(kāi)發(fā)過(guò)程中,日志管理是開(kāi)發(fā)者必須掌握的重要技能之一,合理的日志配置不僅能幫助開(kāi)發(fā)者追蹤應(yīng)用程序的執(zhí)行流程、定位問(wèn)題,還能提升應(yīng)用程序的可維護(hù)性,本文將詳細(xì)探討 Spring Boot 項(xiàng)目中日志管理的常見(jiàn)問(wèn)題、解決方案以及最佳實(shí)踐2024-10-10
mybatis-plus之自動(dòng)映射字段(typeHandler)的注意點(diǎn)及說(shuō)明
這篇文章主要介紹了mybatis-plus之自動(dòng)映射字段(typeHandler)的注意點(diǎn)及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
基于spring boot 2和shiro實(shí)現(xiàn)身份驗(yàn)證案例
這篇文章主要介紹了基于spring boot 2和shiro實(shí)現(xiàn)身份驗(yàn)證案例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04

