zoukankan      html  css  js  c++  java
  • 微信公众号开发: 微信接入(一)

    下面列举接入代码:

    /**
     * @author lishupeng
     * @Description
     * @Date 2017/12/14 14:04
     *
     * 微信接入对象
     *
     */
    @Data
    public class WxCheckDto implements Serializable{
    
        private static final long serialVersionUID = -548862843699476264L;
    
        String signature ;  //微信加密签名
    
        String timestamp ; //时间戳
    
        String nonce  ; //随机数
    
        String echostr ; //随机字符串
    
    }
    /**
     * @author lishupeng
     * @Description
     * @Date 2017/12/14 13:46
     */
    public class CheckoutUtil {
    
        // 与接口配置信息中的Token要一致
        private static String token = "xxxxxxxxxxxx";
    
        /**
         * 验证签名
         *
         * @param signature
         * @param timestamp
         * @param nonce
         * @return
         */
        public static boolean checkSignature(String signature, String timestamp, String nonce) {
            String[] arr = new String[]{token, timestamp, nonce};
            // 将token、timestamp、nonce三个参数进行字典序排序
            // Arrays.sort(arr);
            sort(arr);
            StringBuilder content = new StringBuilder();
            for (int i = 0; i < arr.length; i++) {
                content.append(arr[i]);
            }
            MessageDigest md = null;
            String tmpStr = null;
    
            try {
                md = MessageDigest.getInstance("SHA-1");
                // 将三个参数字符串拼接成一个字符串进行sha1加密
                byte[] digest = md.digest(content.toString().getBytes());
                tmpStr = byteToStr(digest);
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
            content = null;
            // 将sha1加密后的字符串可与signature对比,标识该请求来源于微信
            return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;
        }
    
        /**
         * 将字节数组转换为十六进制字符串
         *
         * @param byteArray
         * @return
         */
        private static String byteToStr(byte[] byteArray) {
            String strDigest = "";
            for (int i = 0; i < byteArray.length; i++) {
                strDigest += byteToHexStr(byteArray[i]);
            }
            return strDigest;
        }
    
        /**
         * 将字节转换为十六进制字符串
         *
         * @param mByte
         * @return
         */
        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;
        }
    
        public static void sort(String a[]) {
            for (int i = 0; i < a.length - 1; i++) {
                for (int j = i + 1; j < a.length; j++) {
                    if (a[j].compareTo(a[i]) < 0) {
                        String temp = a[i];
                        a[i] = a[j];
                        a[j] = temp;
                    }
                }
            }
        }
    }
    /**
         * 微信接入
         *
         *
         * @return
         * @throws Exception
         */
        @GetMapping("/weixinTest")
        @ResponseBody
        public String weixinTest(WxCheckDto dto) throws Exception{
            log.info("开始签名校验:"+ JSON.toJSONString(dto));
            // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败
            if (dto.getSignature() != null && CheckoutUtil.checkSignature(dto.getSignature(), dto.getTimestamp(), dto.getNonce())) {
                log.info("签名校验通过");
                return dto.getEchostr() ;
            }
            return "";
        }
  • 相关阅读:
    【web前端】面题整理(2)
    【web前端】前段时间的面题整理(1)
    【js】什么是函数节流与函数去抖
    【感想文】对于情绪管理,我的感悟。
    【感想文】现代人的恋爱,已经不再是过去的一生只爱一个人了
    【插件】哔哩哔哩专栏区-文章朗读插件安装
    【js】版本号对比处理方案
    【js】了解前端缓存,收获不止于此!
    【js】关于this指针-理解call、apply、bind
    【读后感】爱的五种能力
  • 原文地址:https://www.cnblogs.com/lishupeng/p/8037476.html
Copyright © 2011-2022 走看看