04.接收用户消息

2024-09-01 05:48
文章标签 用户 消息 04 接收

本文主要是介绍04.接收用户消息,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

04.–>接收用户消息
首先根据消息类型构建实体类:
根据微信接口地址
将相同的字段建在一个公共类里面。
在根据不同的消息添加实体类和字段。如下图:
所有实体
MSGContent:

枚举类:
消息类型

///
/// 消息类型
///
public enum MsgType
{
///
///文本类型
///
TEXT,
///
/// 图片类型
///
IMAGE,
///
/// 语音类型
///
VOICE,
///
/// 视频类型
///
VIDEO,
///
/// 小视频类型
///
SHORTVIDEO,
///
/// 地理位置类型
///
LOCATION,
///
/// 链接类型
///
LINK,
///
/// 事件类型
///
EVENT
}

///
/// 事件
///
public enum EvenType
{
///
/// 关注事件
///
SUBSCRIBE,
///
/// 取消关注事件
///
UNSUBSCRIBE,
}

public class MSGContent{/// <summary>/// 开发者微信号/// </summary>public string ToUserName { get; set; }/// <summary>/// 发送方帐号(一个OpenID)/// </summary>public string FromUserName { get; set; }/// <summary>/// 消息创建时间 (整型)/// </summary>public int CreateTime { get; set; }/// <summary>/// 消息id,64位整型/// </summary>public long MsgId { get; set; }/// <summary>/// 类型/// </summary>public MsgType MsgType { get; set; }/// <summary>/// 事件/// </summary>public EvenType Event { get; set; }}

实体类搭建好之后进行下一步操作:
根据上一讲验证微信开发者身份的基础上编写:

public ActionResult GetSignature(){string value = "";//HttpContext context = new HttpContext("");//身份验证请求方式:GETif (HttpContext.Request.HttpMethod == "GET"){WeChatHelp.GetSigntrue(Token);}else{//获取接收到的消息//var data = WeChatHelp.GetRequestData();//var xml = XElement.Parse(data);//var type = xml.Element("MsgType").Value;//if (type == "text")//{//    TextModel model = new TextModel();//    model.Content = xml.Element("Content").Value;//    model.ToUserName = xml.Element("ToUserName").Value;//    model.FromUserName = xml.Element("FromUserName").Value;//    model.CreateTime = Convert.ToInt32(xml.Element("CreateTime").Value);//    model.MsgId = Convert.ToInt64(xml.Element("MsgId").Value);//    model.MsgType = MsgType.TEXT.ToString();//}//考虑到消息的类型有很多种,进行封装var msg = MSGFactory.LoadMsg();}return Json(value);}
/// <summary>/// 获取普通消息/// </summary>/// <returns></returns>public static string GetRequestData(){string result = "";var reader = new StreamReader(HttpContext.Current.Request.InputStream);result = reader.ReadToEnd();return result;}

新建基类:MSGFactory

public class MSGFactory{public static MSGContent LoadMsg(){var data = WeChatHelp.GetRequestData();//获取接收的消息var xml = XElement.Parse(data);//进行XML序列化var MSGType = (MsgType)Enum.Parse(typeof(MsgType), xml.Element("MsgType").Value.ToUpper());//获取消息类型switch (MSGType){case MsgType.TEXT://文本return WeChatHelp.ConvertObject<TextModel>(data);//根据类型返回实体数据所封装的方法case MsgType.IMAGE://图片return WeChatHelp.ConvertObject<ImageModel>(data);case MsgType.VOICE://语音return WeChatHelp.ConvertObject<VoiceModel>(data);case MsgType.VIDEO://视频return WeChatHelp.ConvertObject<VideoModel>(data);case MsgType.LOCATION://地理位置return WeChatHelp.ConvertObject<LocationModel>(data);case MsgType.LINK://链接return WeChatHelp.ConvertObject<LinkModel>(data);case MsgType.SHORTVIDEO://小饰品return WeChatHelp.ConvertObject<VideoModel>(data);case MsgType.EVENT://事件{var Event = (EvenType)Enum.Parse(typeof(EvenType), xml.Element("Event").Value.ToUpper());switch (Event){case EvenType.SUBSCRIBE:return WeChatHelp.ConvertObject<EventModel>(data);case EvenType.UNSUBSCRIBE:return WeChatHelp.ConvertObject<EventModel>(data);default:break;}};return null;default:return WeChatHelp.ConvertObject<MSGContent>(data);}}}
        /// <summary>/// 公用获取发送普通消息/// </summary>/// <typeparam name="T">对象</typeparam>/// <param name="xmldata">XML数据</param>/// <returns></returns>public static T ConvertObject<T>(string xmldata){try{var xml = XElement.Parse(xmldata);var type = typeof(T);var t = Activator.CreateInstance<T>();var tousername = type.GetProperty("ToUserName");tousername.SetValue(t, Convert.ChangeType(xml.Element("ToUserName").Value, tousername.PropertyType), null);xml.Element("ToUserName").Remove();var FromUserName = type.GetProperty("FromUserName");FromUserName.SetValue(t, Convert.ChangeType(xml.Element("FromUserName").Value, FromUserName.PropertyType), null);xml.Element("FromUserName").Remove();var CreateTime = type.GetProperty("CreateTime");CreateTime.SetValue(t, Convert.ChangeType(xml.Element("CreateTime").Value, CreateTime.PropertyType), null);xml.Element("CreateTime").Remove();var MsgId = type.GetProperty("MsgId");MsgId.SetValue(t, Convert.ChangeType(xml.Element("MsgId").Value, MsgId.PropertyType), null);xml.Element("MsgId").Remove();var Msg = type.GetProperty("MsgType");var msg = xml.Element("MsgType").Value.ToUpper();Msg.SetValue(t, (MsgType)Enum.Parse(typeof(MsgType), msg), null);xml.Element("MsgType").Remove();//判断是否为事件类型if (msg == "EVENT"){var Event = type.GetProperty("Event");var even = xml.Element("Event").Value.ToUpper();Msg.SetValue(t, (EvenType)Enum.Parse(typeof(EvenType), even), null);xml.Element("Event").Remove();}foreach (var item in xml.Elements()){var content = type.GetProperty(item.Name.ToString());content.SetValue(t, Convert.ChangeType(item.Value, content.PropertyType), null);}return t;}catch (Exception ex){throw;}return default(T);}

这篇关于04.接收用户消息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1126112

相关文章

最新Spring Security的基于内存用户认证方式

《最新SpringSecurity的基于内存用户认证方式》本文讲解SpringSecurity内存认证配置,适用于开发、测试等场景,通过代码创建用户及权限管理,支持密码加密,虽简单但不持久化,生产环... 目录1. 前言2. 因何选择内存认证?3. 基础配置实战❶ 创建Spring Security配置文件

RabbitMQ消息总线方式刷新配置服务全过程

《RabbitMQ消息总线方式刷新配置服务全过程》SpringCloudBus通过消息总线与MQ实现微服务配置统一刷新,结合GitWebhooks自动触发更新,避免手动重启,提升效率与可靠性,适用于配... 目录前言介绍环境准备代码示例测试验证总结前言介绍在微服务架构中,为了更方便的向微服务实例广播消息,

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

SpringSecurity显示用户账号已被锁定的原因及解决方案

《SpringSecurity显示用户账号已被锁定的原因及解决方案》SpringSecurity中用户账号被锁定问题源于UserDetails接口方法返回值错误,解决方案是修正isAccountNon... 目录SpringSecurity显示用户账号已被锁定的解决方案1.问题出现前的工作2.问题出现原因各

MySQL 用户创建与授权最佳实践

《MySQL用户创建与授权最佳实践》在MySQL中,用户管理和权限控制是数据库安全的重要组成部分,下面详细介绍如何在MySQL中创建用户并授予适当的权限,感兴趣的朋友跟随小编一起看看吧... 目录mysql 用户创建与授权详解一、MySQL用户管理基础1. 用户账户组成2. 查看现有用户二、创建用户1. 基

C++ RabbitMq消息队列组件详解

《C++RabbitMq消息队列组件详解》:本文主要介绍C++RabbitMq消息队列组件的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. RabbitMq介绍2. 安装RabbitMQ3. 安装 RabbitMQ 的 C++客户端库4. A

Mysql中的用户管理实践

《Mysql中的用户管理实践》:本文主要介绍Mysql中的用户管理实践,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录13. 用户管理13.1 用户 13.1.1 用户信息 13.1.2 创建用户 13.1.3 删除用户 13.1.4 修改用户

SpringCloud整合MQ实现消息总线服务方式

《SpringCloud整合MQ实现消息总线服务方式》:本文主要介绍SpringCloud整合MQ实现消息总线服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、背景介绍二、方案实践三、升级版总结一、背景介绍每当修改配置文件内容,如果需要客户端也同步更新,

详解如何在SpringBoot控制器中处理用户数据

《详解如何在SpringBoot控制器中处理用户数据》在SpringBoot应用开发中,控制器(Controller)扮演着至关重要的角色,它负责接收用户请求、处理数据并返回响应,本文将深入浅出地讲解... 目录一、获取请求参数1.1 获取查询参数1.2 获取路径参数二、处理表单提交2.1 处理表单数据三、

一文带你搞懂Redis Stream的6种消息处理模式

《一文带你搞懂RedisStream的6种消息处理模式》Redis5.0版本引入的Stream数据类型,为Redis生态带来了强大而灵活的消息队列功能,本文将为大家详细介绍RedisStream的6... 目录1. 简单消费模式(Simple Consumption)基本概念核心命令实现示例使用场景优缺点2