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

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

上代码,同样是在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. Linux Shell常用技巧(五)

    十一.  awk编程:    1.  变量:    在awk中变量无须定义即可使用,变量在赋值时即已经完成了定义.变量的类型可以是数字.字符串.根据使用的不同,未初始化变量的值为0或空白字符串&quo ...

  2. Oracle ora-12514监听程序当前无法识别连接描述中请求的错误

    昨天刚安装好oracle数据库,还可以登录,到今天,登录时就发出了这样的错误 到网上找了半天,上面都是说监听器服务的问题,但是试过后依旧不行.最后重启了一次,就解决了异常 原来是oracle中一个服务 ...

  3. DML-插入

    插入的方式一: 语法: insert into 表名(字段)values(值); 特点: 1.要求表明括号里的属性和values括号里的属性一致或兼容 2.字段的个数和顺序不一定与原始表中的字段个数和 ...

  4. SEO优化上首页之搜索引擎作弊案例与反作弊原理

    搜索引擎流量价值巨大,有不少人专门研究排名机制,利用搜索引擎漏洞作弊,寻求快速提高网站排名,进而获取更多的流量和利益,甚至有的网站优化公司专门提供作弊服务.搜索引擎为了杜绝这种情况,必须能过滤大量垃圾 ...

  5. mssqlserver的md5函数

    参考:https://www.cnblogs.com/JuneZhang/p/6396896.html?utm_source=itdadao&utm_medium=referral 简单说明: ...

  6. 对control file的学习笔记

    SQL> startup nomount;startup nomount;ORACLEインスタンスが起動しました. Total System Global Area 521936896 byte ...

  7. 深度学习—caffe框架训练文档

    转存:LMDB E:\机器学习2\caffe资料\caffe_root\caffe-master\Build\x64\Release>convert_imageset.exe E:/机器学习2/ ...

  8. 初窥Linux之我最常用的20条命令

    1.cd命令   这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径.如: cd /root/Docements # 切 ...

  9. $(document)和$(window)各是什么意思?

    jquery中的对象$(document) 是当前文档,就是你看到的整个网页$(window) 如果没有框架则就是你浏览的当前浏览器的窗口 将document, window转换为jquery对象 比 ...

  10. adb server version (31) doesn't match this client (39) 解决方案

    adb server version (31) doesn't match this client (39) 问题的解决方案, 在cmd中输入adb nodaemon server -a后解决了, 记 ...