因为微信消息之间传递使用的是xml,对我们来说不大方便,我们需要创建一个Message工具将它转成Map形式(接受到数据转成Map,发送数据时再转成xml)

  1. 将xml 转Map(用到dom4j架包)

//将xml转成Map

public static Map<String,String> xmlToMap(HttpServletRequest request){

Map<String, String> map = new HashMap<String, String>();

SAXReader reader = new SAXReader();

try {

//获取request输入流

InputStream is = request.getInputStream();

//从输入流中读取到整个文档

Document doc  = reader.read(is);

//从文档中获取根节点

Element  root = doc.getRootElement();

//获取跟节点下面的所有节点

List<Element> list  =  root.elements();

//遍历List放入Map集合

for(Element e:list){

map.put(e.getName(), e.getText());

}

is.close();

} catch (IOException e) {

e.printStackTrace();

} catch (DocumentException e) {

e.printStackTrace();

}

return map;

}

  1. 将对象转成xml文件(用到xstream架包)【特别注意:微信需求的xml区分大小写】

//将对象类型转成xml

public static String textMessageToXml(TextMessage textMessage){

XStream xStream = new XStream();

xStream.alias("xml", textMessage.getClass());//作用是将xml根元素改成xml

return xStream.toXML(textMessage);

}

然后根据xml内容创建一个文本对象(TextMessage) 设置好SET和GET方法

public class TextMessage {//由于xml区分大小写,所以这里创建属性的时候首字母也大写

private String ToUserName;

private String FromUserName;

private Long CreateTime;

private String MsgType;

private String Content;

private String MsgId;

}

在开发模式下实现数据的接收和响应(在doPost中进行接收和响应)

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

request.setCharacterEncoding("UTF-8");

response.setCharacterEncoding("UTF-8");

PrintWriter out  = response.getWriter();//

Map<String,String> map = MessageUtil.xmlToMap(request);

String fromUserName = map.get("FromUserName");

String toUserName = map.get("ToUserName");

String msgType = map.get("MsgType");

String content = map.get("Content");

String message = null;

if("text".equals(msgType)){//判断是不是文本消息

TextMessage textMessage = new TextMessage();

textMessage.setFromUserName(toUserName);//注意从哪里发出就要发给谁,反的

textMessage.setToUserName(fromUserName);

textMessage.setMsgType("text");

textMessage.setCreateTime(new Date().getTime());

textMessage.setContent("您发送的消息是"+content);

message = MessageUtil.textMessageToXml(textMessage);

System.out.println(message);

MinaClient.sendMinaMessage(content);//发送数据

}

out.print(message);//注意要返回给微信服务器

out.close();

}

到此基本接入已经完成。

可以回复的消息类型:

 

因此我们在消息工具类(MessageUtil)建立各种消息类型的常量:

// 消息类型常量

public static final String MESSAGE_TEXT = "text";

public static final String MESSAGE_IMAGE = "image";

public static final String MESSAGE_VOICE = "voice";

public static final String MESSAGE_VIDEO = "video";

public static final String MESSAGE_LINK = "link";

public static final String MESSAGE_LOCATION = "location";

public static final String MESSAGE_EVENT = "event";

public static final String MESSAGE_SUBSCRIBE = "subscribe";// 关注

public static final String MESSAGE_UNSUBSCRIBE = "unsubscribeun";// 取消关注

public static final String MESSAGE_CLICK = "CLICK";// 点击事件

public static final String MESSAGE_VIEW = "VIEW";

第九步:对每次发送的消息进行封装

// 将消息接收封装

public static String initText(String toUserName, String fromUserName, String content) {

TextMessage textMessage = new TextMessage();

textMessage.setFromUserName(toUserName);// 注意从哪里发出就要发给谁,反的

textMessage.setToUserName(fromUserName);

textMessage.setMsgType(MessageUtil.MESSAGE_TEXT);

textMessage.setCreateTime(new Date().getTime());

textMessage.setContent(content);

return textMessageToXml(textMessage);

}

下面只有有消息就封装成content作为initText的参数传给微信服务器即可。

  1. 封装关注时候的消息

// 关注的时候触发的菜单

public static String onSubscribeMenuText() {

StringBuffer sb = new StringBuffer();

sb.append("终于等到你,还好我没放弃!\n");

sb.append("请按照菜单提示操作:\n\n");

sb.append("1.南泰简介\n");

sb.append("2.功能介绍\n");

sb.append("回复?调出此菜单");

return sb.toString();

}

  1. 封装菜单消息

public static String njusttzIntroduceText() {// 按1返回南泰介绍

StringBuffer sb = new StringBuffer();

sb.append("南京理工大学泰州科技学院由国家首批“211工程”重点建设院校——南京理工大学与泰州市人民政府于2004年合作创办," + "是一所以工为主,工、经、管、文、艺等多学科综合配套、协调发展的全日制本科高校。学校围绕建设特色鲜明的高水平应用技术大学的奋斗目标,坚持“明体达用”的教育理念,秉持“帮助学生发挥优势潜能”的育人宗旨,培养高层次技术与管理人才。学校被教育部吸纳为全国CDIO工程教育改革试点高校,被誉为“工程师的摇篮”。");

return sb.toString();

}

public static String accountIntroduceText() {// 按2返回公众号功能介绍

StringBuffer sb = new StringBuffer();

sb.append("具体功能正在上线的途中...");

return sb.toString();

}

