微信公众号入门笔记(二)响应文本消息

作者:zhutulang

 

在这篇中,笔者将介绍如何让你的公众号响应接收到的文本消息。

 

在第一篇中,我们配置了url。于是当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。

 

如果你看了文档,那么你会知道,发送文本消息时,微信发送的是类似下面的xml数据包:

 

 <xml>
 <ToUserName><![CDATA[toUser]]></ToUserName>
 <FromUserName><![CDATA[fromUser]]></FromUserName>
 <CreateTime>1348831860</CreateTime>
 <MsgType><![CDATA[text]]></MsgType>
 <Content><![CDATA[this is atest]]></Content>
 <MsgId>1234567890123456</MsgId>
 </xml>


 

它们的含义如下:

参数

描述

ToUserName

开发者微信号

FromUserName

发送方帐号(一个OpenID

CreateTime

消息创建时间 (整型)

MsgType

text

Content

文本消息内容

MsgId

消息id,64位整型

 

 

我们在第一篇中写的controller里没有写post方法,那么现在,我们就要提供一个post方法。当普通微信用户A向我们的公众号发送一段文本之后,controller里的post方法就会接收到该请求。我们可以稍微处理下,然后用同样的xml格式返回,微信服务器就会收到该响应。如果说我们要对A用户做出回应,这里有一点要注意的是,我们返回的xml数据中,要记得把ToUserName FromUserName 交换。这个很好理解,因为,我们收到的数据包,发送方是A,接收方是我们的公众号,而我们回应时,发送方是我们的公众号,而接收方是A。记住喽!

 

这么看来,这个post方法实在是太简单了,不是吗?以我这里的例子来说,当我收到文本消息内容Content后,如果Content是1,那么我给A回应“you are the onlyone!”,否则回应"你发给我的信息是:"+Content 。

 

Post方法如下,至于解析xml和生成xml不是我们说的重点,具体请看详细代码。

 

 @RequestMapping(method =RequestMethod.POST) 
             public void post(HttpServletRequestrequest, HttpServletResponse response) {   
                      try{
                                     request.setCharacterEncoding("UTF-8");
                                     response.setCharacterEncoding("UTF-8");
                            }catch (UnsupportedEncodingException e1) {
                                     //TODO Auto-generated catch block
                                     e1.printStackTrace();
                            }
                      PrintWriterout = null; 
                 try {
                          out= response.getWriter(); 
                          StringresponseMsg = null;
                  
                          TextMsgParserHandlertextMsgParserHandler = new TextMsgParserHandler();
                          TextMsgtextMsg = textMsgParserHandler.getTextMsg(request.getInputStream());
                          Stringcontent = textMsg.getContent();
                          log.info("收到的文本信息是:"+content);
                          if(content.equals("1")){
                                    responseMsg= "you are the only one!";
                          }else{
                                    responseMsg= "你发给我的信息是:"+content;
                          }
                     textMsg.setContent(responseMsg);
                    
                     //注意这里发送者和接收者交换
                     String fromUserName = textMsg.getFromUserName();
                     String toUserName =textMsg.getToUserName();
                    textMsg.setFromUserName(toUserName);
                    textMsg.setToUserName(fromUserName);
                    
                     //将textMsg 转换成xml字符串
                     String responseXml =TextMsgWriter.getXmlString(textMsg);
                          out.print(responseXml);
                    log.info("response="+responseXml);  
                 } catch (Exception e) {
                     e.printStackTrace(); 
                 } finally { 
                     out.close(); 
                     out = null; 
                 } 
             }

            

 

看哥的截图:

 


 其它相关代码可查看:

http://download.csdn.net/detail/zhutulang/9423587


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值