微信快速开发框架(四)-- 体验微信公众平台快速开发框架

今天上午想着用那个框架来快速建立一个测试,用着用着,发觉了些bug,赶紧修复了下,目前已经更新到github上。

接下来,我们的快速开发,首先您要建立一个公众账号的测试账号,建立方法参见《建立微信公众平台测试账号》,我在项目中,加入了WebDemo项目,您可以参考以下。

上一篇介绍中,我说过先建立规则,但细想以下,貌似先要建立消息处理类,然后才能在规则中使用。

实践一下,这里我用了2个消息处理,一个是DefaultMessageHandler和CnBlogsMessageHandler,一个是默认的消息,在无法处理时返回,CnblogsMessageHandler是一个文本消息处理,您只要回复“博客园”就能看到相应的反馈消息。

先建立2个MessageHandler都继承IMessageHandler:

public class DefaultMessageHandler : IMessageHandler
    {
        private static string s_defaultMsg = "对不起,亲,我还无法了解您的需求,我会不断改进的!";

        public ResponseMessage HandlerRequestMessage(XElement xml)
        {
            var fromUserName = xml.Element("ToUserName").Value;
            var toUserName = xml.Element("FromUserName").Value;
            return new ResponseTextMessage
            {
                FromUserName = fromUserName,
                ToUserName = toUserName,
                CreateTime = DateTime.Now.Ticks,
                Content = s_defaultMsg
            };
        }
    }
public class CnblogsTextMessageHandler : IMessageHandler
    {
        private static string s_cnblogsMsg = "HI,博客园的园友,欢迎来到JamesYing的微信世界,请关注我,http://inday.cnblogs.com";
        public ResponseMessage HandlerRequestMessage(XElement xml)
        {
            var request = new RequestTextMessage(xml);
            return new ResponseTextMessage(request)
            {
                CreateTime = DateTime.Now.Ticks,
                Content = s_cnblogsMsg
            };
        }
    }

 

后面建立一些规则:

这里我建立了几套规则,先建立了主体规则:

public class WebMessageRole : IMessageRole
    {
        public IMessageHandler MessageRole(XElement xml)
        {
            try
            {
                var msgType = (MsgType)Enum.Parse(typeof(MsgType), xml.Element("MsgType").Value, true);

                return new MsgTypeMessageRole(msgType).MessageRole(xml);
            }
            catch
            {
                return new DefaultMessageHandler();
            }
        }
    }

MsgTypeMessageRole是一个根据类型处理的规则,与之前Demo不同,我把规则都细分了,这样耦合度减小,可以根据不同需求,在不同规则中修改。

public class MsgTypeMessageRole : IMessageRole
    {
        private MsgType MsgType { get; set; }

        public MsgTypeMessageRole(MsgType msgType)
        {
            this.MsgType = msgType;
        }

        public IMessageHandler MessageRole(XElement xml)
        {
            switch (MsgType)
            {
                case MsgType.Text:
                    return new TextMessageRole().MessageRole(xml);
                default:
                    return new DefaultMessageHandler();
            }
        }
    }

这里在判断为Text的时候,返回了另外一个规则,文本消息处理规则TextMessageRole,其余情况下则直接返回一个默认的消息处理DefaultMessageHandler。

public class TextMessageRole : IMessageRole
    {
        public IMessageHandler MessageRole(XElement xml)
        {
            var request = new RequestTextMessage(xml);
            if (request.Content.IndexOf("博客园") > -1)
            {
                return new CnblogsTextMessageHandler();
            }

            return new DefaultMessageHandler();
        }
    }

TextMessageRole 是个很简单的规则类,我只是判断在文本内容中是否含有“博客园”三个字,有的话,我直接返回CnblogsTextMessageHandler。

基本的处理都好了,接下来是在微信接口中,进行部署,在web项目中wx.aspx为接口地址。

我的公开测试地址:http://wx.jamesying.com/wx.aspx

在wx.aspx.cs中,进行一些必要的配置:

