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

相关文章

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me

SpringKafka消息发布之KafkaTemplate与事务支持功能

《SpringKafka消息发布之KafkaTemplate与事务支持功能》通过本文介绍的基本用法、序列化选项、事务支持、错误处理和性能优化技术,开发者可以构建高效可靠的Kafka消息发布系统,事务支... 目录引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优

SpringIntegration消息路由之Router的条件路由与过滤功能

《SpringIntegration消息路由之Router的条件路由与过滤功能》本文详细介绍了Router的基础概念、条件路由实现、基于消息头的路由、动态路由与路由表、消息过滤与选择性路由以及错误处理... 目录引言一、Router基础概念二、条件路由实现三、基于消息头的路由四、动态路由与路由表五、消息过滤

Python实现自动化接收与处理手机验证码

《Python实现自动化接收与处理手机验证码》在移动互联网时代,短信验证码已成为身份验证、账号注册等环节的重要安全手段,本文将介绍如何利用Python实现验证码的自动接收,识别与转发,需要的可以参考下... 目录引言一、准备工作1.1 硬件与软件需求1.2 环境配置二、核心功能实现2.1 短信监听与获取2.

mysql删除无用用户的方法实现

《mysql删除无用用户的方法实现》本文主要介绍了mysql删除无用用户的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 1、删除不用的账户(1) 查看当前已存在账户mysql> select user,host,pa

如何使用C#串口通讯实现数据的发送和接收

《如何使用C#串口通讯实现数据的发送和接收》本文详细介绍了如何使用C#实现基于串口通讯的数据发送和接收,通过SerialPort类,我们可以轻松实现串口通讯,并结合事件机制实现数据的传递和处理,感兴趣... 目录1. 概述2. 关键技术点2.1 SerialPort类2.2 异步接收数据2.3 数据解析2.

SpringBoot接收JSON类型的参数方式

《SpringBoot接收JSON类型的参数方式》:本文主要介绍SpringBoot接收JSON类型的参数方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、jsON二、代码准备三、Apifox操作总结一、JSON在学习前端技术时,我们有讲到过JSON,而在

Spring Boot整合消息队列RabbitMQ的实现示例

《SpringBoot整合消息队列RabbitMQ的实现示例》本文主要介绍了SpringBoot整合消息队列RabbitMQ的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录RabbitMQ 简介与安装1. RabbitMQ 简介2. RabbitMQ 安装Spring

springboot rocketmq配置生产者和消息者的步骤

《springbootrocketmq配置生产者和消息者的步骤》本文介绍了如何在SpringBoot中集成RocketMQ,包括添加依赖、配置application.yml、创建生产者和消费者,并展... 目录1. 添加依赖2. 配置application.yml3. 创建生产者4. 创建消费者5. 使用在

如何通过Python实现一个消息队列

《如何通过Python实现一个消息队列》这篇文章主要为大家详细介绍了如何通过Python实现一个简单的消息队列,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录如何通过 python 实现消息队列如何把 http 请求放在队列中执行1. 使用 queue.Queue 和 reque