上回说到 接口连接成功,接下来是真正的开发了。

消息的接收,整个过程就是关注订阅号的用户在微信订阅号中发送消息,微信服务器接收到消息,将消息发给开发者的服务器,服务器接收消息然后可以根据内容进行回复。

上代码,同样是在weixin.java的servlet中doPOst方法中接收消息

目录

public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

//接收微信服务器传来的报文
        request.setCharacterEncoding("utf-8");
        String notityXml = "";
        String inputLine;
        try {
            while ((inputLine = request.getReader().readLine()) != null) {//将消息一行行读入
                notityXml += inputLine;//将一行行的 xml数据存入字符串中
            }
            request.getReader().close();
        } catch (Exception e) {
            e.printStackTrace();
        }

System.out.println("接收到的报文:" + notityXml);//下面是对xml报文你的解析
        Map m = parseXmlToList2(notityXml);//该函数将xml报文的项和值存入map数组中
        System.out.println("接收的用户消息:"+m.get("Content").toString());
        String receive=m.get("Content").toString();//得到用户输入的内容

//将接收xml格式的字符串存入map 数组中
     private static Map parseXmlToList2(String xml) {
            Map retMap = new HashMap();
            try {
                StringReader read = new StringReader(xml);
                // 创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
                InputSource source = new InputSource(read);
                // 创建一个新的SAXBuilder
                SAXBuilder sb = new SAXBuilder();
                // 通过输入源构造一个Document
                Document doc = (Document) sb.build(source);
                Element root = doc.getRootElement();// 指向根节点
                List<Element> es = root.getChildren();
                if (es != null && es.size() != 0) {
                    for (Element element : es) {
                        retMap.put(element.getName(), element.getValue());
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return retMap;
        }

接下来是根据用户发送的内容进行回复,回复的是带参数的xml格式的报文

//根据消息自动回复
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter pw = response.getWriter();
        
        StringBuffer replyMsg = new StringBuffer();
        String returnXml = null;
        
        if(receive.equals("1")){
            replyMsg=replyMsg.append("我长得帅吗?");
            returnXml = getReplyTextMessage(replyMsg.toString(), m.get("FromUserName").toString(), m.get("ToUserName").toString());

}
        else if(receive.equals("2")){
            replyMsg=replyMsg.append("我长得帅吗?");
            returnXml = getReplyPicMessage(m.get("FromUserName").toString(), m.get("ToUserName").toString());

}
        else{
            replyMsg=replyMsg.append("发送1:回答问题,发送2:收到图片");
            returnXml = getReplyTextMessage(replyMsg.toString(), m.get("FromUserName").toString(), m.get("ToUserName").toString());

}
        pw.println(returnXml);

 //    得到转化格式的恢复的文本消息
     private String getReplyTextMessage(String content, String fromUserName,String toUserName)
     {
        ReplyTextMessage we = new ReplyTextMessage();
        we.setMessageType("text");
        we.setFuncFlag("0");
        we.setCreateTime(new Long(new Date().getTime()).toString());
        we.setContent(content);
        we.setToUserName(fromUserName);  
        we.setFromUserName(toUserName);
        XStream xstream = new XStream(new DomDriver());
        xstream.alias("xml", ReplyTextMessage.class);
        xstream.aliasField("ToUserName", ReplyTextMessage.class, "toUserName");
        xstream.aliasField("FromUserName", ReplyTextMessage.class, "fromUserName");
        xstream.aliasField("CreateTime", ReplyTextMessage.class, "createTime");
        xstream.aliasField("MsgType", ReplyTextMessage.class, "messageType");
        xstream.aliasField("Content", ReplyTextMessage.class, "content");
        xstream.aliasField("FuncFlag", ReplyTextMessage.class, "funcFlag");
        String xml =xstream.toXML(we);
        return xml;
     }
  //   得到转化格式的恢复的图片消息
     private String getReplyPicMessage(String fromUserName,String toUserName){
        
         ReplyPicMessage we = new ReplyPicMessage();
        
                  Articles articles = new Articles();
                  
                  Item item = new Item();
                  we.setMessageType("news");
                  we.setCreateTime(new Long(new Date().getTime()).toString());
                  we.setToUserName(fromUserName);  
                  we.setFromUserName(toUserName);
                  we.setFuncFlag("0");
                  we.setArticleCount(1);
                   
                  item.setTitle("俊介");
                  item.setDescription("俊介(SHUNSUKE)是Twitter上现在最流行的偶像犬,是哈多利系博美犬(即俗称英系博美),因为在网上卖萌而走红网络。");
                  item.setPicUrl("http://jiangzhongxi.tunnel.2bdata.com/weixin/junjie.jpg");
                  item.setUrl("http://baike.baidu.com/view/6300265.htm");        
                
                  articles.setItem(item);
                  we.setArticles(articles);
                   
                  XStream xstream = new XStream(new DomDriver());
                  xstream.alias("xml", ReplyPicMessage.class);
                xstream.aliasField("ToUserName", ReplyPicMessage.class, "toUserName");
                 xstream.aliasField("FromUserName", ReplyPicMessage.class, "fromUserName");
                xstream.aliasField("CreateTime", ReplyPicMessage.class, "createTime");
                 xstream.aliasField("MsgType", ReplyPicMessage.class, "messageType");
                  xstream.aliasField("Articles", ReplyPicMessage.class, "Articles");
                  
                xstream.aliasField("ArticleCount", ReplyPicMessage.class, "articleCount");
                  xstream.aliasField("FuncFlag", ReplyPicMessage.class, "funcFlag");
                  
                  xstream.aliasField("item", Articles.class, "item");
                  
                 xstream.aliasField("Title", Item.class, "title");
                xstream.aliasField("Description", Item.class, "description");
                 xstream.aliasField("PicUrl", Item.class, "picUrl");
                 xstream.aliasField("Url", Item.class, "url");
                 
                String xml =xstream.toXML(we);
                  return xml;
     }

public class Articles {

private Item item;
    public Item getItem() {
        return item;
    }
   public void setItem(Item item) {
    this.item = item;
        }
}

package com.jiang.reply;

public class Item {

private String title;
     private String description;
     private String picUrl;
     private String url;
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    public String getPicUrl() {
        return picUrl;
    }
    public void setPicUrl(String picUrl) {
        this.picUrl = picUrl;
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
}

package com.jiang.reply;

public class ReplyPicMessage {

private String toUserName;
    private String fromUserName;
    private String createTime;
    private String messageType;
    private int articleCount;
    private Articles Articles;
    public String getToUserName() {
        return toUserName;
    }
    public void setToUserName(String toUserName) {
        this.toUserName = toUserName;
    }
    public String getFromUserName() {
        return fromUserName;
    }
    public void setFromUserName(String fromUserName) {
        this.fromUserName = fromUserName;
    }
    public String getCreateTime() {
        return createTime;
    }
    public void setCreateTime(String createTime) {
        this.createTime = createTime;
    }
    public String getMessageType() {
        return messageType;
    }
    public void setMessageType(String messageType) {
        this.messageType = messageType;
    }
    public int getArticleCount() {
        return articleCount;
    }
    public void setArticleCount(int articleCount) {
        this.articleCount = articleCount;
    }
    public Articles getArticles() {
        return Articles;
    }
    public void setArticles(Articles articles) {
        Articles = articles;
    }
    public String getFuncFlag() {
        return funcFlag;
    }
    public void setFuncFlag(String funcFlag) {
        this.funcFlag = funcFlag;
    }
    private String funcFlag;
}

package com.jiang.reply;

public class ReplyTextMessage {

private String toUserName;
     private String fromUserName;
     private String createTime;
     private String messageType;
     private String content;
     public String getToUserName() {
        return toUserName;
    }
    public void setToUserName(String toUserName) {
        this.toUserName = toUserName;
    }
    public String getFromUserName() {
        return fromUserName;
    }
    public void setFromUserName(String fromUserName) {
        this.fromUserName = fromUserName;
    }
    public String getCreateTime() {
        return createTime;
    }
    public void setCreateTime(String createTime) {
        this.createTime = createTime;
    }
    public String getMessageType() {
        return messageType;
    }
    public void setMessageType(String messageType) {
        this.messageType = messageType;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public String getFuncFlag() {
        return funcFlag;
    }
    public void setFuncFlag(String funcFlag) {
        this.funcFlag = funcFlag;
    }
    private String funcFlag;
}

java微信开发之接受消息回复图片或者文本的更多相关文章

  1. PHP微信开发之模板消息回复

    参考:http://www.jb51.net/article/87269.htm 代码: <?php //$ac = file_get_contents('https://api.weixin. ...

  2. java微信开发API解析(二)-获取消息和回复消息

    java微信开发API解析(二)-获取消息和回复消息 说明 * 本演示样例依据微信开发文档:http://mp.weixin.qq.com/wiki/home/index.html最新版(4/3/20 ...

  3. 《C#微信开发系列(4)-接收 / 返回文本消息》

    4.0接收 / 返回文本消息 ①接收/返回文本消息原理说明 当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上,着手开发之前先行阅读微信公众平台接收普通消息 ...

  4. Java微信开发_00_资源汇总贴

    1.微信公众平台技术文档(https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432) 2.微信企业号开发接口文档(ht ...

  5. java微信开发

    所谓的微信开发就是在微信开发模式之下,对微信进行公众号和企业号的扩展开发.     如果要让你的微信公众号有更多的功能,比如菜单支持,自动的信息服务,查询,消息推送等,就必须开启微信的开发模式.进入微 ...

  6. 2014-07-24 .NET实现微信公众号的消息回复与自定义菜单

    今天是在吾索实习的第12天.我们在这一天中,基本实现了微信公众号的消息回复与自定义菜单的创建. 首先,是实现消息回复,其关键点如下: 读取POST来的数据流:Stream 数据流变量 = HttpCo ...

  7. 分享 Java微信开发SDK

    分享 Java微信开发SDK •发布于 4周前  •作者 朋也  •432 次浏览  •最后一次编辑是 2周前  •来自 分享 给大家分享两个java开发微信公众号的sdk jfinal-weixin ...

  8. Java微信公众号安全模式消息解密

    这篇文章主要为大家详细介绍了Java微信公众号安全模式消息解密,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1.微信公众平台下载解密工具,导入项目中,根据demo解密消息 public stat ...

  9. Java微信公众平台开发(七)--多媒体消息回复之图片回复

    之前我们在做消息回复的时候我们对回复的消息简单做了分类,前面也有讲述如何回复[普通消息类型消息],这里将讲述多媒体消息的回复方法,[多媒体消息]包含回复图片消息/回复语音消息/回复视频消息/回复音乐消 ...

随机推荐

  1. img底边空隙问题原因和解决方案(修改)

    转载自:http://www.cnblogs.com/minelucky/p/4746071.html   练习切图时发现img和父级div之间总是有2px空隙(chrome),上网搜索解决.   图 ...

  2. C++ 函数的二义性

    函数二义性是一种编译时发生的错误,造成二义性调用的原因 是在函数匹配时两个或多个函数提供的匹配一样好,编译时找 不到唯一的最佳匹配. 列: #include <iostream> usin ...

  3. 关于安装时无法重启rabbitmq服务

    如图重启时找不到rabbitmq, 解决办法: rabbitmqctl stop :停止rabbitmq  rabbitmq-server restart : 重启rabbitmq 这两步就可以完成重 ...

  4. PowerDesigner安装与使用教程

    一.安装 PD下载:http://rj.baidu.com/soft/detail/16619.html?ald 补丁下载:http://pan.baidu.com/s/1hqEDUCG 图文安装教程 ...

  5. UWP Test Webview JS interact, new window open (新窗口打开)

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Run ...

  6. 2017-2018-1 20155226 《信息安全系统设计基础》课下实践——实现mypwd

    2017-2018-1 20155226 <信息安全系统设计基础>课下实践--实现mypwd 1 学习pwd命令 输入pwd命令 发现他是给出当前文件夹的绝对路径. 于是 man 1 pw ...

  7. 20145234黄斐《Java程序设计》实验三—敏捷开发与xp实践

    1在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Code菜单,找出一项让自己感觉最好用的功能.提交截图,加上自己学号水印. public cla ...

  8. WebUploader在IE9中文件选择按钮点击没反应

    一.问题: 最近做的公司项目里,用户环境一直用的火狐,但是实际的用户群体都是银行人员 政府部门怎么也要用 IE,而且还有一些用的IE版本是古董版本IE9 IE9 相比 IE8 多了图像渲染等,无法兼容 ...

  9. 大话 .Net 之内存管理

    在一次偶然的机会中,我来到了恒生的大家庭.又在一次偶然的机会中,我很荣幸的被勇哥信任并让我写一篇季刊的文章.可能人生之中充满了无数次的偶然机会,我们只有抓住眼前的“偶然”,才可以创建人生.当我接到这个 ...

  10. 从hs_strcpy谈安全——缓冲区溢出

    对于大多数的博友来说,hs_strcpy一定会很陌生,因为这个hs_strcpy这个关键字和我的工作有挂钩.本来目前就职于恒生电子,hs_strcpy是中间件中公司定义的字符串拷贝方法,在工作业余之余 ...