Java开发微信公众号接收和被动回复普通消息

 更新时间:2016年01月19日 10:11:03   作者:风的姿态  
这篇文章主要介绍了Java开发微信公众号接收和被动回复普通消息的相关资料,需要的朋友可以参考下

上篇说完了如何接入微信公众号,本文说一下微信公众号的最基本功能:普通消息的接收和回复。说到普通消息,那么什么是微信公众号所定义的普通消息呢,微信开发者文档中提到的接收的普通消息包括如下几类

1.文本消息
2.图片消息
3.语音消息
4.视频消息
5.小视频消息
6.地理位置消息
7.链接消息(被动回复的消息)

被动回复的普通消息包括:

1.回复文本消息
2.回复图片消息
3.回复语音消息
4.回复视频消息
5.回复音乐消息
6.回复图文消息

其实接收消息和被动回复消息这两个动作是不分家的,这本来就是一个交互场景,一般情况就是公众号通过分析接收到的消息,会给出对应的回复。当然也不能排除一些特殊业务了。

如何接收消息

要接收的这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 = request.getInputStream();
/*
* 读取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 = reader.read(inputStream);
// 得到xml根元素
Element root = document.getRootElement();
// 得到根元素的所有子节点
List<Element> elementList = root.elements();
// 遍历所有子节点
for (Element e : elementList)
map.put(e.getName(), 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);
}
return baos.toString();
}

如何被动回复消息

下面我基于这样一个逻辑来演示构造回复的消息,接收到文本消息"文本",回复文本消息;接收到“图片”,回复图片消息;接收到“语音”,回复语音消息;接收到“视频”,回复视频消息;接收到“音乐”,回复音乐消息;接收到“图文”,回复图文消息。

以回复文本消息作为说明:

<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内容稍微复杂一点。具体可参考官方文档。这里不做赘述,相信各位一看便明白。

相关文章

  • 解决java读取EXCEL数据变成科学计数法的问题

    解决java读取EXCEL数据变成科学计数法的问题

    这篇文章主要介绍了解决java读取EXCEL数据变成科学计数法的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Java如何在 Word 中设置上、下标

    Java如何在 Word 中设置上、下标

    这篇文章主要介绍了Java如何在 Word 中设置上、下标,帮助大家更好的利用Java处理文档,感兴趣的朋友可以了解下
    2020-09-09
  • 深入分析Spring Cloud 负载均衡器架构选型

    深入分析Spring Cloud 负载均衡器架构选型

    文章详细介绍了OpenFeign的初始化和执行流程,包括FeignClient注解、FeignClientsRegistrar类、FeignClientFactoryBean工厂类、Targeter接口及其实现等,感兴趣的朋友一起看看吧
    2024-12-12
  • SpringCloud中Zuul网关原理及其配置

    SpringCloud中Zuul网关原理及其配置

    Spring Cloud是一个基于Spring Boot实现的微服务应用开发工具,其中的Zuul网关可以实现负载均衡、路由转发、鉴权、限流等功能,本文将从Spring Cloud中Zuul网关的原理、使用场景和配置过程详细介绍,帮助大家更好地了解和应用Zuul网关,需要的朋友可以参考下
    2023-06-06
  • 这一次搞懂SpringMVC原理说明

    这一次搞懂SpringMVC原理说明

    这篇文章主要介绍了这一次搞懂SpringMVC原理说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • java开发之基于Validator接口的SpringMVC数据校验方式

    java开发之基于Validator接口的SpringMVC数据校验方式

    这篇文章主要介绍了java开发之基于Validator接口的SpringMVC数据校验方式,文中附含详细示例代码,有需要的朋友可以借鉴参考下
    2021-09-09
  • 关于druid连接池的使用详解

    关于druid连接池的使用详解

    文章介绍了Druid连接池的两种使用方式:直接在代码中配置和通过配置文件配置,同时,文章详细讲解了如何在Web项目中启用Druid的监控功能,包括配置web.xml文件、设置过滤器等步骤,最后,文章还提到了Druid提供的加密解密工具,使数据库密码更安全
    2025-02-02
  • Spring案例打印机的实现过程详解

    Spring案例打印机的实现过程详解

    这篇文章主要介绍了Spring案例打印机的实现过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • java并发包工具CountDownLatch源码分析

    java并发包工具CountDownLatch源码分析

    这篇文章主要为大家介绍了java并发包工具CountDownLatch源码分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • 一文带你吃透JSP增删改查实战案例详细解读

    一文带你吃透JSP增删改查实战案例详细解读

    这篇文章主要为大家详细介绍了JSP中增删改查实战案例的相关知识,文中的示例代码讲解现象,具有一定的借鉴价值,感兴趣的小伙伴可以了解一下
    2023-03-03

最新评论