微信公众号--接收信息

自己申请的微信公众号来学习微信公众号的开发,至于申请的流程本来想整理一下再发出来的,但是今天碰到一个估计很多人都会碰到的小问题,就是接收文本信息时候的数据处理,在这里就顺便将微信公众号对于接收文本信息作出的一个记录。
文本消息

 <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>

参数 描述
ToUserName 开发者微信号
FromUserName 发送方帐号(一个OpenID)
CreateTime 消息创建时间 (整型)
MsgType text
Content 文本消息内容
MsgId 消息id,64位整型

这是从微信开发者文档中截出来的文档,服务器接收公众号平台以post请求发送过来的信息,开发人员需要对得到的数据进行包装后抛出。

由于刚进行对于微信公众号的开发,很多东西都没有进行更好的封装,都暴露在接口处,在后期开发的时候将会将该封装的都封装起来,让代码风格看起来更清爽。

这是我编写的接口:

@RequestMapping(value = "/valid", method = RequestMethod.POST)
    @ResponseBody
    public String accpetMessage(HttpServletRequest request)
            throws IOException {
        request.setCharacterEncoding("utf-8");
        Map<String, String> param = MessageUtil.xmlToMap(request);
        String fromUserName = param.get("FromUserName");
        String toUserName = param.get("ToUserName");
        String msgType = param.get("MsgType");
        String content = param.get("Content");
        Long createTime = Long.valueOf(param.get("CreateTime"));
        Long msgId = Long.valueOf(param.get("MsgId"));
        System.out.println("--------->" + param);
        String message = null;
        if ("text".equals(msgType)) {
             TextMessage text = new TextMessage();
             text.setContent("the message is:"+content);
             text.setCreateTime(createTime);
             text.setToUserName(fromUserName);
             text.setFromUserName(toUserName);
             text.setMsgType("text");
             text.setMsgId(msgId);
             message = MessageUtil.textMessageToXml(text);
             System.out.println("message--------->" + message);
        }
         return message;
    }

得到的xml的格式为:

<xml>
  <ToUserName>ocQcEvxKvjK3I24qDGkdObwfX2CQ</ToUserName>
  <FromUserName>gh_0a599cb04a12</FromUserName>
  <CreateTime>1482142737</CreateTime>
  <MsgType>text</MsgType>
  <Content>the message is:Gags</Content>
  <MsgId>6365754583835498455</MsgId>
</xml>

里面用到了xml转化成对象以及对象转换成xml的过程。

开发过程中,碰到的问题就是,明明看着xml的格式是正确的,并且能正确接收到输入的数据,但是微信公众平台始终显示‘该官方账号暂时无法提供服务,请稍后再试’。
刚开始以为是xml的格式有问题,在xml数据中加上

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

以这样的格式传输过去的时候确实能够正确的返回数据。。。这个大坑。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值