1、微信文本消息接口 - 理解
(1)接受消息的理解
微信服务器(自有的服务器)接收来自普通微信用户发往微信公众号的消息。
(2)发送消息的理解
微信服务器(自有服务器)发往普通微信用户的消息。
(3)消息处理的三种模式
明文模式、兼容模式、安全模式。明文就是微信服务器和微信用户之间的发送消息是明文,安全模式就是发送和接收需要经过加密和解密算法来实现,
兼容模式接收和发送,一者是明文,另一个是密文的方式。
(4)微信服务出现异常的情况
按照目前的情况,微信服务器在 5 秒内收不到响应会断掉连接,并且重新发起请求,总共重试 3 次。假如服务器无法保证在 5 秒内处理回复,
可以直接回复空字串,微信服务器不做任何处理。
2、微信文本消息接口 - 处理过程
(1)接收消息
微信用户请求资源 --> 微信服务器接收用户的发来信息 --> 由微信服务器中转给我们自己的微信服务器(例如自己买的阿里云、
腾讯云等其他配置的 web 服务器,配置成自己微信服务器)。
(2)发送消息(响应消息)
我们自己的微信服务器发送消息 --> 经过微信服务器 --> 由微信服务器中转给微信用户。
(3)对普通文本消息类型的处理流程
普通微信用户发送文本消息到微信服务器,微信服务器将发送 post 请求到我们自己的服务器(带上 signature,timestamp,nonce 三个参数),
部署在我们服务器的程序,首先要获得用户发过来消息的参数(FromUserName、ToUserName、MsgType、CreateTime、Content),
然后将要响应的消息打包(TextMessage 对象,这个对象就是响应消息的一些参数),并将 TextMessage 对象的数据转为符合要求的 xml 数据进行响应即可。
3、微信文本消息接口 - 代码实现
注意:这里的代码是第四节的开发者模式与请求验证的代码基础上进行编写。
(1)在 ValidationServlet 这个 servlet 类中重写 doPost 方法,主要是获取 signature、timestamp、nonce 这三个字段,掉用之前请求验证方法 checkSignature 是否通过,通过则进行解析普通用户请求的参数到微信服务器,经微信服务器中转到自己的微信服务器的数据进行解析 。重点看 doPost 方法:
- package com.aixunma.wechat;
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import com.aixunma.wechat.util.ValidationTool;
- /**
- * 用来请求微信服务器请求验证
- * <p>类的描述:</p>
- * <p>@Description: TODO</p>
- * <p>@author 小海</p>
- * <p>@time:2017年4月27日 下午10:14:10</p>
- * <p>@Vesion: 1.0</p>
- */
- public class ValidationServlet extends HttpServlet {
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- /**
- * 微信基本配置请求验证
- * 当开发者通过微信公众*/
来源: http://www.cnblogs.com/c-xiaohai/p/6849547.html