如何使用java实现微信分类接收消息以及创建实体
发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,这篇文章给大家分享的是有关如何使用java实现微信分类接收消息以及创建实体的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。(一)消息实体基础类package com.cuiy
千家信息网最后更新 2025年01月22日如何使用java实现微信分类接收消息以及创建实体
这篇文章给大家分享的是有关如何使用java实现微信分类接收消息以及创建实体的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
(一)消息实体基础类
package com.cuiyongzhi.wechat.message.req;/** * ClassName: BaseMessage * @Description: 微信请求消息基本类 * @author dapengniao * @date 2016年3月7日 下午3:03:59 */public class BaseMessage { // 开发者微信号 private String ToUserName; // 发送方帐号(一个OpenID) private String FromUserName; // 消息创建时间 (整型) private long CreateTime; // 消息类型(text/image/location/link/video/shortvideo) private String MsgType; // 消息id,64位整型 private long MsgId; 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 long getCreateTime() { return CreateTime; } public void setCreateTime(long createTime) { CreateTime = createTime; } public String getMsgType() { return MsgType; } public void setMsgType(String msgType) { MsgType = msgType; } public long getMsgId() { return MsgId; } public void setMsgId(long msgId) { MsgId = msgId; }}
(二)普通消息pojo实体
①图片消息
package com.cuiyongzhi.wechat.message.req; /** * ClassName: ImageMessage * @Description: 图片消息 * @author dapengniao * @date 2016年3月7日 下午3:04:52 */public class ImageMessage extends BaseMessage { // 图片链接 private String PicUrl; public String getPicUrl() { return PicUrl; } public void setPicUrl(String picUrl) { PicUrl = picUrl; }}
②连接消息
package com.cuiyongzhi.wechat.message.req; /** * ClassName: LinkMessage * @Description: 连接消息 * @author dapengniao * @date 2016年3月7日 下午3:05:48 */public class LinkMessage extends BaseMessage { // 消息标题 private String Title; // 消息描述 private String Description; // 消息链接 private String Url; public String getTitle() { return Title; } public void setTitle(String title) { Title = title; } public String getDescription() { return Description; } public void setDescription(String description) { Description = description; } public String getUrl() { return Url; } public void setUrl(String url) { Url = url; }}
③地理位置消息
package com.cuiyongzhi.wechat.message.req; /** * ClassName: LocationMessage * @Description: 地理位置消息 * @author dapengniao * @date 2016年3月7日 下午3:06:10 */public class LocationMessage extends BaseMessage { // 地理位置维度 private String Location_X; // 地理位置经度 private String Location_Y; // 地图缩放大小 private String Scale; // 地理位置信息 private String Label; public String getLocation_X() { return Location_X; } public void setLocation_X(String location_X) { Location_X = location_X; } public String getLocation_Y() { return Location_Y; } public void setLocation_Y(String location_Y) { Location_Y = location_Y; } public String getScale() { return Scale; } public void setScale(String scale) { Scale = scale; } public String getLabel() { return Label; } public void setLabel(String label) { Label = label; } }
④文本消息
package com.cuiyongzhi.wechat.message.req; /** * ClassName: TextMessage * @Description: 文本消息 * @author dapengniao * @date 2016年3月7日 下午3:06:40 */public class TextMessage extends BaseMessage { // 消息内容 private String Content; public String getContent() { return Content; } public void setContent(String content) { Content = content; } }
⑤视频/小视屏消息
package com.cuiyongzhi.wechat.message.req; /** * ClassName: VideoMessage * @Description: 视频/小视屏消息 * @author dapengniao * @date 2016年3月7日 下午3:12:51 */public class VideoMessage extends BaseMessage { private String MediaId; // 视频消息媒体id,可以调用多媒体文件下载接口拉取数据 private String ThumbMediaId; // 视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据 public String getMediaId() { return MediaId; } public void setMediaId(String mediaId) { MediaId = mediaId; } public String getThumbMediaId() { return ThumbMediaId; } public void setThumbMediaId(String thumbMediaId) { ThumbMediaId = thumbMediaId; }}
⑥语音消息
package com.cuiyongzhi.wechat.message.req;/** * ClassName: VoiceMessage * @Description: 语音消息 * @author dapengniao * @date 2016年3月7日 下午3:07:10 */public class VoiceMessage extends BaseMessage { // 媒体ID private String MediaId; // 语音格式 private String Format; public String getMediaId() { return MediaId; } public void setMediaId(String mediaId) { MediaId = mediaId; } public String getFormat() { return Format; } public void setFormat(String format) { Format = format; } }
(三)消息分类处理
按照上面收到想消息类别分别做不同的分发处理,这里我们建立了自己的业务分发器(EventDispatcher、MsgDispatcher),分别做普通消息处理和事件消息处理!
①MsgDispatcher.java--用于普通消息的业务分发处理
package com.cuiyongzhi.wechat.dispatcher;import java.util.Map;import com.cuiyongzhi.wechat.util.MessageUtil;/** * ClassName: MsgDispatcher * @Description: 消息业务处理分发器 * @author dapengniao * @date 2016年3月7日 下午4:04:21 */public class MsgDispatcher { public static String processMessage(Mapmap) { if (map.get("MsgType").equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) { // 文本消息 System.out.println("==============这是文本消息!"); } if (map.get("MsgType").equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE)) { // 图片消息 System.out.println("==============这是图片消息!"); } if (map.get("MsgType").equals(MessageUtil.REQ_MESSAGE_TYPE_LINK)) { // 链接消息 System.out.println("==============这是链接消息!"); } if (map.get("MsgType").equals(MessageUtil.REQ_MESSAGE_TYPE_LOCATION)) { // 位置消息 System.out.println("==============这是位置消息!"); } if (map.get("MsgType").equals(MessageUtil.REQ_MESSAGE_TYPE_VIDEO)) { // 视频消息 System.out.println("==============这是视频消息!"); } if (map.get("MsgType").equals(MessageUtil.REQ_MESSAGE_TYPE_VOICE)) { // 语音消息 System.out.println("==============这是语音消息!"); } return null; }}
②EventDispatcher.java--事件消息的业务分发处理
package com.cuiyongzhi.wechat.dispatcher; import java.util.Map; import com.cuiyongzhi.wechat.util.MessageUtil; /** * ClassName: EventDispatcher * @Description: 事件消息业务分发器 * @author dapengniao * @date 2016年3月7日 下午4:04:41 */public class EventDispatcher { public static String processEvent(Mapmap) { if (map.get("Event").equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) { //关注事件 System.out.println("==============这是关注事件!"); } if (map.get("Event").equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)) { //取消关注事件 System.out.println("==============这是取消关注事件!"); } if (map.get("Event").equals(MessageUtil.EVENT_TYPE_SCAN)) { //扫描二维码事件 System.out.println("==============这是扫描二维码事件!"); } if (map.get("Event").equals(MessageUtil.EVENT_TYPE_LOCATION)) { //位置上报事件 System.out.println("==============这是位置上报事件!"); } if (map.get("Event").equals(MessageUtil.EVENT_TYPE_CLICK)) { //自定义菜单点击事件 System.out.println("==============这是自定义菜单点击事件!"); } if (map.get("Event").equals(MessageUtil.EVENT_TYPE_VIEW)) { //自定义菜单View事件 System.out.println("==============这是自定义菜单View事件!"); } return null; }}
这个时候我们需要把我们的消息入口【WechatSecurity.java】中的post方法做些修改,最终结果如下:
package com.cuiyongzhi.wechat.controller; import java.io.PrintWriter;import java.util.Map; import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam; import com.cuiyongzhi.wechat.dispatcher.EventDispatcher;import com.cuiyongzhi.wechat.dispatcher.MsgDispatcher;import com.cuiyongzhi.wechat.util.MessageUtil;import com.cuiyongzhi.wechat.util.SignUtil; @Controller@RequestMapping("/wechat")public class WechatSecurity { private static Logger logger = Logger.getLogger(WechatSecurity.class); /** * * @Description: 用于接收get参数,返回验证参数 * @param @param request * @param @param response * @param @param signature * @param @param timestamp * @param @param nonce * @param @param echostr * @author dapengniao * @date 2016年3月4日 下午6:20:00 */ @RequestMapping(value = "security", method = RequestMethod.GET) public void doGet( HttpServletRequest request, HttpServletResponse response, @RequestParam(value = "signature", required = true) String signature, @RequestParam(value = "timestamp", required = true) String timestamp, @RequestParam(value = "nonce", required = true) String nonce, @RequestParam(value = "echostr", required = true) String echostr) { try { if (SignUtil.checkSignature(signature, timestamp, nonce)) { PrintWriter out = response.getWriter(); out.print(echostr); out.close(); } else { logger.info("这里存在非法请求!"); } } catch (Exception e) { logger.error(e, e); } } /** * @Description: 接收微信端消息处理并做分发 * @param @param request * @param @param response * @author dapengniao * @date 2016年3月7日 下午4:06:47 */ @RequestMapping(value = "security", method = RequestMethod.POST) public void DoPost(HttpServletRequest request,HttpServletResponse response) { try{ Mapmap=MessageUtil.parseXml(request); String msgtype=map.get("MsgType"); if(MessageUtil.REQ_MESSAGE_TYPE_EVENT.equals(msgtype)){ EventDispatcher.processEvent(map); //进入事件处理 }else{ MsgDispatcher.processMessage(map); //进入消息处理 } }catch(Exception e){ logger.error(e,e); } }}
最后我们运行成功项目之后我们可以通过发送不同类型的消息来验证我们的消息分类的正确性,如下图所示:
新建了这么多文件,最后来看下我们的整个项目的目录结构:
感谢各位的阅读!关于"如何使用java实现微信分类接收消息以及创建实体"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
消息
事件
这是
处理
位置
视频
业务
图片
地理
地理位置
语音
实体
分类
文本
菜单
链接
普通
内容
媒体
文件
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
如何做好网络安全管理工作
还原数据库
专项资金软件开发
如何恢复小说数据库
网络安全系列汇总
昆山网络技术咨询有哪些
快递单打印软件开发
中国互联网公司是不是科技公司
5g网络技术存在的问题
提高公司网络安全的措施
浙江专升本计算机网络技术考哪些
学校网络安全清理自查报告
乐富网络技术有限公司
怀柔区数据网络技术咨询口碑推荐
商城分类数据库设计
软件开发真实感受
拱墅区智慧工会软件开发
数据库的数字化转型的方向
石林信息化软件开发
oracle数据库 er
软件开发公司人力成本的减压器
荐股软件开发工程师
cago国内服务器推荐
网络安全手抄报间单
网络安全宣讲课后讨论
滴滴云服务器干什么用
网络安全保卫总队管辖案件范围
软件开发人才需求调查报告
北京华创网络技术有限公司
网络安全挑战有哪些