java微信公众号开发总结(2)——文本消息处理
来源:互联网 发布:mac keynote 模板 编辑:程序博客网 时间:2024/06/05 17:32
接着 java微信公众号开发总结(1)——接口认证
接口认证完成后就可以正常开放公众号了,对于用户文本消息处理,根据官方文档消息格式,官方文档,文本消息格式如下:
<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报文将是(除了接口认证采用的是get方法,其他消息全部采用post方法):
<xml> <ToUserName><![CDATA[公众号的ID]]></ToUserName> <FromUserName><![CDATA[发送消息用户的ID]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[测试消息]]></Content> <MsgId>1234567890123456</MsgId> </xml>我们需要对接收到的报文进行xml解析,然后根据Content节点的内容进行相应处理,然后通过HttpServletResponse返回即可。
1.在AuthServlet.java中加入doPost方法:
@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {log.debug("接收到消息!");//设置编码格式req.setCharacterEncoding("UTF-8");resp.setCharacterEncoding("UTF-8");Map<String, String> map = null;try {//将接收的消息转换成mapmap = MessageUtil.xmlToMap(req);} catch (Exception e) {e.printStackTrace();}String toUserName = map.get("ToUserName");String fromUserName = map.get("FromUserName");String msgType = map.get("MsgType");String content = map.get("Content");String rtnMsg = null;//判断消息类型if("text".equals(msgType)) { //文本消息TextMessage textMsg = new TextMessage();textMsg.setToUserName(fromUserName);//从消息发送方在返回时变成消息接收方textMsg.setFromUserName(toUserName);textMsg.setMsgType(msgType);textMsg.setCreateTime(new Date().getTime());textMsg.setContent("您发送的消息是:" + content);//返回消息rtnMsg = MessageUtil.textMessageToXml(textMsg);log.debug("返回的消息:" + rtnMsg);resp.getWriter().print(rtnMsg);}2.新建一个TextMessage.java,这是个普通的java类:
public class TextMessage {/** 开发者微信号 **/private String ToUserName;/** 发送方帐号(一个OpenID) **/private String FromUserName;/** 消息创建时间 (整型) **/private long CreateTime;/** text **/private String MsgType;/** 文本消息内容 **/private String Content;/** 消息id,64位整型 **/private String MsgId;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 String getContent() {return Content;}public void setContent(String content) {Content = content;}public String getMsgId() {return MsgId;}public void setMsgId(String msgId) {MsgId = msgId;}}新建一个消息处理类MessageUtil.java:
public class MessageUtil {private static final Logger log = Logger.getLogger(MessageUtil.class);/** * 将xml消息转换成map * * @param req * HttpServletRequest对象 * @return 返回一个map * @throws Exception */public static Map<String, String> xmlToMap(HttpServletRequest req) throws Exception {log.debug("进入xmlToMap()");SAXReader reader = new SAXReader();Map<String, String> map = new HashMap<String, String>();InputStream is = is = req.getInputStream();Document doc = doc = reader.read(is);// 获取根元素Element root = doc.getRootElement();List<Element> list = root.elements();// 遍历元素并放到map里for (Element e : list) {map.put(e.getName(), e.getText());}is.close();log.debug("接收消息转换成map:" + map);return map;}public static String textMessageToXml(TextMessage textMsg) {XStream xstream = new XStream();// 将根元素替换成<xml>,默认根元素为<类名>xstream.alias("xml", textMsg.getClass());return xstream.toXML(textMsg);}}然后将其部署到公网服务器上即可。
这里比较麻烦的是没法调试,下节(java微信公众号开发总结(3)——调试方法总结(包括本地调试))总结一下一些调试的方法。
0 0
- java微信公众号开发总结(2)——文本消息处理
- Java微信公众平台开发(五)——文本及图文消息回复的实现
- 零java基础搞定微信Server_6:微信公众号的文本消息处理
- 零java基础搞定微信Server_6_微信公众号文本消息处理
- 微信公众号开发之文本消息自动回复
- 【JAVA微信开发】WxMessageSDK-轻量的微信公众号消息处理SDK
- 微信公众号开发手册<一>——接收消息的处理
- 微信公众号 群发文本消息
- 项目开发-微信公众号被动响应消息处理
- .net微信公众号开发——群发消息
- .net微信公众号开发——模板消息
- 微信公众号开发——模板消息
- (Java)微信之个人公众账号开发(二)——接收并处理用户消息(上)
- (Java)微信之个人公众账号开发(二)——接收并处理用户消息 (中)
- (Java)微信之个人公众账号开发(二)——接收并处理用户消息(下)
- .net 开发微信公众平台(二)-----发送文本消息
- JAVA微信公众号开发之客服消息
- 微信公众号开发(Java) ---- 客服消息发送
- zend framework 分页 Zend_Paginator 分页搜索条件
- postgresql-X2 的优点和缺点
- LeetCode 233 Number of Digit One
- LeetCode Lowest Common Ancestor of a Binary Tree
- js 时间
- java微信公众号开发总结(2)——文本消息处理
- 更新xcode后插件失效解决方法
- TableLayoutPanel删除行
- SQL 基础:Select语句,各种join,union用法
- This application is modifying the autolayout engine from a background thread...
- 10.DNS服务器搭建
- How to deal with the error message "Could not load SAPGUIResources"
- 线程同步——信号量
- 操作系统---基础题目汇总十一