zoukankan      html  css  js  c++  java
  • springboot与微信开发(二)

    关注、接收和发送消息

    上一节讲述了配置接口,这次看一下关注、接收和发送消息。
    我们先看效果图在这里插入图片描述
    在这里插入图片描述
    在上一次的controller里面加上:

     @PostMapping("/wx")
        public void doPost(HttpServletRequest request, HttpServletResponse response) {
            response.setCharacterEncoding("utf-8");
            PrintWriter out = null;
            //将微信请求xml转为map格式,获取所需的参数
            Map<String, String> map = MessageUtil.xmlToMap(request);
            String ToUserName = map.get("ToUserName");
            String FromUserName = map.get("FromUserName");
            String MsgType = map.get("MsgType");
            String Content = map.get("Content");
            String Event = map.get("Event");
            String message = null;
          
            if ("subscribe".equals(Event)) {
                message = MessageUtil.subscribeMessage(FromUserName, ToUserName);
            } else if ("unsubscribe".equals(Event)) {
                return;
            } else if ("text".equals(MsgType)) {
                //用户输入特定内容,输入1,回复相应的封装的内容
                if ("1".equals(Content)) {
                    message = MessageUtil.initMessage(FromUserName, ToUserName);
                } else {
                    //用户发来其他消息处理
                    message = MessageUtil.reversalMessage(FromUserName, ToUserName, Content);
                }
            }
            try {
                out = response.getWriter();
                out.write(message);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    

    model里面则为:

    
    public class BaseMessage {
        protected String ToUserName;
        protected String FromUserName;
        protected long CreateTime;
        protected String MsgType;
    
        public BaseMessage() {
            super();
        }
    
        public String getToUserName() {
            return ToUserName;
        }
    
        public void setToUserName(String toUserName) {
            ToUserName = toUserName;
        }
    
        public String getFromUserName() {
            return FromUserName;
        }
    
        public void setFromUserName(String fromUserName) {
            FromUserName = fromUserName;
        }
    
        public long getCreateTime() {
            return CreateTime;
        }
    
        public void setCreateTime(long createTime) {
            CreateTime = createTime;
        }
    
        public String getMsgType() {
            return MsgType;
        }
    
        public void setMsgType(String msgType) {
            MsgType = msgType;
        }
    }
    

    另外一个model:

    package com.xbjs.wechat.model;
    
    public class MessageText extends BaseMessage {
        private String Content;//文本消息内容
    
        private String MsgId;//消息id,64位整型
    
        public MessageText() {
    
        }
    
        public MessageText(String toUserName, String fromUserName,
                           long createTime, String msgType, String content, String msgId) {
            super();
            ToUserName = toUserName;
            FromUserName = fromUserName;
            CreateTime = createTime;
            MsgType = msgType;
            Content = content;
            MsgId = msgId;
        }
    
        public String getContent() {
            return Content;
        }
    
        public void setContent(String content) {
            Content = content;
        }
    
        public String getMsgId() {
            return MsgId;
        }
    
        public void setMsgId(String msgId) {
            MsgId = msgId;
        }
    
    }
    
    

    再看看微信消息工具:

    /**
     * @author zxc
     * @Title: MessageUtil
     * @ProjectName wechat
     * @Description: 处理消息
     * @date 2018/10/295:10 PM
     */
    public class MessageUtil {
    
        public static Map<String, String> xmlToMap(HttpServletRequest request) {
            Map<String, String> map = new HashMap<>();
            SAXReader reader = new SAXReader();
            InputStream inputStream = null;
            try {
                inputStream = request.getInputStream();
                Document document = reader.read(inputStream);
                Element root = document.getRootElement();
                List<Element> elementList = root.elements();
                for (Element element : elementList) {
                    map.put(element.getName(), element.getText());
                }
            } catch (IOException e) {
                e.printStackTrace();
            } catch (DocumentException e) {
                e.printStackTrace();
            } finally {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return map;
        }
    
        /**
         * 将发送消息封装成对应的xml格式
         */
        public static String messageToxml(MessageText message) {
            XStream xstream = new XStream();
            xstream.alias("xml", message.getClass());
            return xstream.toXML(message);
        }
    
        /**
         * 封装发送消息对象,封装时,需要将调换发送者和接收者的关系
         *
         * @param FromUserName
         * @param ToUserName
         */
        public static String initMessage(String FromUserName, String ToUserName) {
            MessageText text = new MessageText();
            text.setToUserName(FromUserName);
            text.setFromUserName(ToUserName);
            text.setContent("fuck");
            text.setCreateTime(new Date().getTime());
            text.setMsgType("text");
            return messageToxml(text);
        }
    
        /**
         * 封装发送消息对象,封装时,需要将调换发送者和接收者的关系
         *
         * @param FromUserName
         * @param ToUserName
         */
        public static String subscribeMessage(String FromUserName, String ToUserName) {
            MessageText text = new MessageText();
            text.setToUserName(FromUserName);
            text.setFromUserName(ToUserName);
            text.setContent("欢迎关注");
            text.setCreateTime(new Date().getTime());
            text.setMsgType("text");
            return messageToxml(text);
        }
        /**
         * 封装发送消息对象,封装时,需要将调换发送者和接收者的关系
         *
         * @param FromUserName
         * @param ToUserName
         * @param Content
         */
        public static String reversalMessage(String fromUserName, String toUserName, String Content) {
            MessageText text = new MessageText();
            text.setToUserName(fromUserName);
            text.setFromUserName(toUserName);
            text.setContent("您发的消息为:" + Content);
            text.setCreateTime(new Date().getTime());
            text.setMsgType("text");
            return messageToxml(text);
        }
    }
    
    

    这里先将收到的消息转为了map,使用
    <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> </dependency>
    微信官方消息为xml结构:

    接收消息

    <xml>
     <ToUserName><![CDATA[toUser]]></ToUserName>
     <FromUserName><![CDATA[fromUser]]></FromUserName>
     <CreateTime>1248861860</CreateTime>
     <MsgType><![CDATA[text]]></MsgType>
     <Content><![CDATA[this is a test]]></Content>
     <MsgId>789456126411</MsgId>
     </xml>
    

    发送消息

    
    <xml>
     
    <ToUserName><![CDATA[toUser]]></ToUserName>
     
    <FromUserName><![CDATA[fromUser]]></FromUserName>
     
    <CreateTime>816451315</CreateTime>
     
    <MsgType><![CDATA[text]]></MsgType>
     
    <Content><![CDATA[HelloWord]]></Content>
     
    </xml>
    

    消息体转xml用到:

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

    上一节
    希望能交流更多技术,关注小白的微信公众号吧。
    在这里插入图片描述

    小白技术社
  • 相关阅读:
    百度关键词搜索量查询,百度,谷歌关键词查询工具
    推荐免费服务免费空间服务器检测
    如何成为能让大家尊重的程序员
    四天玩转windows phone开发视频之第二天总结
    用三张图片详解Asp.Net 全生命周期
    程序员该如何规划自己的人生
    博客正式开通啦!
    技术与创业不矛盾(两者是先后关系)
    工作五年的感悟
    委托与事件以及应用
  • 原文地址:https://www.cnblogs.com/xbjss/p/13326701.html
Copyright © 2011-2022 走看看