微信扫一扫获取签名(给前端)

    @GetMapping("/getSignature")
    @ApiOperation(value = "获取签名")
    public ServerResponse getSignature(String url) throws IOException {
    
    

        String signature = "";
        //获取noncestr
        String noncestr = UUID.randomUUID().toString();
        //获取timestamp
        String timestamp = Long.toString(System.currentTimeMillis() / 1000);
        //获取access_token
        String access_token = wxTokenUtil.get_FUWUHAO_Access_token();
        //获取jspai_ticket
        String jsapi_ticket = wxPublicUtil.getTicket(access_token);
        //将四个数据进行组合,传给SHA1进行加密
        StringBuffer str = new StringBuffer("jsapi_ticket=");
        str.append(jsapi_ticket).append("&noncestr=").append(noncestr).append("&timestamp=").append(timestamp).append("&url=").append(url);

        //sha1加密
        signature = wxPublicUtil.SHA1(str.toString());
        Map map = new HashMap();
        map.put("appId",publicAppid);
        map.put("timestamp",timestamp);
        map.put("nonceStr",noncestr);
        map.put("signature",signature);
        return ServerResponse.createServerResponseBySuccess("ok",map);
    }

//获取服务号AccessToken

//获取服务号AccessToken
    public synchronized String get_FUWUHAO_Access_token()  {
    
    
        String accessToken = cache.get(Const.REDIS_CATCH_FUWUHAO_TOKEN);
        if(null == accessToken || "".equals(accessToken)){
    
    
            this.TimedTasksOfFuwuhaoToken();//获取服务号Token
        }
        return accessToken;
    }

//获取ticket

    //获取ticket
    public String getTicket(String accessToken) throws IOException {
    
    

        // 网页授权接口jsapi_ticket
        String GetPageJsapiTicketUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+accessToken+"&type=jsapi";
        JSONObject jsonObject = AuthUtil.doGetJson(GetPageJsapiTicketUrl);

        String ticket = String.valueOf(jsonObject.get("ticket"));//获取ticket
        int expires_in = Integer.parseInt(String.valueOf(jsonObject.get("expires_in")));//获取时间
        return ticket;
    }

//SHA1加密

//SHA1加密
    public String SHA1(String str) {
    
    
        try {
    
    
            MessageDigest digest = java.security.MessageDigest
                    .getInstance("SHA-1"); //如果是SHA加密只需要将"SHA-1"改成"SHA"即可
            digest.update(str.getBytes());
            byte messageDigest[] = digest.digest();
            // Create Hex String
            StringBuffer hexStr = new StringBuffer();
            // 字节数组转换为 十六进制 数
            for (int i = 0; i < messageDigest.length; i++) {
    
    
                String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
                if (shaHex.length() < 2) {
    
    
                    hexStr.append(0);
                }
                hexStr.append(shaHex);
            }
            return hexStr.toString();

        } catch (NoSuchAlgorithmException e) {
    
    
            e.printStackTrace();
        }
        return null;
    }
    @Value("${IsRotationTraining}")
    Boolean IsRotationTraining;

    @Scheduled(fixedRate = 7200 * 1000)
    public void TimedTasksOfFuwuhaoToken(){
    
    
        if(!IsRotationTraining){
    
    
            return;
        }
        //获取access_token
        String accessToken = null;
        String url = Const.IP_GET_FUWUHAO_ACCESS_TOKEB +  "appid=" + publicAppid + "&secret=" + publicAppSecret;

        String response = RestTemplateUtil.sendGet(url);//微信平台返回json
        WxTokenResponseVO tokenResponseVO = com.alibaba.fastjson.JSONObject.parseObject(response, WxTokenResponseVO.class);
        accessToken = tokenResponseVO.getAccess_token();
        if(null == accessToken || "".equals(accessToken)){
    
    
            log.error("获取公众号accessToken失败!!!原因:" + tokenResponseVO.getErrmsg());
            return;
        }
        cache.set(Const.REDIS_CATCH_FUWUHAO_TOKEN,accessToken,tokenResponseVO.getExpires_in());
    }
public static final String IP_GET_FUWUHAO_ACCESS_TOKEB="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&";

Guess you like

Origin blog.csdn.net/KuKu_Nao/article/details/121414669