使用ASP.NET MVC、Rabbit WeixinSDK和Azure快速开发部署微信后台

(此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注。)

题记:公众号后台系统和数据都基本准备妥当了,可以来分享下我是如何开发本微信公众号的后台系统了。

首先说说我对公众号后台的简单需求:

  • 读者可以方便的获取历史文章
  • 可以通过关键字查找文章
  • 可以通过发表日期查找文章

基于这样的需求,也基于我的公众号可用的接口(由于是没有微信认证的订阅号,可用接口少得可怜),故设计了如下的实现方案:

  • 后台用一个数据源保存所有文章的信息,具体的字段包含了微信自动回复所需要的必要字段(标题、描述、封面图片Url,文章Url),信息需要手动填入(如果接口权限够,其实可以自动读取的)。
  • 实现一系列命令行,来回应用户的输入。即定义特定的命令,解析命令,查询数据源,并回复内容。回复的内容可以是文本也可以是文章列表。

在有了需求和方案想法后,就是具体实现了。在考虑了几种技术选型后,最终还是决定用ASP.NET MVC、Entity Framework、Azure这样的方案来实现(主要是我时间不多,只能选择轻车熟路的技术路线)。然后在研究了几种.NET的微信后台SDK后,选择了一个由国内Rabbit团队刚刚开源的一个SDK作为基础。

这个SDK虽然版本还比较低,但是整个架构设计的很不错,对微信的API封装的很好,基于它进行微信后台开发就很容易。不过为了方便,我Fork了这个项目,也做了一些调整(使用的.NET运行时改为4.5,去掉一些多余的Nuget包,也把Nuget包升级到最新)。我的地址在:https://github.com/heavenwing/WeiXinSDK

下面就简单介绍一下我基于Rabbit WeixinSDK的实现,这个也算是Rabbit WeixinSDK的简单教程。

  1. 新建一个ASP.NET MVC 5的项目
  2. 引用EntityFramework.SqlServerCompact,因为我们打算在本地调试和Staging环境中使用SQL Server Compact(避免使用Azure SQL Database带来的额外费用)
  3. 创建文章信息的数据模型(Article)和DbContext。
  4. 使用VS提供的脚手架来创建一个MVC 5 Controller with views, using Entity Framework(ArticlesController),这样你马上就可以对文章信息进行管理(无需编写任何代码)。我给这个Controller加上了[Authorize],以便我登录后才能管理内容。
  5. 克隆Rabbit WeixinSDK最新的代码,通过项目引用它。暂时不要用Nuget来引用,因为Nuget的版本比代码低(我一开始就是这样,结果遇到一些问题)。
  6. 创建一个MessageHandlerMiddleware(CommandMessageHandlerMiddleware)来包含你需要响应微信post内容的动作,包括事件、文本输入等。注意只能有一个,因为一开始我以为可以把不同的处理事件放到不同的MessageHandlerMiddleware中,结果无法正常得到返回消息。
  7. 创建一个微信接口用的空Controller(WeChatController),提供两个Action,一个通过HttpGet用于验证接口,一个通过HttpPost用于消息的收发。根据Rabbit WeixinSDK的规范,把CommandMessageHandlerMiddleware注册到HandlerBuilder中(在IgnoreRepeatMessageHandlerMiddleware之后,GenerateResponseXmlHandlerMiddleware之前)。注意和Rabbit WeixinSDK原示例不同的地方是要对Action异步化。
  8. 在Azure中创建两个Web App分别用于测试站点和生产站点。(我选择的是一个免费用于测试、一个共享用于生产)。导出他们的发布配置,导入到VS中用于发布。
  9. 为了本地调试和Staging用SQL Compact,生产用SQL Server,我创建了两个连接字符串,名称分别为"wechat_sqldb"和"wechat_sqlcompactdb",通过条件编译来改变DbContext对连接字符串的使用,从而非常容易的达到数据库自由切换。
  10. 然后分别发布测试站点和生产站点后,到Azure后台的应用配置中,根据情况填写web.config中AppSettings中的配置。比如我的测试站点的wx:AppId和wx:AppSecret就填写的是“微信公众平台接口测试帐号”的信息,生产站点才是填写的真正内容。同理,ida:ClientId也可以分别填写。这种部署和配置方式既方便了调试,又隔离了数据。
  11. 在手机上分别对测试站点和生产站点进行实际用户验收测试。到此,使用ASP.NET MVC、Rabbit WeixinSDK和Azure快速开发部署微信后台的工作就完成了。

我的这个后台系统已经开源在GitHub上,供大家参考和交流:https://github.com/heavenwing/MyWeChatPublic

当然,我的后台系统的功能还有待进一步完善,有任何使用问题欢迎和我交流。如果你也想用这个项目给自己的公众号上一套后台,遇到技术问题也欢迎和我交流。

    posted @ 2015-07-28 17:05  朱永光  阅读(1619)  评论(0编辑  收藏