zoukankan      html  css  js  c++  java
  • 一:验证微信的Token

    前言:申请到微信公众号的同学,可能会挺感兴趣的,毕竟微信公众号,确实是一个好东西,它提供了一个很好的平台,而且它自带有一套管理模板,对于微信公众号可以很好的管理。

           但是也仅仅是很好的管理,因为作为开发者来说,很多功能需要更加人性的自定化,就需要由自己写程序来提供服务,而微信恰恰就提供了这些接口,可以方便的我们去调用微信的功能。

      于是我们去开启开发者模式

      
      点击“基本配置”,然后需要输入url,输入token,输入EncodingAESKey(这个可以随机生成),最后点击提交。

      问题:?

      奇怪的是微信这方面的文档对于这部分好像是没有任何说明(我不知道是不是我没有找到还是怎么的),我输入我个人的域名,然后输入随便输入了32位的token,然后点击随机生成EncodingAESKey,最后选择加密模式,然后点击提交,最后发现微信提示token验证失败,试过好多次,也从微信官方文档查询token这是个什么东西,最后却只得到token是一个随机的字符串,可以自由输入,结果却可想而知。

      原因!

      百度之后得到,之前输入的url,微信会对这个url发出一个http请求,而这个url,需要正确的对于这个微信的请求作出正确的响应,这样才算验证成功,这下总算弄明白了

      由于我已经有了公网的域名,也有了自己的服务器(没有服务器,没有域名的,只要申请一个空间,就可以了,空间会送一个三级域名),所以就开始写代码,这里是一个servlet,你们只要把这个servlet拷贝过去,就可以验证了,下面列出代码:

      

    import java.io.IOException;
    import java.util.Arrays;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.commons.codec.digest.DigestUtils;
    
    @WebServlet("/validateWeiXin.do")
    public class ValidateWeiXin extends HttpServlet {
        private static final long serialVersionUID = 1L;
        
        private String TOKEN = "这里随便填入32位以内的数字英文,也就是token";
           
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/plain;charset=utf-8");
            // 微信加密签名
            String signature = request.getParameter("signature");
            // 随机字符串
            String echostr = request.getParameter("echostr");
            // 时间戳
            String timestamp = request.getParameter("timestamp");
            // 随机数
            String nonce = request.getParameter("nonce");
    
            String[] str = { TOKEN, timestamp, nonce };
            Arrays.sort(str); // 字典序排序
            String bigStr = str[0] + str[1] + str[2];
            // SHA1加密,我这里用的是common-codec的jar包,你们也可以用java自带的消息消息摘要来写,只不过要多写几行代码,但结果都一样的
            DigestUtils.sha1Hex(bigStr);
            String digest = DigestUtils.sha1Hex(bigStr);
    
            // 确认请求来至微信
            if (digest.equals(signature)) {
                response.getWriter().print(echostr);
            }
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }

      有自己服务器的,就可以验证成功了

  • 相关阅读:
    知识体系总结
    计算机基础总结
    Redis总结
    Mysql总结
    JAVA基础总结
    有锁编程
    CAS
    读写自旋锁
    org.apache.log4j.Logger详解
    web.xml 中的listener、 filter、servlet 加载顺序及其详解
  • 原文地址:https://www.cnblogs.com/zhuxiaojie/p/5116552.html
Copyright © 2011-2022 走看看