微信快速开发框架(二) -- 快速开发微信公众平台框架---简介

简介: 年底了,比较忙,大家都在展望未来,对于30+的我来说,发展和稳定是个难以取舍的问题。最近发了些求职信,鸟无音讯,没事做,做点帮助大家的东西吧。 之前做了个微信公众平台的查询系统,在开发中,发觉了一些微信公众平台的接口问题《对微信公众平台开发的消息处理》,开发起来比较痛苦,对于微信过来的消息,需要解析后一个一个来返回,编写之痛苦,相信有人明白。

年底了,比较忙,大家都在展望未来,对于30+的我来说,发展和稳定是个难以取舍的问题。最近发了些求职信,鸟无音讯,没事做,做点帮助大家的东西吧。

之前做了个微信公众平台的查询系统,在开发中,发觉了一些微信公众平台的接口问题《对微信公众平台开发的消息处理》,开发起来比较痛苦,对于微信过来的消息,需要解析后一个一个来返回,编写之痛苦,相信有人明白。在开发中,一直考虑着如何来简化开发,暂时想不到好的模式来开发,就自己胡乱写了一个,希望对大家有帮助。

代码已发布到github:https://github.com/JamesYing/JCWX

第一步:创建Model类库,我把微信发送来的消息,事件、返回回去的消息,都写成了Demo

RequestMessage:微信发送过来的消息、事件。此类是个虚类,继承自WXMessage。

ResponseMessage:返回给微信服务器端的消息,同样也是虚类,继承自WXMessage。

在《对微信公众平台开发的消息处理》中,已经知道,微信服务器端通过Post方式,发来一段xml,通过Request.InputStream获取,是个Stream类型,之前一直考虑着,用XmlSerializer.Deserialize(stream)来解析成对象,但在实践当中,发觉无法判断MsgType,我必须先判断再解析,从性能上来说不太合适,所以我又重写了RequestMessage的构造函数,RequestMessage(XElement),把Stream –> XElement,就可以构造RequestMessage(要使用.net framework 3.5以上版本,您也可以自己修改成适合3.5以下版本)。不过我还是保留了原先的Deserialize方式,使用方法:RequestMessage.Deserializ<RequestMessage>(stream),具体可以参考我的源代码

我们知道返回给用户的也是一个Xml信息,您可以直接使用ResponseMessage.Serializable()返回给用户xml文档。ResponseMessage的构造函数中,有一个ResponseMessage(RequestMessage message),这是为了把FromUserName, ToUserName转换一下,后续文章会继续讲解。

第二步:创建了Business类库,提供一些公开接口,方便大家来进行开发。

IMessageRole:信息处理规则,规则的具体实现,请继承此接口

IMessageHandler:信息处理,根据信息,反馈给用户。

NotHandlerMessage:继承自IMessageHandler,这是一个在无法处理情况下,返回一个null的实现,您也可以自己来写。

IMessageRole接口中,只有一个IMessageHandler MessageRole(XElement xml);方法,为了提高性能,我把过来的Stream转换成了XElement,通过xml.Element(“MsgType”)进行类型判断,返回一个IMessageHandler。

IMEssageHandler:ResponseMessage HandlerRequestMessage(XElement xml);根据不同的Request返回给用户不同的ResponseMessage。

这个快速框架就这些,很简单,实践的话,需要自己编写:

1、信息处理规则,继承IMessageRole,在处理中,您可以根据MsgType进行分析,也可以根据不同Text内容进行分析,返回不同IMessageHanlder就可以了。

2、信息处理,继承IMessageHandler,这个可能要写很多个,看你的项目要求了。

微信公众平台提供了测试接口,但暂时我还没有用,就简单自己模拟了下。

创建一个RequestTextMessage(文本信息):

var request = new RequestTextMessage
            {
                ToUserName = "sh_bus",
                FromUserName = "jamesying1",
                MsgId = 123123123L,
                CreateTime = 1231231322L,
                Content = "my request message"
            };

模拟成Stream:

StringWriter sw = new StringWriter();
            var xmlSerializer = new XmlSerializer(typeof(RequestTextMessage));
            var ns = new XmlSerializerNamespaces();
            ns.Add("", "");
            xmlSerializer.Serialize(sw, request, ns);
            Console.WriteLine(sw.ToString());
            Stream stream = new MemoryStream(sw.Encoding.GetBytes(sw.ToString()));

好了,有了模拟环境,我们,我们写一个自己的规则:

public class MyMessageRole : IMessageRole
    {
        public IMessageHandler MessageRole(XElement xml)
        {
            try
            {
                MsgType msgType = (MsgType)Enum.Parse(typeof(MsgType), xml.Element("MsgType").Value, true);
                return MessageHandlerByMsgType(msgType);
            }
            catch
            {
                return new NotHandlerMessage();
            }
        }

        private IMessageHandler MessageHandlerByMsgType(MsgType msgType)
        {
            IMessageHandler messageHandler = null;

            switch (msgType)
            {
                case MsgType.Text:
                    messageHandler = new TextMessageHander();
                    break;
                case MsgType.Event:
                    messageHandler = new EventMessageHandler();
                    break;
                default:
                    messageHandler = new NotHandlerMessage();
                    break;
            }

            return messageHandler;
        }
    }

 

再编写2个消息处理类:

