微信开发交流群:148540125
系列文章参考地址 极速开发微信公众号
欢迎留言、转发、打赏
项目源码参考地址 点我点我–欢迎Start
前几篇文章已讲完如何导入项目,如何启动配置项目,如何成为开发者(如果前三项不会的看这里 极速开发微信公众号。这篇文章就来讲讲如果实现消息交互
总所周知Jfinal
开发中配置非常简单只要在web.xml
中添加如下代码就可以将所有的请求交由Jfianl
处理
可以看到com.javen.common.APPConfig
是项目的核心配置文件,他是继承自JFinalConfig
实现了如下方法
以上配置 详细介绍参考官方文档
成为开发者模式这篇文章中讲到过消息交互都是由WeixinMsgController
接管的,
消息到底是如何交互的在此做详细的讲解
上面有讲到消息交互都是由WeixinMsgController
接管的,她是继承自MsgControllerAdapter
又继承自 MsgController
里面有个index
方法其中上面的拦截器MsgInterceptor
是进行加密验证的(成为开发者模式),验证没有问题就执行index
方法,如下图
可以看出接收消息并返回一个InMsg,之后根据信息类型调用对应的抽象方法交给实现方式实现消息的处理。
那么问题来了:
1、如何接收微信交互的xml
2、如何处理微信的各种消息
3、如何响应微信的各种消息
接收微信交互的xml
成功开发者(get请求)之后,所有的消息接收处理都交由开发者url处理(post请求)所以就有一下方法获取xml
解析微信的各种消息
|
|
可以看到this.inMsg
为null时会解析InMsgParser.parse(this.getInMsgXml());
获取到的xml
|
|
静态方法 通过xml 实例化一个XmlHelper
(主要提供一些常用类型数据的获取方法) 再交给doParse
方法处理 text消息
image消息
voice消息
vide消息
shortvideo消息
location消息
link消息
eveen消息
|
|
解析出来消息类型之后就调用对应的解析方法并返回InMsg
。
消息类型很多避免重复造轮子,所以就诞生了消息的封装这个东西。
查看所有普通消息的xml格式找规律进行封装 官方文档 可以发现都包含有ToUserName
FromUserName
CreateTime
MsgId
不同的是 MsgType
以及 各个类型对应的消息内容。
这里是接收消息以及响应消息的截图
以解析 text消息
为栗子讲解
接收到的xml 如下
解析text消息
封装text消息
接收消息的公用部分
响应微信的各种消息
由上分析可以知道,消息处理完成后都是交由抽象方法的实现方法处理消息。MsgControllerAdapter
主要是适配各种消息的抽象类。
下面 text消息
为例子说明
接收到text消息
之后会调用 WeixinMsgController
中的protected void processInTextMsg(InTextMsg inTextMsg)
方法,可以通过InTextMsg
对象获取text消息
|
|
以上可以看到响应消息有两种实现方式
第一种render一个消息对象
第二种直接传一个String
以下是具体的实现:
1、将对象转化为xml outMsg.toXml()
2、如果是开发模式输出调试的xml
3、如果是加密模式,就将消息加密
4、通过Jfinal 的renderText()
方法应用xml
而renderOutTextMsg(String content)
方法就是调用的render(outMsg)
方法
|
|
欢迎留言、转发、打赏
项目源码参考地址 点我点我–欢迎Start