.net微信公众号开发——快速入门

简介: 原文:.net微信公众号开发——快速入门作者:王先荣     最近在学习微信公众号开发,将学习的成果做成了一个类库,方便重复使用。     现在微信公众号多如牛毛,开发微信的高手可以直接无视这个系列的文章了。
原文: .net微信公众号开发——快速入门

作者:王先荣

    最近在学习微信公众号开发,将学习的成果做成了一个类库,方便重复使用。

    现在微信公众号多如牛毛,开发微信的高手可以直接无视这个系列的文章了。

    使用该类库的流程及寥寥数行代码得到的结果如下。

  

    本文的源代码主要在:http://git.oschina.net/xrwang2/xrwang.weixin.PublicAccount/blob/master/xrwang.net/WeixinInterface.ashx以及http://git.oschina.net/xrwang2/xrwang.weixin.PublicAccount/blob/master/xrwang.net/Global.asax

1 引用微信公众号类库

    引用xrwang.weixin.PublicAccount。

 

2 添加公众号信息

    添加提供服务的公众号的信息,包括:原始id、AppId、AppSecret、EncodingAESKey。代码如下:

AccountInfoCollection.SetAccountInfo(new AccountInfo("YourOriginalId", "AppId", "AppSecret", "Token", "EncodingAESKey"));

    如果需要同时给多个公众号提供服务,重复上面这行代码就可以了。

    (注:由于微信服务器的原因,如果用同一页面处理多个公众号,那么Token必须一致;如果针对每个公众号单独建立一个页面来处理,那么没有Token限制。)

    我喜欢将添加公众号信息的工作放到Gobal.asax的Application_Start方法中。

 

3 与微信服务器通信

    我添加了名为“WeixinInterface.ashx”的一般处理页,并在其中与微信服务器进行通信,包括:校验请求、处理请求、回复适当的响应。代码如下:

    public void ProcessRequest(HttpContext context)

    {

        string result = string.Empty;

        if (Validate(context))

        {

            if (context.Request.HttpMethod == WebRequestMethods.Http.Get)

                result = HandleGet(context);

            else if (context.Request.HttpMethod == WebRequestMethods.Http.Post)

                result = HandlePost(context);

        }

        else

            Message.Insert(new Message(MessageType.Exception, "校验消息失败。\r\n地址:" + context.Request.RawUrl));

        context.Response.Write(result);

    }
与微信服务器通信

3.1 校验请求

    首先,我们需要校验接收到的请求是否来自微信服务器,方法如下:

    /// <summary>

    /// 验证消息的有效性

    /// </summary>

    /// <param name="context"></param>

    /// <returns>如果消息有效,返回true;否则返回false。</returns>

    private bool Validate(HttpContext context)

    {

        string token = AccountInfoCollection.First.Token;   //由于在校验微信签名时,微信未传入公众号,因此这里用第一个公众号的TOKEN

        string signature = RequestEx.TryGetQueryString("signature");

        string timestamp = RequestEx.TryGetQueryString("timestamp");

        string nonce = RequestEx.TryGetQueryString("nonce");

        if (string.IsNullOrWhiteSpace(signature) || string.IsNullOrWhiteSpace(timestamp) || string.IsNullOrWhiteSpace(nonce))

            return false;

        return xrwang.weixin.PublicAccount.Utility.CheckSignature(signature, token, timestamp, nonce);

    }
校验请求

    当然,如果你对世界充满爱,相信没有欺骗;如果你厉行节约,急需提高性能;不校验也是可以的。

3.2 处理请求

    校验完请求之后,我们分两种情况处理请求:

(1)微信服务器的GET请求,用来验证我们的服务器是否正在工作,我们直接返回echostr就可以了;

    /// <summary>

    /// 处理微信的GET请求,校验签名

    /// </summary>

    /// <param name="context"></param>

    /// <returns>返回echostr</returns>

    private string HandleGet(HttpContext context)

    {

        return RequestEx.TryGetQueryString("echostr");

    }
处理GET请求

(2)微信服务器的POST请求,这是服务器分发给我们的消息,我们需要解析消息。

RequestMessageHelper helper = new RequestMessageHelper(context.Request);

3.3 回复响应

    解析完微信服务器分发给我们的消息之后,我们要做出回应。我这里把收到的消息直接发回去,偷懒~\(≧▽≦)/~啦啦啦

    /// <summary>

    /// 处理微信的POST请求

    /// </summary>

    /// <param name="context"></param>

    /// <returns>返回xml响应</returns>

    private string HandlePost(HttpContext context)

    {

        RequestMessageHelper helper = new RequestMessageHelper(context.Request);

        if (helper.Message != null)

        {

            ResponseBaseMessage responseMessage = HandleRequestMessage(helper.Message);

            return responseMessage.ToXml(helper.EncryptType);

        }

        else

            return string.Empty;

    }

 

    /// <summary>

    /// 处理请求消息,返回响应消息

    /// </summary>

    /// <returns>返回响应消息</returns>

    private ResponseBaseMessage HandleRequestMessage(RequestBaseMessage requestMessage)

    {

        ResponseTextMessage response = new ResponseTextMessage(requestMessage.FromUserName, requestMessage.ToUserName,

            DateTime.Now, string.Format("自动回复,请求内容如下:\r\n{0}", requestMessage));

        response.Content += "\r\n<a href=\"http://www.cnblogs.com\">博客园</a>";

        return response;

    }
