今天跟大家分享一下微信自动回复功能开发,在这这次需要准备好自己的服务器(可以在外网上面访问的),以及在公众号上面进行服务器认证(可以参考上一篇文章),并且开启服务器配置。

格式的形式发送到开发者服务器对应的url上面;开发者接收到xml信息之后,可以对其进行解析,然后根据消息的内容回发对应的内容给用户,回复的消息也是要以xml格式发送出去的。这里面有一个需要注意的就是,微信向开发者服务器发送请求的等待时间是5秒钟,如果开发者服务器5秒内不能回复,微信会重新发送请求(最多三次),三次之后还是不能再5秒内回复或者回复的内容微信无法进行解析,就会显示“该公众号无法提供服务”。如果无法保证在5秒内回复,可以回复一个空字符串,微信不会对这个消息做任何处理。

  因为微信发送到开发者服务器的消息类型比较多样化,有普通消息,关注事件,取消关注事件,按钮点击事件等。所以在设计自动回复功能的时候要充分考虑到程序的灵活性、可扩展性以及可维护性。

xml文件的格式配置好,应用程序启动的时候,使用反射+IOC注入的方式实例化每一个处理程序类。

 

  因为代码比较多,全部贴上来比较麻烦,下面贴上一下关键代码:

 

  1、先看看责任链这里的设计:

  

java企微被动回复消息 无响应 企业微信自动回复开发_微信开发

  

是接口层,Models下面的是实体,分别为,请求对象实体、返回对象实体以及环节信息实体(保存处理当前请求的“环节”的一些基本信息,包括它的当前环节名称,下一个环节名称,环节类的类型等),

CommandInitilizableBase是一个抽象类,里面只有一个方法,用于初始化责任链。CommandRequestBase是环节抽象基类,里面有一个ResponsibilityModel属性用于获取当前“环节”的环节信息实体、一个GetNextCommand方法,用户获取下一个环节处理类的实例,如果没有则返回null。

的实现,CommandRequestBuilder用于对链进行初始化,也提供了一个SetCommandInitilizableBase方法,可以自定义初始化责任链的实现类。

  Command文件夹下有两个继承了CommandRequestBase的实现类,分别是:

  TextCommandRequest 主要功能是处理用户发送的文本信息;

  SubscriptCommandRequest  是对关注事件的处理。

  Initilizable文件夹下的类是CommandInitilizableBase的实现类,用于处理责任链的初始化(其实就是解析xml,生成每个处理类的实例)。

 

xml,根据实体产生xml

  

java企微被动回复消息 无响应 企业微信自动回复开发_java企微被动回复消息 无响应_02

  

    这里说的接收并解析xml,主要是针对密文模式进行讲解(明文模式这个就不多讲,因为明文模式下的xml比较简单明了,可以参考下图)。

java企微被动回复消息 无响应 企业微信自动回复开发_微信_03

文件格式

  解密的过程就不啰嗦了,下面发一下解密代码,这个在微信公众平台上面也是可以找得到源代码的:

  

java企微被动回复消息 无响应 企业微信自动回复开发_xml_04

  

以及appid;

xml跟明文模式下的xml内容完全一致,接下来的就是体力活...把对应节点的内容赋值给实体即可。

Autofac依赖注入框架(关于这个框架的使用,可以参考我的另一篇博客^_^,这里附上英文文档一个,别问我有没有中文,我也没找到T_T||)。

处理请求完毕之后就是根据返回的实体生成xml,然后对这个xml进行加密,加密代码如下:

  

java企微被动回复消息 无响应 企业微信自动回复开发_微信_05

  

  这里需要注意的是,加密之后还需要做小小处理:

  

java企微被动回复消息 无响应 企业微信自动回复开发_微信开发_06

  

xml发回去给微信服务器了,

  只需要很简单一步:

return Content(xmlContent, "text/xml");

  即可。

  下面是运行效果图:

java企微被动回复消息 无响应 企业微信自动回复开发_处理程序_07

   由于本人比较懒,就是简单地介绍了下,其实我本人觉得如果想要有进步还是应该多去看别人的代码,理解别人的,才能将别人的变成自己的。下面贴上项目链接。

  点这里