public partial class WX : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                //微信服务器一直把用户发过来的消息,post过来
                if (Request.HttpMethod == "POST")
                {
                    var reader = XmlReader.Create(Request.InputStream);

                    var doc = XDocument.Load(reader);
                    MyLog.Log(doc.ToString());
                    var xml = doc.Element("xml");
                    //把inputstream转换成xelement后,直接交给WebMessageRole来处理吧
                    var responseMessage =  new WebMessageRole()
                        .MessageRole(xml)
                        .HandlerRequestMessage(xml);

                    if (responseMessage != null)
                    {
                        Response.Write(responseMessage.Serializable());
#if DEBUG
                        MyLog.Log(responseMessage.Serializable());
#endif
                    }
                }
                else if (Request.HttpMethod == "GET") //微信服务器在首次验证时,需要进行一些验证,但。。。。
                {
                    //我仅需返回给他echostr中的值,就为验证成功,可能微信觉得这些安全策略是为了保障我的服务器,要不要随你吧
                    Response.Write(Request["echostr"].ToString());
                }
            }
            catch (Exception ex)
            {
                MyLog.Log("error:" + ex.ToString());
            }
        }
    }

至此,一个简单的微信公众平台接口已经配置完成,只要部署到自己的web服务器即可。在上一篇中,有人提到了之前有过接口+工厂的模式,说实在,真没看过,可能最近比较懒,没一直刷博客园吧。不过看了@戢俊建 的一篇关于微信平台的文章,觉得写得蛮好的,大家也可以看看。

做这个框架的目的,也是为了方便大家来进行开发,昨天有用户说提供一些模板比较好(其实就是MessageHandler),我觉得这个方案不错,过几天申请个公众账号,写几个常用的处理类,方便大家。当然也可以大家自己写,Email给我也行。

下面看下效果,您如果也要看效果,请关注我的测试账号(必须用扫一扫功能扫二维码才能添加):

我用了web weixin:

亲,可以关注我的微信:jamesying1

时间: 2024-10-23 04:37:21

微信快速开发框架(四)-- 体验微信公众平台快速开发框架的相关文章

微信公众平台快速上手教程Part4 关键词自动回复

中介交易 SEO诊断 淘宝客 云主机 技术大厅 课程来到了第四部分,这部分主要讲解自定义关键词应答设置,这是微信公众平台最核心部分希望大家可以认真阅读.如果对本篇教程有任何疑问或错漏之处欢迎留言或直接联系我进行更正修改. 我们点击高级功能会看到下图页面,里面有两种模式,一种是编辑模式,这也是我们最常用到的,另一种是开发模式,下一节课我们就会讲这个模式.现在我们点击进入编辑模式. 进入编辑模式后我们会看到默认开启的状态,点击里面的"设置"按钮,开始设置自动回复功能. 进入自动回复设置界面

微信公众平台快速上手教程Part7 微信运营十大要决

中介交易 SEO诊断 淘宝客 云主机 技术大厅 这次讲讲大家都很关心的话题"微信运营",微信公众帐号的运营难度确实比其他工具要高,毕竟微信公众帐号比较封闭,要获取用户的关注不是一件容易的事.而且微信也不是万能的,不是所有行业都适合使用,建议做微信营销之前先看看以下十条要决. 一.调研行业和区域用户基数 为什么第一条就是调研行业和区域用户基数呢?因为微信现在有3亿人使用,对比十几亿人口的国家这比例也不算很大,不是各个行业的人都会使用微信,所以你先要了解你的行业使用微信的人多不多,你经营店

微信公众平台快速上手教程Part9 详解自定义菜单与大家疑问

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 延伸阅读:微信公众平台快速上手教程Part8 微信是后端服务营销利器微信公众平台快速上手教程Part7 微信运营十大要决微信公众平台快速上手教程Part6 公众会议帐号微信公众平台快速上手教程Part5 开发模式讲解微信公众平台快速上手教程Part4 关键词自动回复微信公众平台快速上手教程Part3 素材编辑微信公众平台快速上手教程Part2

微信公众平台快速上手教程Part5 开发模式讲解

