springboot项目实战之获取微信JSDK签名信息

目标

现实项目的需要,需要获取微信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;
     }

欢迎点赞,转发,留言,批评

相关推荐
失散1311 小时前
分布式专题——10.4 ShardingSphere-Proxy服务端分库分表
java·分布式·架构·shardingsphere·分库分表
Bellafu66613 小时前
spring项目部署后为什么会生成 logback-spring.xml文件
java
递归不收敛13 小时前
一、Java 基础入门:从 0 到 1 认识 Java(详细笔记)
java·开发语言·笔记
沐浴露z13 小时前
【Java SpringAI智能体开发学习 | 2】SpringAI 实用特性:自定义Advisor,结构化输出,对话记忆持久化,prompt模板,多模态
java·spring·springai
小沈同学呀13 小时前
创建一个Spring Boot Starter风格的Basic认证SDK
java·spring boot·后端
码农小伙13 小时前
通俗易懂地讲解JAVA的BIO、NIO、AIO
java·nio
不要再敲了15 小时前
JDBC从入门到面试:全面掌握Java数据库连接技术
java·数据库·面试
潇I洒15 小时前
若依4.8.1打包war后在Tomcat无法运行,404报错的一个解决方法
java·tomcat·ruoyi·若依·404
凤山老林15 小时前
SpringBoot 轻量级一站式日志可视化与JVM监控
jvm·spring boot·后端
Funcy15 小时前
XxlJob 源码分析05:执行器注册流程
java