回复响应

    当然了,正常情况下,我们需要兵来将挡水来土掩,根据不同的请求,回复对应的响应。如果需要对请求排队,再一一回复客服消息,可以先直接回复空字符串。回复客服消息的方法请看后面的文章。

 

4 微信公众号类库简介

    xrwang.weixin.PublicAccount是一套简化微信公众号开发的类库,由王先荣开发,并且正在添砖加瓦中。采用MIT开源协议,大家可以随便用,别删掉我的名字就可以啦。

    源代码的地址是:http://git.oschina.net/xrwang2/xrwang.weixin.PublicAccount

    如果发现BUG,请在博客中留言,或者给我发电子邮件:xrwang(a)126.com。

    千万不要用QQ或者阿里旺旺聊天,打扰我玩游戏,我会骂人的  >.<

 

5 体验测试号

    下面分别是我的测试号和公众号,您可以对照文章来体验哦。

测试号

 

测试号权限多,几乎可以测试公众平台的所有功能。

我的公众号

xrwang

 

个人订阅号,功能较少,不过我会特别优化。

 

好了,感谢您看完本文,希望对您有所帮助。本文来自xrwang的博客http://xrwang/cnblogs.com,欢迎在不篡改作者的前提下转载以传播知识。

目录
相关文章
|
自然语言处理 搜索推荐 小程序
微信公众号接口:解锁公众号开发的无限可能
微信公众号接口是微信官方提供的API,支持开发者通过编程与公众号交互,实现自动回复、消息管理、用户管理和数据分析等功能。本文深入探讨接口的定义、类型、优势及应用场景,如智能客服、内容分发、电商闭环等,并介绍开发流程和工具,帮助运营者提升用户体验和效率。未来,随着微信生态的发展,公众号接口将带来更多机遇,如小程序融合、AI应用等。
|
人工智能 芯片
D1net阅闻|OpenAI员工疯狂暗示,内部已成功开发ASI?被曝训出GPT-5但雪藏
D1net阅闻|OpenAI员工疯狂暗示,内部已成功开发ASI?被曝训出GPT-5但雪藏
|
11月前
|
SQL 小程序 API
如何运用C#.NET技术快速开发一套掌上医院系统?
本方案基于C#.NET技术快速构建掌上医院系统,结合模块化开发理念与医院信息化需求。核心功能涵盖用户端的预约挂号、在线问诊、报告查询等,以及管理端的排班管理和数据统计。采用.NET Core Web API与uni-app实现前后端分离,支持跨平台小程序开发。数据库选用SQL Server 2012,并通过读写分离与索引优化提升性能。部署方案包括Windows Server与负载均衡设计,确保高可用性。同时针对API差异、数据库老化及高并发等问题制定应对措施,保障系统稳定运行。推荐使用Postman、Redgate等工具辅助开发,提升效率与质量。
463 0
|
缓存 算法 安全
精选10款C#/.NET开发必备类库(含使用教程),工作效率提升利器!
精选10款C#/.NET开发必备类库(含使用教程),工作效率提升利器!
588 12
|
Linux API C#
基于 .NET 开发的多功能流媒体管理控制平台
基于 .NET 开发的多功能流媒体管理控制平台
255 9
|
Web App开发 前端开发 调度
一款基于 .NET + Blazor 开发的智能访客管理系统
一款基于 .NET + Blazor 开发的智能访客管理系统
234 8
|
前端开发 JavaScript C#
基于.NET8+Vue3开发的权限管理&个人博客系统
基于.NET8+Vue3开发的权限管理&个人博客系统
222 7
|
网络协议 C#
基于.NET WinForm开发的一款硬件及协议通讯工具
基于.NET WinForm开发的一款硬件及协议通讯工具
191 7
|
监控 前端开发 API
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统
544 5
|
机器学习/深度学习 人工智能 物联网
.NET 技术:引领未来开发潮流
.NET 技术以其跨平台兼容性、高效的开发体验、强大的性能表现和安全可靠的架构,成为引领未来开发潮流的重要力量。本文深入探讨了 .NET 的核心优势与特点,及其在企业级应用、移动开发、云计算、人工智能等领域的广泛应用,展示了其卓越的应用价值和未来发展前景。
273 5

热门文章

最新文章