⽤java开发:接收和被动回复普通消息(三)
原⽂:
说完了如何接⼊,本⽂说⼀下的最基本功能:普通消息的接收和回复。说到普通消息,那么什么是所定义的普通消息呢,开发者⽂档中提到的接收的普通消息包括如下⼏类:
cs1.6 机器人
1.⽂本消息
2.图⽚消息
3.语⾳消息
4.视频消息
5.⼩视频消息
6.地理位置消息
7.链接消息(被动回复的消息)
被动回复的普通消息包括:
1.回复⽂本消息
2.回复图⽚消息
3.回复语⾳消息
4.回复视频消息
5.回复⾳乐消息
6.回复图⽂消息
其实接收消息和被动回复消息这两个动作是不分家的,这本来就是⼀个交互场景,⼀般情况就是通过分析接收到的消息,会给出对应的回复。当然也不能排除⼀些特殊业务了。
大s多大如何接收消息
要接收的这7中消息的xml格式这⾥就不列出了,请到查看,有具体的格式定义和属性说明。格式很简单,基本共有属性包括ToUserName、FromUserName、CreateTime、MsgType、MsgId,并且每种
类型有⾃⼰特殊的属性。
看到这⾥,其实就很明⽩了,接收消息的过程其实就是获取post请求的这个xml,然后对这个xml进⾏分析的过程。post请求的⼊⼝还是之前提到的接⼊的那个地址,整个的所有请求都会⾛这个⼊⼝,只是接⼊时是get请求,其它情况下是post请求。处理xml 这⾥⽤了dom4j,xml处理代码如下,在servlet的post⽅法中调⽤parseXml⽅法即可:
亲爱的爸妈演员表全部public static Map parseXml(HttpServletRequest request) throws Exception {
// 将解析结果存储在HashMap中
狗名字Map map = new HashMap();
// 从request中取得输⼊流
InputStream inputStream = InputStream();
/*
* 读取request的body内容此⽅法会导致流读取问题 Premature end of file. Nested exception:
* Premature end of file String requestBody =
* inputStream2String(inputStream); System.out.println(requestBody);
*/
// 读取输⼊流
SAXReader reader = new SAXReader();
Document document = ad(inputStream);
// 得到xml根元素
Element root = RootElement();
// 得到根元素的所有⼦节点
List<Element> elementList = root.elements();
// 遍历所有⼦节点
for (Element e : elementList)
map.Name(), e.getText());
// 释放资源
inputStream.close();
inputStream = null;
return map;
}
private static String inputStream2String(InputStream is) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int i = -1;
while ((i = is.read()) != -1) {
baos.write(i);
}
String();
}
如何被动回复消息
下⾯我基于这样⼀个逻辑来演⽰构造回复的消息,接收到⽂本消息"⽂本",回复⽂本消息;接收到“图⽚”,回复图⽚消息;接收到“语⾳”,回复语⾳消息;接收到“视频”,回复视频消息;接收到“⾳乐”,回复⾳乐消息;接收到“图⽂”,回复图⽂消息。
以回复⽂本消息作为说明:
<xml>
<ToUserName><![CDATA[发消息的⼈,即订阅者]]></ToUserName>
<FromUserName><![CDATA[本⾝]]></FromUserName>
太多的借口太多的理由是什么歌<CreateTime>消息创建时间(整形)</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[消息内容]]></Content>
</xml>
前两个属性可以从接收的消息中获取,接收的消息格式如下:
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
姚芊羽结婚了吗<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1348831860</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[this is a text]]></Content>
<MsgId>1234567890123456</MsgId>
</xml>
其中接收消息格式中的ToUserName便是回复消息的FromUserName,接收消息格式中的FromUserName便是回复消息的ToUserName。
CreateTime为消息发送的时间戳。MsgType为消息类型,⽂本为text。Content为消息内容。
具体每⼀种类型消息的回复,就是构造此种类型的xml格式内容,格式⼤同⼩异,只是⾳乐、视频、语⾳、图⽂格式相对于⽂本消息构造的xml内容稍微复杂⼀点。具体可参考。这⾥不做赘述,相信各位⼀看便明⽩。