中介交易 SEO诊断 淘宝客 云主机 技术大厅 这部分主要讲解微信公众平台的开发模式,首先说明一下我不是程序员,所以本篇并非讲编程代码之类的,也并非开发模式的说明书,毕竟微信官方已经有一份详细的技术说明文档(在文章尾部提供文档地址),但是由于我们正在开发微信POP营销系统,所以我对开发模式有一定了解,这些了解应该会对准备尝试做微信开发的朋友会有一定帮助,少走部分弯路吧.如果对本篇教程有任何疑问或错漏之处欢迎留言或直接联系我进行更正修改. 首先我们要明确开发模式什么可以做,什么不可以做: 一.开发

微信公众平台快速上手教程Part6 公众会议帐号

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 有些朋友在注册微信公众平台的时候发现类型哪里可以选择为公众会议帐号,这一节我们来讲讲公众会议帐号.当大家选择公众会议帐号的时候,发现会出现红字提醒"会议号是有一定时间限制的公众帐号,过期后将无法登陆使用".但是据网友反映当会议帐号到期后,系统会自动切换回普通平台帐号,这样就可以继续使用,这个有待证实. 注册完成后,首先会进

微信公众平台快速上手教程Part8 微信是后端服务营销利器

中介交易 SEO诊断 淘宝客 云主机 技术大厅 最近有些客户跟我谈微信营销的时候,第一句就问我一个月可以带来多少粉丝,说实话我要帮你刷粉丝,你想刷多少我都可以给你刷,不过微信不是微博,微博刷了粉丝虽然没有多少营销效果,但是最起码可以展示给客户看自己的粉丝数量来获得荣誉感.微信刷粉丝只能自己看,而且每天面对一大堆僵丝粉有何意义呢?现在有不少微信公众账号粉丝数不超过1000,但就已经能实现业绩提升10%-30%左右,所以我们做的是精准,而不是一味追求粉丝数,做微信营销的目的是为精准客户提供服务. 这

微信已经“悄悄地”开放了公众平台

今天,登录微信的后台,我们看到微信已经"悄悄地"开放了公众平台! 之前微信开放平台内测的时候,我们作为第一批认证媒体入驻,用户能关注爱范儿的微信公众号,并每日收到少量精致的推送文章.这一平台向公众开放,意味着这个产品已经明确了它的发展方向,开始启航.普通用户得以一窥全貌,并将在新的形态下形成新的沟通场景. --从今天开始,每一个人都可以用一个 QQ 号码,打造自己的一个微信的公众号,并在微信平台上实现和特定群体的文字.图片.语音的全方位沟通.互动. 如何申请及使用 使用 QQ 号码,可

微信公众平台快速开发框架体验

今天上午想着用那个框架来快速建立一个测试,用着用着,发觉了些bug,赶紧修复了下,目前已经更新到github上. 接下来,我们的快速开发,首先您要建立一个公众账号的测试账号,建立方法参见<建立微信公众平台测试账号>,我在项目中,加入了WebDemo项目,您可以参考以下. 在上一篇介绍中,我说过先建立规则,但细想以下,貌似先要建立消息处理类,然后才能在规则中使用. 实践一下,这里我用了2个消息处理,一个是DefaultMessageHandler和CnBlogsMessageHandler,一个

微信公众平台快速开发框架 For Core 2.0 beta &amp;ndash;JCSoft.WX.Core 5.2.0 beta发布

写在前面 最近比较忙,都没有好好维护博客,今天拿个半成品来交代吧. 记不清上次关于微信公众号快速开发框架(简称JCWX)的更新是什么时候了,自从更新到支持.Net Framework 4.0以后基本上就没怎么维护了,一方面工作比较忙,一方面家庭也需要维护,男人,你懂的. 自从NetCore发布以后,一直想把JCWX更新到Core版本,从6月开始就着手更新了,大概花了一个月时间,更新到了Net Core 1.1版本,当时并没有对外公开,只是在Nuget上发布了下,随后8月的时候2.0发布了,借着机