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