微信开发_接收消息,回复消息(3)
2016-05-12 17:42
609 查看
在前面我实现了配置微信接口的配置,将自己的订阅号的控制交给我自己控制,用户回复消息,微信的后台会通过发送一个post请求到自己的服务器,是发送一个XML
消息的接收:
文本消息(在微信的开发者文档中能看到)
自己写一个方法,解析xml,将所有的内容解析完成之后,存放在一个Map中(首先设置一下编码集),
用到的jar包:dom4j-1.6.1.jar
消息的回复
在公众号收到用户发送的消息后,进行消息的判断,然后在回复给用户,回复的格式也xml
回复消息是使用java对象进行转化,而且有些格式中的字段是都有的,所以可以生成一个父类,后面的各种类型的消息都继承这个父类
在创建了类之后,并且在要回复的信息封装好之后我们要将java对象转化成xml格式,这样要使用一个jar,帮助我们将java对象转化成xml格式的字符串:xstream-1.3.1.jar
这是测试的效果
消息的接收:
文本消息(在微信的开发者文档中能看到)
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[this is a test]]></Content> <MsgId>1234567890123456</MsgId> </xml>
自己写一个方法,解析xml,将所有的内容解析完成之后,存放在一个Map中(首先设置一下编码集),
用到的jar包:dom4j-1.6.1.jar
``` //servlet中调用 request.setCharacterEncoding("utf-8");//设置编码集 response.setCharacterEncoding("utf-8");//设置编码集 Map<String,String> map=MessageUtils.xmlToMap(request); //解析xml的方法 public static Map<String,String> xmlToMap(HttpServletRequest request){ Map<String,String> map=new HashMap<String,String>(); SAXReader reader=new SAXReader(); InputStream inputStream=null; try { inputStream = request.getInputStream(); Document document=reader.read(inputStream); Element root=document.getRootElement(); @SuppressWarnings("unchecked") List<Element> list=root.elements(); for (Element e : list) { map.put(e.getName(), e.getText()); } } catch (IOException e) { e.printStackTrace(); } catch (DocumentException e) { e.printStackTrace(); }finally{ if (inputStream!=null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } return map; } ``` 将解析微信后台发送给我的xml后得到map,再在map中取值 ``` String toUserName=map.get("ToUserName");//自己公众号的账号 String fromUserName=map.get("FromUserName");//发送消息用户的账号 String msgType=map.get("MsgType");//得到消息的类型 String content=map.get("Content");//得到文本消息的内容 /** * 消息的类型:都可以在微信的开发者文档中找到 * */ public static final String MESSAGE_TEXT="text";//文本消息 public static final String MESSAGE_VOICE="voice";//语音消息 public static final String MESSAGE_MUSIC="music";//音乐 public static final String MESSAGE_SHORTVIDEO="shortvideo";//视频 public static final String MESSAGE_LOCATION="location";//地理位置 public static final String MESSAGE_LINK="link";//链接 public static final String MESSAGE_IMAGE="image";//图片 public static final String MESSAGE_EVENT="event";//事件 public static final String MESSAGE_SUBSCRIBE="subscribe";//关注事件 public static final String MESSAGE_UNSUBSCRIBE="unsubscribe";//取消关注事件 public static final String MESSAGE_NEWS="news";//图文 public static final String MESSAGE_CLICK = "CLICK";//菜单的点击事件 public static final String MESSAGE_VIEW = "VIEW";//菜单的跳转 public static final String MESSAGE_SCANCODE= "scancode_push";//扫描二维码事件 ```
消息的回复
在公众号收到用户发送的消息后,进行消息的判断,然后在回复给用户,回复的格式也xml
回复消息是使用java对象进行转化,而且有些格式中的字段是都有的,所以可以生成一个父类,后面的各种类型的消息都继承这个父类
//文本消息的格式 <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[你好]]></Content> </xml> //父类 public class BaseMessage { private String ToUserName;// 给哪个账号 private String FromUserName;// 来自哪个账号 private long CreateTime;// 创建时间 private String MsgType;// 消息类型 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; } } //回复的文本信息 public class TextMessage extends BaseMessage{ private String Content;// 文本内容 private String MsgId;// 消息ID public String getContent() { return Content; } public void setContent(String content) { Content = content; } public String getMsgId() { return MsgId; } public void setMsgId(String msgId) { MsgId = msgId; } @Override public String toString() { return "TextMessage [Content=" + Content + ", MsgId=" + MsgId + "]"; } }
在创建了类之后,并且在要回复的信息封装好之后我们要将java对象转化成xml格式,这样要使用一个jar,帮助我们将java对象转化成xml格式的字符串:xstream-1.3.1.jar
/** * 将文本对象转化为xml * @param textMessage * @return */ public static String textMessageToXml(TextMessage baseMessage){ XStream stream=new XStream(); stream.alias("xml", baseMessage.getClass()); return stream.toXML(baseMessage); } //封装回复的消息 TextMessage message=new TextMessage(); message.setFromUserName(toUserName);//这里填写的自己的账号,也就是前面的toUserName message.setToUserName(fromUserName);//填写给那个用户,也就是前面的fromUserName message.setMsgType("text");//消息的类型 message.setCreateTime(new Date().getTime());//时间 message.setContent("你好,欢迎关注我的微信公众号!"); String xmlMessage=MessageUtils.textMessageToXml(message);//将java对象转化成xml格式的字符串 if(xmlMessage!=null && !"".equals(xmlMessage)){ out.print(xmlMessage);//输出字符串 } out.flush(); out.close();
这是测试的效果
相关文章推荐
- 社交巨头三国杀:微信、WhatsApp、Line到底有啥区别?
- 微信悄悄升级群聊功能:个人微信营销号的福音
- 突击部队拼多多
- 我是运营,我没有假期
- 如何做到日消息量100万的微信公众号?
- 论微信取消推送功能的可能性(原创)
- 微信的成功,靠的是QQ导流吗?
- 「Linux 中国」2018 微信文章排行榜
- 马化腾亲自“站台” 企业微信和个人微信互通能带来什么?
- 一个微信群的兴亡
- 微信服务号推送模板消息接口
- 我也有微信朋友圈了 Android实现
- PHP限制页面只能在微信自带浏览器访问的代码
- HTML5实现微信拍摄上传照片功能
- 微信小程序去哪里找 小程序到底如何使用(附小程序名单)
- 使用jQuery.wechat构建微信WEB应用
- 使用JavaScript脚本判断页面是否在微信中被打开