微信公众号接收消息自动回复

接收

    @PostMapping("/weixin")
    public String message(HttpServletRequest request, HttpServletResponse response) throws IOException {

        Map<String,String> map = weixin.acceptMessage(request);
        System.out.println("接收到的信息:"+JsonUtil.ObjectToJson(map));

        String format = "<xml>\n" + "<ToUserName><![CDATA[%1$s]]></ToUserName>\n"
                + "<FromUserName><![CDATA[%2$s]]></FromUserName>\n"
                + "<CreateTime>%3$s</CreateTime>\n"
                + "<MsgType><![CDATA[%4$s]]></MsgType>\n"
                + "<Content><![CDATA[%5$s]]></Content>\n"
                + "</xml>";
        return String.format(format, map.get("FromUserName"), map.get("ToUserName"), new Date(), map.get("MsgType"),"飞流直下三千尺,疑是银河落九天!");
    }

处理

 @Override
    public Map<String,String> acceptMessage(HttpServletRequest request)  {
        try {
            // 处理接收消息
            InputStream in = request.getInputStream();
            ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
            byte[] buffer = new byte[1024];
            int len = -1;
            while ((len = in.read(buffer)) != -1) {
                outSteam.write(buffer, 0, len);
            }

            in.close();
            byte[] bytes = outSteam.toByteArray();
            outSteam.close();
            String xmltext = new String(bytes, StandardCharsets.UTF_8);

            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
            dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);
            dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
            dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
            dbf.setXIncludeAware(false);
            dbf.setExpandEntityReferences(false);
            DocumentBuilder db = dbf.newDocumentBuilder();
            StringReader sr = new StringReader(xmltext);
            InputSource is = new InputSource(sr);
            Document document = db.parse(is);

            Element root = document.getDocumentElement();
            HashMap<String,String> map = new HashMap<>();
            map.put("ToUserName",root.getElementsByTagName("ToUserName").item(0).getTextContent());
            map.put("FromUserName",root.getElementsByTagName("FromUserName").item(0).getTextContent());
            map.put("CreateTime",root.getElementsByTagName("CreateTime").item(0).getTextContent());
            map.put("MsgType",root.getElementsByTagName("MsgType").item(0).getTextContent());
            map.put("Content",root.getElementsByTagName("Content").item(0).getTextContent());
            map.put("MsgId",root.getElementsByTagName("MsgId").item(0).getTextContent());

            return map;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

附录:
网上使用xstream的例子:
XStream是Java类库,用来将对象序列化成XML (JSON)或反序列化为对象。XStream是自由软件,可以在BSD许可证的许可下分发。
Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架在将javaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射文件,使得XML序列化不再繁琐。

        <dependency>
            <groupId>com.thoughtworks.xstream</groupId>
            <artifactId>xstream</artifactId>
            <version>1.4.17</version>
        </dependency>

https://blog.csdn.net/u014703502/article/details/54911554

posted @ 2021-06-08 16:44  小小白兔兔  阅读(20)  评论(0编辑  收藏  举报