public class TextMessageHandler : IMessageHandler
    {
        public ResponseMessage HandlerRequestMessage(XElement xml)
        {
            var request = new RequestTextMessage(xml);
            if (request.Content.IndexOf("info") > -1)
            {
                return new ResponseTextMessage(request)
                {
                    Content = "this message has keyword:info"
                };
            }
            else
            {
                return new ResponseTextMessage(request)
                {
                    Content = "this message has not keyword"
                };
            }
        }
    }

TextMessageHandler中,处理的类型为文本信息,判断内容中含有info,返回一个ResponseTextMessage。下面我们实践下:

var reader = XmlReader.Create(stream);
            var doc = XDocument.Load(reader);
            var xml = doc.Element("xml");
            IMessageRole role = new MyMessageRole();
            IMessageHandler handler = role.MessageRole(xml);
            ResponseMessage response = handler.HandlerRequestMessage(xml);
            if (response != null)
            {
                Console.WriteLine(response.Serializable());
            }
            else
            {
                Console.WriteLine("not handler");
            }

请加入response的判断,检查是否为空,因为我们不是每条消息都必须处理的。

看下运行结果:

image

ok,运行成功,目前还未进行测试,后续会加入测试代码,相信有了这个快速开发框架,会给大家开发微信公众平台有更好的帮助。好了,下班了,明天继续说明一些Model。

代码已发布到github:https://github.com/JamesYing/JCWX

相关文章
|
3月前
|
机器人 数据安全/隐私保护 Python
企业微信自动回复软件,企业微信自动回复机器人,python框架分享
企业微信机器人包含完整的消息处理流程,支持文本消息自动回复、事件处理、消息加密解密等功能
|
28天前
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。
|
2月前
|
小程序 JavaScript API
uni-halo + 微信小程序开发实录:我的第一个作品诞生记
这篇文章介绍了使用uni-halo框架进行微信小程序开发的过程,包括选择该框架的原因、开发目标以及项目配置和部署的步骤。
108 0
uni-halo + 微信小程序开发实录:我的第一个作品诞生记
|
3月前
|
JSON 机器人 API
微信机器人自动回复插件,vx自动回复机器人脚本助手,python框架分享
这个微信机器人系统包含三个主要模块:主程序基于itchat实现微信消息监听和自动回复功能
|
5月前
|
小程序 前端开发 Android开发
小程序微信分享功能如何开发?开放平台已绑定仍不能使用的问题?-优雅草卓伊凡
小程序微信分享功能如何开发?开放平台已绑定仍不能使用的问题?-优雅草卓伊凡
1158 29
小程序微信分享功能如何开发?开放平台已绑定仍不能使用的问题?-优雅草卓伊凡
|
3月前
|
JSON 机器人 数据安全/隐私保护
微信自动聊天机器人, 微信自动回复机器人,python框架分享
这个微信机器人实现包含主程序、配置文件、工具函数和测试脚本四个模块。主程序使用itchat库
|
4月前
|
监控 数据可视化 数据处理
微信养号脚本,全自动插件,AUTOJS开发版
这是一套自动化微信养号工具,包含主脚本`wechat_auto.js`与配置文件`config.json`。主脚本实现自动浏览朋友圈、随机阅读订阅号文章及搜索指定公众号三大功能,支持自定义滚动次数、阅读时长等参数。代码通过随机化操作间隔模拟真实用户行为,具备完善的错误处理和日志记录功能。配套UI模块提供可视化操作界面,可实时监控任务状态与运行日志,便于调整参数设置。控制器部分扩展了批量数据处理能力,如学生信息的增删改查操作,适用于多场景应用。下载地址:https://www.pan38.com/share.php?code=n6cPZ 提取码:8888(仅供学习参考)。
|
4月前
|
人工智能 监控 数据可视化
微信养号脚本插件,全自动化工具,【autojs实现框架】
这是一套微信养号自动化脚本,包含主脚本`wechat_auto.js`和配置文件`config.json`。脚本实现自动浏览朋友圈、订阅号新闻文章及指定公众号历史文章三大功能,支持自定义滚动次数、阅读时长与运行时间等参数。特点包括随机化操作、多种浏览模式交替及完善的日志记录。配套UI模块提供可视化控制界面,方便监控任务状态与调整参数。下载地址:https://www.pan38.com/share.php?code=n6cPZ,提取码:8888(仅供学习参考)。
|
6月前
|
小程序 Java 关系型数据库
weixin163基于微信小程序的校园二手交易平台系统设计与开发ssm(文档+源码)_kaic
本文介绍了一款基于微信小程序的校园二手物品交易平台的开发与实现。该平台采用Java语言开发服务端,使用MySQL数据库进行数据存储,前端以微信小程序为载体,支持管理员和学生两种角色操作。管理员可管理用户、商品分类及信息、交易记录等,而学生则能注册登录、发布购买商品、参与交流论坛等。系统设计注重交互性和安全性,通过SSM框架优化开发流程,确保高效稳定运行,满足用户便捷交易的需求,推动校园资源共享与循环利用。
|
6月前
|
小程序 关系型数据库 Java
weixin168“返家乡”高校暑期社会实践微信小程序设计与开发ssm(文档+源码)_kaic
本文探讨高校暑期社会实践微信小程序的开发与应用,旨在通过信息化手段提升活动管理效率。借助微信小程序技术、SSM框架及MySQL数据库,实现信息共享、流程规范和操作便捷。系统涵盖需求分析、可行性研究、设计实现等环节,确保技术可行、操作简便且经济合理。最终,该小程序可优化活动发布、学生信息管理和心得交流等功能,降低管理成本并提高工作效率。

热门文章

最新文章