美文网首页
Java-Spring Boot-微信公众号(二)用户关注

Java-Spring Boot-微信公众号(二)用户关注

作者: 唔哒喂 | 来源:发表于2021-10-05 21:37 被阅读0次

    完整代码见文末

    文末直接复制内容到自己的程序中就可运行

    本篇并未写在用户关注后如何返回内容

    用户在关注与取消关注公众号时,微信会把这个事件推送(POST)到开发者填写的URL。(与连接的URL相同,只是请求方式为Post。)


    image.png

    Maven中添加这两个jar包

            <dependency>
                <groupId>dom4j</groupId>
                <artifactId>dom4j</artifactId>
                <version>1.6.1</version>
            </dependency>
            <dependency>
                <groupId>com.thoughtworks.xstream</groupId>
                <artifactId>xstream</artifactId>
                <version>1.4.11.1</version>
            </dependency>
    

    接收微信Post的XML字段

    使用dom4j中SaxReader类读取信息

    SAXReader saxReader = new SAXReader();
    Document read = saxReader.read(req.getInputStream());
    

    将读取到的信息存入一个Map中

         //得到根节点
            Element rootElement = read.getRootElement();
                //获得子节点
            List<Element> elements = rootElement.elements();
            for (Element e:
                    elements) {
                    //将数据存进map
                map.put(e.getName(), e.getStringValue());
            }
    

    判断是否为关注

    根据官方文档,用户关注会给我们发送这些信息。


    image.png
    image.png

    在上一步中,信息已被存入Map。所以我们可以比对存入的Key为 Event对应的Value值是否为subscribe,即可得是否为用户关注。
    首先要判断一下是否包含Event这个Key,不然直接取会报错。

    if (map.containsKey("Event") && map.get("Event").equals("subscribe"))
    

    在这之后就可以做用户关注对应的处理了。

    处理关注

    我的只是简单回复一个关注的友好提示。

    这个就是微信中的返回文本信息的方式,返回文本信息见下一篇。

    见下。


    image.png

    完整代码

    Maven添加

            <dependency>
                <groupId>dom4j</groupId>
                <artifactId>dom4j</artifactId>
                <version>1.6.1</version>
            </dependency>
            <dependency>
                <groupId>com.thoughtworks.xstream</groupId>
                <artifactId>xstream</artifactId>
                <version>1.4.11.1</version>
            </dependency>
    

    接收用户关注Post(不包含返回信息)

    @PostMapping(value = "/connect")
        public void getXml(HttpServletRequest req, HttpServletResponse resp) throws IOException, DocumentException {
            req.setCharacterEncoding("UTF-8"); // 接收请求时的编码。
            resp.setCharacterEncoding("UTF-8"); // 响应给浏览器的编码。
    //        个人理解设置编码的原因是 由于 xml解析时编码要一致。
            SAXReader saxReader = new SAXReader();
            BasicInfo backInfo = null;
            XStream xStream = new XStream();
            Map<String, String> map = new HashMap<>();
            Document read = saxReader.read(req.getInputStream());
                //得到根节点
            Element rootElement = read.getRootElement();
                //获得子节点
            List<Element> elements = rootElement.elements();
            for (Element e:
                    elements) {
                    //将数据存进map
                map.put(e.getName(), e.getStringValue());
            }
    //            判断用户是否为关注
            if (map.containsKey("Event") && map.get("Event").equals("subscribe")) {
    //            处理关注
                //backInfo = wxService.setSubscribe(map);
                System.out.println("关注");
                //xStream.alias("xml", BackTextInfo.class);
            }
    

    相关文章

      网友评论

          本文标题:Java-Spring Boot-微信公众号(二)用户关注

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