微信开发之如何处理微信客户端发来的消息
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍微信开发之如何处理微信客户端发来的消息,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在开启微信开发者模式时,我们配置了一个URL地址,当我们提交开启微信开发者模
千家信息网最后更新 2026年11月01日微信开发之如何处理微信客户端发来的消息
这篇文章主要介绍微信开发之如何处理微信客户端发来的消息,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
在开启微信开发者模式时,我们配置了一个URL地址,当我们提交开启微信开发者模式,腾讯的微信服务器会向该URL地址发送一个get请求,并且携带一些参数,让我们来验证。说到get请求,就必须说到post请求,关注我们公众号的微信粉丝发来的消息,触发的事件,腾讯的微信服务器则会像该URL地址发送一个post请求,请求的内容就是以xml文档形式的字符串。
所以该URL地址的get请求的处理方法,专门用于开启微信开发者模式;而post请求则用于处理微信粉丝发给我们的消息,或者触发的事件,所以我们后面的微信开发工作的起点就是该URL地址的post处理方法。
下面我们处理一个最简单的例子:粉丝发送任意一个文本信息给我们,我们给他回复一个消息:"你好,+ 他微信的openId"
下面直接贴代码:
URL对应的处理servlet:
public class CoreServlet extends HttpServlet { private static final long serialVersionUID = 4440739483644821986L; /** * 请求校验(确认请求来自微信服务器) */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 微信服务端发来的加密签名 String signature = request.getParameter("signature"); // 时间戳 String timestamp = request.getParameter("timestamp"); // 随机数 String nonce = request.getParameter("nonce"); // 随机字符串 String echostr = request.getParameter("echostr"); PrintWriter out = response.getWriter(); // 请求校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败 if (SignUtil.checkSignature(signature, timestamp, nonce)) { out.print(echostr); } out.close(); out = null; } /** * 请求校验与处理 */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 将请求、响应的编码均设置为UTF-8(防止中文乱码) request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); // 接收参数微信加密签名、 时间戳、随机数 String signature = request.getParameter("signature"); String timestamp = request.getParameter("timestamp"); String nonce = request.getParameter("nonce"); PrintWriter out = response.getWriter(); // 请求校验 if (SignUtil.checkSignature(signature, timestamp, nonce)) { Message msgObj = XMLUtil.getMessageObject(request); // 读取微信客户端发来的消息(xml字符串),并将其转换为消息对象 if(msgObj != null){ String xml = "" + " " + // 接收方帐号(收到的OpenID) " " + // 开发者微信号 "12345678 " + " " + " " + " "; out.write(xml); // 回复微信客户端的消息(xml字符串) out.close(); return; } } out.write(""); out.close(); }}xml字符串的处理工具类,实现xml消息到消息对象的转换:
public class XMLUtil { /** * 从request中读取用户发给公众号的消息内容 * @param request * @return 用户发给公众号的消息内容 * @throws IOException */ public static String readRequestContent(HttpServletRequest request) throws IOException { // 从输入流读取返回内容 InputStream inputStream = request.getInputStream(); InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8"); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String str = null; StringBuilder buffer = new StringBuilder(); while ((str = bufferedReader.readLine()) != null) { buffer.append(str); } // 释放资源 bufferedReader.close(); inputStreamReader.close(); inputStream.close(); return buffer.toString(); } /** * 将xml文档的内容转换成map * @param xmlDoc * @return map */ public static Map xmlToMap(String xmlDoc) { //创建一个新的字符串 StringReader read = new StringReader(xmlDoc); //创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入 InputSource source = new InputSource(read); //创建一个新的SAXBuilder SAXBuilder sb = new SAXBuilder(); Map xmlMap = new HashMap(); try { Document doc = sb.build(source); //通过输入源构造一个Document Element root = doc.getRootElement(); //取的根元素 List cNodes = root.getChildren(); //得到根元素所有子元素的集合(根元素的子节点,不包括孙子节点) Element et = null; for(int i=0;i map) { if(map != null){ String MsgType = map.get("MsgType"); // 消息类型(文本消息:text, 图片消息:image, 语音消息:voice, 视频消息:video, // 地理位置消息:location, 链接消息:link) if("text".equals(MsgType)){ TextMessage msg = new TextMessage(); XMLUtil.initCommonMsg(msg, map); msg.setContent(map.get("Content")); return msg; } if("ImageMessage".equals(MsgType)){ ImageMessage msg = new ImageMessage(); XMLUtil.initCommonMsg(msg, map); msg.setPicUrl(map.get("PicUrl")); msg.setMediaId(map.get("MediaId")); return msg; } if("video".equals(MsgType)){ VideoMessage msg = new VideoMessage(); XMLUtil.initCommonMsg(msg, map); msg.setMediaId(map.get("MediaId")); msg.setThumbMediaId(map.get("ThumbMediaId")); return msg; } if("voice".equals(MsgType)){ VoiceMessage msg = new VoiceMessage(); XMLUtil.initCommonMsg(msg, map); msg.setMediaId(map.get("MediaId")); msg.setFormat(map.get("Format")); return msg; } if("location".equals(MsgType)){ LocationMessage msg = new LocationMessage(); msg.setLocation_X(map.get("Location_X")); msg.setLocation_Y(map.get("Location_Y")); msg.setScale(map.get("Scale")); msg.setLabel(map.get("Label")); return msg; } if("link".equals(MsgType)){ LinkMessage msg = new LinkMessage(); XMLUtil.initCommonMsg(msg, map); msg.setTitle(map.get("Title")); msg.setDescription(map.get("Description")); msg.setUrl(map.get("Url")); return msg; } } return null; } /** * 将保存xml内容的map转换成对象 * @param map * @return * @throws IOException */ public static Message getMessageObject(HttpServletRequest request) throws IOException { String xmlDoc = XMLUtil.readRequestContent(request); // 读取微信客户端发了的消息(xml) Map map = XMLUtil.xmlToMap(xmlDoc); // 将客户端发来的xml转换成Map if(map != null){ String MsgType = map.get("MsgType"); // 消息类型(文本消息:text, 图片消息:image, 语音消息:voice, 视频消息:video, // 地理位置消息:location, 链接消息:link) if("text".equals(MsgType)){ TextMessage msg = new TextMessage(); XMLUtil.initCommonMsg(msg, map); msg.setContent(map.get("Content")); return msg; } /*if("ImageMessage".equals(MsgType)){ ImageMessage msg = new ImageMessage(); XMLUtil.initCommonMsg(msg, map); msg.setPicUrl(map.get("PicUrl")); msg.setMediaId(map.get("MediaId")); return msg; } if("video".equals(MsgType)){ VideoMessage msg = new VideoMessage(); XMLUtil.initCommonMsg(msg, map); msg.setMediaId(map.get("MediaId")); msg.setThumbMediaId(map.get("ThumbMediaId")); return msg; } if("voice".equals(MsgType)){ VoiceMessage msg = new VoiceMessage(); XMLUtil.initCommonMsg(msg, map); msg.setMediaId(map.get("MediaId")); msg.setFormat(map.get("Format")); return msg; } if("location".equals(MsgType)){ LocationMessage msg = new LocationMessage(); msg.setLocation_X(map.get("Location_X")); msg.setLocation_Y(map.get("Location_Y")); msg.setScale(map.get("Scale")); msg.setLabel(map.get("Label")); return msg; } if("link".equals(MsgType)){ LinkMessage msg = new LinkMessage(); XMLUtil.initCommonMsg(msg, map); msg.setTitle(map.get("Title")); msg.setDescription(map.get("Description")); msg.setUrl(map.get("Url")); return msg; }*/ } return null; } public static void initCommonMsg(Message msg, Map map) { msg.setMsgId(map.get("MsgId")); msg.setMsgType(map.get("MsgType")); msg.setToUserName(map.get("ToUserName")); msg.setFromUserName(map.get("FromUserName")); msg.setCreateTime(map.get("CreateTime")); }} 粉丝发来的消息分为了6中类型(文本消息, 图片消息, 语音消息, 视频消息, 地理位置消息, 链接消息):
/** * 微信消息基类 * @author yuanfang * @date 2015-03-23 */public class Message { private String MsgId; // 消息id,64位整型 private String MsgType; // 消息类型(文本消息:text, 图片消息:image, 语音消息:voice, 视频消息:video, 地理位置消息:location, 链接消息:link) private String ToUserName; //开发者微信号 private String FromUserName; // 发送方帐号(一个OpenID) private String CreateTime; // 消息创建时间 (整型) public String getToUserName() { return ToUserName; } public void setToUserName(String toUserName) { ToUserName = toUserName; } public String getFromUserName() { return FromUserName; } public void setFromUserName(String fromUserName) { FromUserName = fromUserName; } public String getCreateTime() { return CreateTime; } public void setCreateTime(String createTime) { CreateTime = createTime; } public String getMsgType() { return MsgType; } public void setMsgType(String msgType) { MsgType = msgType; } public String getMsgId() { return MsgId; } public void setMsgId(String msgId) { MsgId = msgId; } }文本消息类:
package com.sinaapp.wx.msg;public class TextMessage extends Message { private String Content; // 文本消息内容 public String getContent() { return Content; } public void setContent(String content) { Content = content; } }以上是"微信开发之如何处理微信客户端发来的消息"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
消息
内容
开发
文本
处理
客户
字符
字符串
客户端
元素
地址
对象
开发者
位置
图片
地理
地理位置
类型
粉丝
视频
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
咖啡豆
中智农互联网科技
北京路客互联网科技有限公司
互联网扶贫科技
猪兼强互联网科技
奇酷互联网科技公司
朗涯互联网科技
银优互联网科技有限公司
有木互联网科技
沃里互联网科技
赫美联合互联网科技
顺玮阁互联网科技
科技互联网创业计划书
互联网汽车科技小镇
科技与互联网的利与弊
新华互联网科技2019
科技互联网的核心竞争力
上海科技产业互联网平台
广州有谷有贝互联网科技有限公司
悟空问答互联网科技
云南咖啡
互联网科技革命
互联网 视角下的科技创新
中正互联网科技招聘
顶级互联网科技成果有哪些
金融科技与互联网金融相同和不同
互联网科技项目计划书材料类
互联网科技创新的路径
宁波跨境商互联网科技有限公司
科技互联网行业投资研究