您的位置:首页 > 移动开发 > 微信开发

微信公众号--接收信息

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

文本消息

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


以这样的格式传输过去的时候确实能够正确的返回数据。。。这个大坑。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  微信