美文网首页
企业微信验证get和回调post传xml

企业微信验证get和回调post传xml

作者: Aluha_f289 | 来源:发表于2019-07-17 21:06 被阅读0次

    1、controller

    /**
         * 接收企业微信信息
         * @param map
         * @return
         */
        @RequestMapping(value = "/pom-attendances/getWeChatInfo/", method = { RequestMethod.GET, RequestMethod.POST })
        @Timed
        public Map<String, Object> getWeChatInfo(HttpServletRequest request, HttpServletResponse response) {
            Map<String, Object> mapResult = null;
            pomAttendanceService.getWeChatInfo(request, response);
            
            return mapResult;
        }
    

    2、实现类

    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    
    /**
         * 接收企业微信信息
         * @param map
         * @return
         */
        @Override
        public void getWeChatInfo(HttpServletRequest request, HttpServletResponse response) {
            System.out.println("******************************");
            //判断当前请求时GET还POST
            boolean isGet = request.getMethod().toLowerCase().equals("get");
            String sToken = applicationPomProperties.getsToken();
            String sCorpID = applicationPomProperties.getCorpid();
            String sEncodingAESKey = applicationPomProperties.getsEncodingAESKey();
            PrintWriter out = null;
            try {
                response.setContentType("text/html;charset=utf-8");
                request.setCharacterEncoding("utf-8");
                WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(sToken, sEncodingAESKey, sCorpID);
                //获取企业微信验证url参数
                String msg_signature = request.getParameter("msg_signature");
                String timestamp = request.getParameter("timestamp");
                String nonce = request.getParameter("nonce");
                String echostr = request.getParameter("echostr");
                
                out = response.getWriter();
                String sEchoStr; // 需要返回的明文
                if (isGet) {
                    //验证
                    sEchoStr = wxcpt.VerifyURL(msg_signature, timestamp,nonce, echostr);
                    System.out.println("verifyurl echostr: " + sEchoStr);
                    // 验证URL成功,将sEchoStr返回
                    out.print(sEchoStr);
                //post请求
                }else {
                    //获取post请求的数据
                    BufferedReader reader = request.getReader();
                    char[] buf = new char[512];
                    int len = 0;
                    StringBuffer contentBuffer = new StringBuffer();
                    while ((len = reader.read(buf)) != -1) {
                        contentBuffer.append(buf, 0, len);
                    }
                    String content = contentBuffer.toString();
                    if(content == null){
                        content = "";
                    }
                    
                    //解密xml
                    System.out.println(content);
                    String sMsg = wxcpt.DecryptMsg(msg_signature, timestamp, nonce, content);
                    System.out.println(sMsg);
                    Map <String, String> map = new HashMap<>();
                    Document doc;
                    try {
                        doc = DocumentHelper.parseText(sMsg);
                        Element root = doc.getRootElement();
                        // 获取根节点下的所有元素
                        List children = root.elements();
                        // 循环所有子元素
                        if (children != null && children.size() > 0) {
                            for (int i = 0; i < children.size(); i++) {
                                Element child = (Element) children.get(i);
                                //xml转Map
                                map.put(child.getName(), child.getTextTrim());
                            }
                        }
                        String key =  map.get("EventKey");
                        ZonedDateTime now = ZonedDateTime.now();
                        
                        //获取审批人姓名,id
                        String checkUserName = map.get("FromUserName").toLowerCase();
                    } catch (DocumentException e) {
                        e.printStackTrace();
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }finally {  
                try {  
                    if (out != null) {  
                        out.close();  
                    }  
                } catch (Exception e) {  
                    e.printStackTrace();  
                }  
            }  
            
        }
    

    相关文章

      网友评论

          本文标题:企业微信验证get和回调post传xml

          本文链接:https://www.haomeiwen.com/subject/wgthlctx.html