最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot獲取微信JSDK簽名信息的實(shí)現(xiàn)示例

 更新時(shí)間:2023年11月27日 14:43:30   作者:sccd2009  
本文介紹了如何在Spring Boot應(yīng)用中獲取微信JSDK的簽名信息,包括獲取接口URL、參數(shù)設(shè)置、簽名算法和獲取簽名結(jié)果的步驟,具有一定的參考價(jià)值,感興趣的可以了解一下

目標(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);
                //請求
                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簽名信息的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)springboot獲取微信JSDK簽名信息內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

赤城县| 洪雅县| 新建县| 花莲市| 蓝山县| 措美县| 宿迁市| 高邮市| 乌兰察布市| 新竹县| 襄汾县| 凤山市| 来凤县| 锡林浩特市| 南乐县| 黄梅县| 兰考县| 北辰区| 五华县| 新野县| 拜泉县| 贵州省| 肇州县| 嘉义市| 沛县| 黔江区| 德惠市| 合川市| 陇西县| 东阿县| 息烽县| 岳普湖县| 阳信县| 八宿县| 武清区| 逊克县| 龙泉市| 三门县| 射阳县| 朔州市| 高清|