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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
mybatis-plus之自動映射字段(typeHandler)的注意點及說明
這篇文章主要介紹了mybatis-plus之自動映射字段(typeHandler)的注意點及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04