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 "";
        }
  • 相关阅读:
    leetcode Remove Linked List Elements
    leetcode Word Pattern
    leetcode Isomorphic Strings
    leetcode Valid Parentheses
    leetcode Remove Nth Node From End of List
    leetcode Contains Duplicate II
    leetcode Rectangle Area
    leetcode Length of Last Word
    leetcode Valid Sudoku
    leetcode Reverse Bits
  • 原文地址:https://www.cnblogs.com/lishupeng/p/8037476.html
Copyright © 2011-2022 走看看