public static String menuReturnText() {//回复?时候返回

StringBuffer sb = new StringBuffer();

sb.append("请按照菜单提示操作:\n\n");

sb.append("1.南泰简介\n");

sb.append("2.功能介绍\n");

sb.append("回复?调出此菜单");

return sb.toString();

}

  1. 修改Servlet的Post部分代码

至此,微信开发初级阶段就全部完成,如果需要公网运行,可以架设到百度BAE中。

百度BAE需要购买服务,使用SVN上传发布,切记更换了服务器后需要更换百度公众平台里的Servlet地址。

201.微信公众号开发【文本消息】相关推荐

  1. 微信公众号开发:消息与事件处理

    在成功接入微信公众平台之后(如何接入请参考<微信公众号开发:账号申请与接入>),就可以对微信服务器POST过来的消息或者事件XML数据包进行监听与处理了. 在<微信公众号开发:账号申 ...

  2. 微信公众号开发---基础消息能力开发

    微信公众号接收普通消息 1.配置开发服务器 微信公众平台->开发->开发者工具->公众平台测试账号 appid:是微信公众号的唯一标识,通过和appsecret进行验证. URL:开 ...

  3. 微信公众号开发--图文消息发送不显示图片的问题

    使用微信公众号接口实现图文消息推送,遇到问题,不显示图片,且content内容中有英文双引号也不行 1.微信不允许有外链的图片,所以会自动过滤 2."双引号格式问题. 前端把双引号传给后端后 ...

  4. 微信公众号开发(消息推送)

    文章目录 微信公众号开发 运行效果 微信公众号简介 注册微信公众号 注册测试公众号 搭建微信本地调试环境 微信公众号接入(校验签名) 给指定用户推送消息 网页授权获取用户openid 给指定用户发送模 ...

  5. 微信公众号开发Day01: 消息回复 英文励志语录回复实战

    目录 0x01 订阅号 和 服务号之间的区别 0x02 申请条件 0x03 开发前的准备 0x04微信公众号后台的简单使用 0x05 接入到微信服务器 0x06 微信发送接受消息实现的原理 #消息传输 ...

  6. 微信公众号开发-素材/消息管理接口

    开始 本文是 微信公众号开发者模式介绍及接入 的后续,如没看过前文的话,可能看本文会有些懵逼.本文主要介绍微信公众平台的素材.消息管理接口的开发.由于个人的订阅号是没有大多数接口的权限的,所以我们需要 ...

  7. 微信公众号开发——模板消息

    一.测试环境(微信公众号测试号) 遇到很多坑MMP 1.1.首先在测试号配置如下模板样本 {{first.DATA}} 餐厅名称:{{keyword1.DATA}} 就餐人:{{keyword2.DA ...

  8. 微信公众号,文本消息带a标签的处理

    公众号内有时候要回复,带链接的文字,要让安卓和苹果微信能识别出来,要注意两点 一.href里面是单引号 <a href='https://www.baidu.com'>点击打开百度< ...

  9. 实例:用C#.NET手把手教你做微信公众号开发(2)--普通消息处理之文本

    上一篇文章我们完成了自己的web服务器与微信公众号服务器的对接,本篇开始处理微信用户和服务器之间的互动交流.一个用户与公众号之间,无外乎用户向公众号发送信息.点击公众号里的菜单和链接,或者公众号向用户 ...

最新文章

  1. 来吧,用设计模式来干掉 if-else
  2. 【N版】openstack——认证服务keystone(三)
  3. BTN事件的响应区域
  4. 三、单一职责原则、开放-封闭原则、依赖倒转原则
  5. 【渝粤题库】陕西师范大学500018 物理实验研究 作业(专升本)
  6. 取某个单元格的值_vba中如何进行单元格复制,Copy方法使用介绍,一定要学
  7. python——rang函数、for、braek循环
  8. 2,数据类型,约束条件
  9. gnome3 修改桌面背景图片模式
  10. nginx1.6.2编译安装
  11. 自考 《计算机网络原理04741》真题解析
  12. [生存志] 第6节 第一篇 以史为鉴 明朝事的读后心得
  13. 这是我见过最好的唐诗,而且通俗易懂
  14. 110 AddressBook
  15. 量化派周灏:从物理博士到科技公司 CEO,不变的是“格物致理”...
  16. 程序员的焦虑!承认吧!你不是不行,你是不敢
  17. 拼多多校招----最大乘积(python)
  18. Logback 学习笔记
  19. dg打开软件Android,DG 文件扩展名: 它是什么以及如何打开它?
  20. Arduino定义数组,求数组长度,

热门文章

  1. PCL函数库摘要——关键点
  2. 什么软件可以测试电池充电次数,iPhone电池循环次数查询软件
  3. MATLAB---构造一个插值三次样条曲线
  4. 众昂矿业赋能新能源暨氟化工产业高峰论坛圆满举行
  5. Java WEB练习
  6. 读书:《有无之境:王阳明哲学的精神》
  7. 赚钱,一定要对自己狠
  8. 心态-《积极的力量》书中的精髓:如何保持积极乐观的心态,从而提升我们的幸福感?
  9. 信息论与编码_信息与编码系列(五)不可靠信道——决策法则、Hamming距离与信息论基本定理...
  10. 论文理解记录:The Lottery Ticket Hypothesis