201.微信公众号开发【文本消息】
因为微信消息之间传递使用的是xml,对我们来说不大方便,我们需要创建一个Message工具将它转成Map形式(接受到数据转成Map,发送数据时再转成xml)
- 将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;
}
- 将对象转成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的参数传给微信服务器即可。
- 封装关注时候的消息
// 关注的时候触发的菜单
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();
}
- 封装菜单消息
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();
}
- 修改Servlet的Post部分代码
至此,微信开发初级阶段就全部完成,如果需要公网运行,可以架设到百度BAE中。
百度BAE需要购买服务,使用SVN上传发布,切记更换了服务器后需要更换百度公众平台里的Servlet地址。
201.微信公众号开发【文本消息】相关推荐
- 微信公众号开发:消息与事件处理
在成功接入微信公众平台之后(如何接入请参考<微信公众号开发:账号申请与接入>),就可以对微信服务器POST过来的消息或者事件XML数据包进行监听与处理了. 在<微信公众号开发:账号申 ...
- 微信公众号开发---基础消息能力开发
微信公众号接收普通消息 1.配置开发服务器 微信公众平台->开发->开发者工具->公众平台测试账号 appid:是微信公众号的唯一标识,通过和appsecret进行验证. URL:开 ...
- 微信公众号开发--图文消息发送不显示图片的问题
使用微信公众号接口实现图文消息推送,遇到问题,不显示图片,且content内容中有英文双引号也不行 1.微信不允许有外链的图片,所以会自动过滤 2."双引号格式问题. 前端把双引号传给后端后 ...
- 微信公众号开发(消息推送)
文章目录 微信公众号开发 运行效果 微信公众号简介 注册微信公众号 注册测试公众号 搭建微信本地调试环境 微信公众号接入(校验签名) 给指定用户推送消息 网页授权获取用户openid 给指定用户发送模 ...
- 微信公众号开发Day01: 消息回复 英文励志语录回复实战
目录 0x01 订阅号 和 服务号之间的区别 0x02 申请条件 0x03 开发前的准备 0x04微信公众号后台的简单使用 0x05 接入到微信服务器 0x06 微信发送接受消息实现的原理 #消息传输 ...
- 微信公众号开发-素材/消息管理接口
开始 本文是 微信公众号开发者模式介绍及接入 的后续,如没看过前文的话,可能看本文会有些懵逼.本文主要介绍微信公众平台的素材.消息管理接口的开发.由于个人的订阅号是没有大多数接口的权限的,所以我们需要 ...
- 微信公众号开发——模板消息
一.测试环境(微信公众号测试号) 遇到很多坑MMP 1.1.首先在测试号配置如下模板样本 {{first.DATA}} 餐厅名称:{{keyword1.DATA}} 就餐人:{{keyword2.DA ...
- 微信公众号,文本消息带a标签的处理
公众号内有时候要回复,带链接的文字,要让安卓和苹果微信能识别出来,要注意两点 一.href里面是单引号 <a href='https://www.baidu.com'>点击打开百度< ...
- 实例:用C#.NET手把手教你做微信公众号开发(2)--普通消息处理之文本
上一篇文章我们完成了自己的web服务器与微信公众号服务器的对接,本篇开始处理微信用户和服务器之间的互动交流.一个用户与公众号之间,无外乎用户向公众号发送信息.点击公众号里的菜单和链接,或者公众号向用户 ...
最新文章
- 来吧,用设计模式来干掉 if-else
- 【N版】openstack——认证服务keystone(三)
- BTN事件的响应区域
- 三、单一职责原则、开放-封闭原则、依赖倒转原则
- 【渝粤题库】陕西师范大学500018 物理实验研究 作业(专升本)
- 取某个单元格的值_vba中如何进行单元格复制,Copy方法使用介绍,一定要学
- python——rang函数、for、braek循环
- 2,数据类型,约束条件
- gnome3 修改桌面背景图片模式
- nginx1.6.2编译安装
- 自考 《计算机网络原理04741》真题解析
- [生存志] 第6节 第一篇 以史为鉴 明朝事的读后心得
- 这是我见过最好的唐诗,而且通俗易懂
- 110 AddressBook
- 量化派周灏:从物理博士到科技公司 CEO,不变的是“格物致理”...
- 程序员的焦虑!承认吧!你不是不行,你是不敢
- 拼多多校招----最大乘积(python)
- Logback 学习笔记
- dg打开软件Android,DG 文件扩展名: 它是什么以及如何打开它?
- Arduino定义数组,求数组长度,