个人学习注册订阅号就行,把资料尽可能完善,不然开发时权限不够,然后登陆,点击订阅号然后扫码就可以微信关注。

左侧一栏可以做一些操作,当然作为一个程序员还是编码爽,点击“开发”,在“开发者工具”中有开发文档可以研读,在“基本配置“开始正式的开发配置,看图片

url就是微信服务器将消息等传给你的服务器时你的服务器中项目地址,这里不是目录而是地址可以看web.xml中自己接收token的地址,token和项目文件中的token一直即可,其它的有随机生成的,有选择的选择明文即可。这时提交会token验证失败,我用的是ngrok将本地地址(localhost:8080)映射到外网,ngrok显示微信服务器已经发给我的服务器,token验证失败是因为尚未编码,上代码

代码目录

主要代码

       String signature = request.getParameter("signature");//接收微信get请求传过来的签名,
       String timestamp = request.getParameter("timestamp");//接受的签名与时间戳timestamp,nonce随机数,echpstr随机字符串三个经过字典排序,组成一个字符串,然后进行sha1加密,比较一致标示是来自微信的请求
       String nonce = request.getParameter("nonce");
       String echostr = request.getParameter("echostr");
       PrintWriter out = response.getWriter();
       System.out.println("---"+"signature="+signature+"timestamp="+timestamp+"nonce="+nonce+"echostr="+echostr);
       if (this.checkSignature(signature, timestamp, nonce)) {
           out.print(echostr);//只有你返回参数echostr时,他才会认为你这个接口是通的,才会提交成功
       }
        
       out.close();

out = null;

    public static boolean checkSignature(String signature, String timestamp, String nonce){
        String[] arr = new String[]{token, timestamp, nonce};//存入数组中
        //字典排序
        Arrays.sort(arr);
         
        StringBuilder content = new StringBuilder();//将三个字符串依次连接为StringBuilder的一个对象
        for(int i = 0; i < arr.length; i++){
            content.append(arr[i]);
        }
        MessageDigest md = null;//java自带的加密类
        String tmpStr = null;
          
        try {
            md = MessageDigest.getInstance("SHA-1");
            //SHA-1加密
            byte[] digest = md.digest(content.toString().getBytes());//对组合后的字符串进行 sha1加密
            tmpStr = byteToStr(digest);//将字节转换为字符串
        } catch (NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        content = null;
        // 比对 判断
        return tmpStr != null ? tmpStr.equals(signature.toUpperCase()): false;
    }

 private static String byteToStr(byte[] digest) {
         // TODO Auto-generated method stub
         String strDigest = "";
         for(int i = 0; i < digest.length; i++){
             strDigest += byteToHexStr(digest[i]);
         }
         return strDigest;
     }
     private static String byteToHexStr(byte b) {
         
         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[(b >>> 4) & 0X0F];
         tempArr[1] = Digit[b & 0X0F];
           
         String s = new String(tempArr);
         return s;
     }
    

注意是servlet的get请求地址写对,token一致,地址是80端口并且能 外网访问就没问题了,token就能验证成功。

最新文章

  1. Java Thread wait, notify and notifyAll Example
  2. DOM查找元素
  3. 通过jQuery的比较来认识AngularJS
  4. Vi命令:如何删除全部内容?
  5. 错误修改/etc/fstab,导致系统无法开机
  6. 【Linux】LAMP环境的搭建
  7. 利用开源框架Volley来下载文本和图片。
  8. 为steghide实现字典破解功能
  9. ajax请求响应中用window.open打开新窗口会被浏览器拦截的解决方式
  10. 设计模式六大原则(4):接口隔离原则(Interface Segregation Principle)
  11. 【C语言探索之旅】 第一部分第七课:循环语句
  12. 【Yom框架】漫谈个人框架的设计之二:新的IRepository接口+搜索和排序解耦(+基于Castle实现)
  13. 利用python写一个简单的小爬虫 爬虫日记(1)(好好学习)
  14. python 开发之路 - 入门
  15. [Tom and Bag][需要记录过程的dp]
  16. gps相关的知识
  17. scrapy-redis(一)
  18. log4net 本地环境没问题 生产环境无法输出日志
  19. c#实现word,excel转pdf代码及部分Office 2007文件格式转换为xps和pdf代码整理
  20. python-ConfigParser模块--转载

热门文章

  1. iOS 单例模式简单实例
  2. 文本处理三剑客之 grep/egrep
  3. 尝试用docker上的jenkins
  4. WPF开发学习笔记
  5. [arc081F]Flip and Rectangles-[黑白染色]
  6. 矩阵类的python实现
  7. idea web项目debug模式实时更新按钮不生效原因
  8. Python之面向对象的组合、多态、菱形问题、子类中重用父类的两种方式
  9. Excel表格生成sql语句
  10. (2017)你最不建议使用的Python Web框架?