zoukankan      html  css  js  c++  java
  • java-weixin-tools接入微信

    第一步:添加服务器配置

    第二步:验证来自微信服务器的消息

    @RequestMapping("/weixin")
    @Controller  
    public class WeixinController {
        @Autowired
        private WeixinService wxService;
        
        /**
         * 微信接入
         * @param signature
         * @param timestamp
         * @param nonce
         * @param echostr
         * @return
         */
        @RequestMapping("/check")
        @ResponseBody
        public String checkSignature(@RequestParam String signature, @RequestParam String timestamp,
                @RequestParam String nonce, @RequestParam String echostr) {
            return wxService.checkSignature(signature, timestamp, nonce, echostr);
        }
    }
    public interface WeixinService {
        public String checkSignature(String signature,String timestamp,String nonce,String echostr);
    }
    @Service
    public class WeixinServiceImpl implements WeixinService {
    
        /**
         * 微信接入
         */
        @Override
        public String checkSignature(String signature, String timestamp,
                String nonce, String echostr) {
            if (CheckUtil.checkSignature(signature, timestamp, nonce)) {
                return echostr;
            }
            ;
            return null;
        }
    }
    public class CheckUtil {
        public static final String  tooken = "xiang"; //开发者自行定义Tooken
        public static boolean checkSignature(String signature,String timestamp,String nonce){
        //1.定义数组存放tooken,timestamp,nonce
        String[] arr = {tooken,timestamp,nonce};
    
        //2.对数组进行排序
        Arrays.sort(arr);
    
        //3.生成字符串
        StringBuffer sb = new StringBuffer();
        for(String s : arr){
        sb.append(s);
        }
    
        //4.sha1加密,网上均有现成代码
        String temp = getSha1(sb.toString());
    
        //5.将加密后的字符串,与微信传来的加密签名比较,返回结果
        return temp.equals(signature);
    
        }
    
    
        public static String getSha1(String str){
                if(str==null||str.length()==0){
                    return null;
                }
                char hexDigits[] = {'0','1','2','3','4','5','6','7','8','9',
                        'a','b','c','d','e','f'};
                try {
                    MessageDigest mdTemp = MessageDigest.getInstance("SHA1");
                    mdTemp.update(str.getBytes("UTF-8"));
                    byte[] md = mdTemp.digest();
                    int j = md.length;
                    char buf[] = new char[j*2];
                    int k = 0;
                    for (int i = 0; i < j; i++) {
                        byte byte0 = md[i];
                        buf[k++] = hexDigits[byte0 >>> 4 & 0xf];
                        buf[k++] = hexDigits[byte0 & 0xf];      
                    }
                    return new String(buf);
                } catch (Exception e) {
                    return null;
                }
            }
    }

     大家觉得不错的话 可以支持一下

  • 相关阅读:
    解决Volley请求网络数据返回的数据乱码
    AndroidStudio导入Android-PullToRefresh
    JavaScript判断文件的大小
    JavaScript POST 请求如何跨域
    使用Nginx在自己的电脑上实现负载均衡
    把列表中某一个属性的所有的值,按照一个符号给他弄成一个字符串
    Mongo中的数据类型
    Redis学习二 C#中如何进行这五种数据类型的操作
    Redis学习一 五种基本的数据类型
    JavaScript中关于bool类型判断的一些总结。
  • 原文地址:https://www.cnblogs.com/xiangxiang521/p/9378422.html
Copyright © 2011-2022 走看看