zoukankan      html  css  js  c++  java
  • java微信学习 接入

    现在实习的公司要做微信开发,然而一直没安排任务,所以一直在看微信接口,记录下学习的内容

    微信开发肯定要看的就是微信公众平台开发者文档,上面有每种接口的调用格式,刚开始学习的时候自己申请了一个订阅号,个人类型的,这个玩玩还可以,学习的话,貌似有点接口没有权限调用,所以我学习的时候是用的微信测试号,至于测试号的申请,很简单,在文档里面,开发者工具下面就可以看到。

    微信开发,第一步,接入指南,看文档上面的

    当然,弄这个之前要有一个服务器,或者就应用放在网上,微信后台其实和网站开发后台差不多

    url填写域名加action的地址,比如说我的一个servlet ,

    @WebServlet("/msg")
    public class TestWeixin extends HttpServlet {

    那么我的url就应该填写 域名/msg

    token是用来校验请求是不是微信服务器发过来的,这里填写的token就是程序里面用的token,

    至于EncodingAESKey 随机生成,我自己测试接口的时候没用这个,是以明文形式,真正开发的时候应该会用这个,我还没接触正在的微信开发。

    填写完提交后,微信服务器会根据填写的url发get请求,带上4个参数signature,timestamp,nonce,echostr

    参数的作用,我就抄开发者文档的:

    signature:微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。

    timestamp:时间戳

    nonce:随机数

    echostr:随机字符串

    加密/校验流程如下:
    1. 将token、timestamp、nonce三个参数进行字典序排序
    2. 将三个参数字符串拼接成一个字符串进行sha1加密
    3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

    加密后的字符串和signature相等,则返回echostr,此时校验成功

    根据上面的步骤,可以看到,微信服务器是判断是否校验成功 是 根据 是否返回 echostr这个随机字符串的,

    如果不进行校验,直接把得到的echostr返回给微信服务器也是可以校验成功的。当然,最好还是进行校验。

    校验的代码,就是新建一个servlet

    在doGet方法里面进行校验

    @WebServlet("/msg")
    public class TestWeixin extends HttpServlet {
        private static final long serialVersionUID = 1L;
        
        private String TOKEN = "luolei";
        /**
         * @see HttpServlet#HttpServlet()
         */
        public TestWeixin() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            String signature = request.getParameter("signature");
            String timestamp = request.getParameter("timestamp");
            String nonce = request.getParameter("nonce");
            String echostr = request.getParameter("echostr");
            
            String[] str={TOKEN,timestamp,nonce};
            Arrays.sort(str);
            String yanzheng = str[0]+str[1]+str[2];
            String result = DigestUtils.sha1Hex(yanzheng.getBytes());
            if(result.equals(signature))
            {
                response.getWriter().print(echostr);
            }
            
        }

    上面的 token换成自己的token

    还有DigestUtils.sha1Hex()方法 是commons-codec  jar包里面的类。可以自己搜索怎么sha1加密,

    刚刚说了,可以不进行校验,doget里面只留:

    String echostr = request.getParameter("echostr");

    response.getWriter().print(echostr);

    这两行也是可以校验成功的

    最后上传服务器,我是用bae应用引擎,上传应用,将得到的二级域名+action的key填到url里面,token按照情况自己填写,就可以了

  • 相关阅读:
    2017ecjtu-summer training # 9 HDU 4544
    2017ecjtu-summer training #6 Gym 100952D
    HDU 1241 DFS
    集训队选拔赛 day4
    Educational Codeforces Round 67 (Rated for Div. 2)
    Codeforces Round #566 (Div. 2)
    Codeforces Round #567 (Div. 2)
    Codeforces Round #568 (Div. 2)
    Codeforces Round #569 (Div. 2)
    牛客练习赛48
  • 原文地址:https://www.cnblogs.com/luolei/p/4682647.html
Copyright © 2011-2022 走看看