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;
                }
            }
    }

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

  • 相关阅读:
    理解多线程引用自 http://eagletff.blog.163.com/blog/static/11635092820105158493975/
    Delphi 完全时尚手册之 Visual Style 篇 (界面不错) 转自http://blog.csdn.net/iseekcode/article/details/4733229
    .Delphi下的COM编程 详解Delphi下的COM编程
    TPerlRegEx, delphi 下的正则表达式
    delphi 下多线程 并发操作 数据库(数据库锁) 注意事项
    关于利用其它版本看QQ的是否隐身
    QQ空间的一些操作
    关于自动申请QQ
    千千静听播放时出现杂音,而用其他播放器却没有
    无锡之行
  • 原文地址:https://www.cnblogs.com/xiangxiang521/p/9378422.html
Copyright © 2011-2022 走看看