(此文章同时发表在本人微信公众号“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

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

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

  1. ASP.NET MVC Display Mode 移动端视图 配置对微信内置浏览器的识别

    最近在捣鼓一个稍微有点low的商城网站,没有计划做app却要求有个wap版,而前端又没有做成响应式,时间WTF,直接利用了asp.net mvc的Display Mode Provider. 使用方式 ...

  2. ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(2)之创建项目

    我们在创建项目的时候一定要遵循层次和命名的原则,同时也要有统一的规范,无论是多人项目还是单人项目,能够让人看着一目了然并赏析悦目,做一个有追求的程序员. 例如IA.WebApp是视图控制器层(表现层) ...

  3. ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(1)之数据库设计

    本文主要讲解本项目网站所应用到的知识点,及数据库的相关设计: 一.知识点 (1)本项目主要采取ASP.NET MVC的编程模式,相信你已经了解到了MVC的具体含义是什么,这里不再赘述,有不了解的朋友, ...

  4. ASP.NET MVC+Spring.net+Nhibernate+EasyUI+Jquery开发案例(1)

    前言:由于这段时间公司的事情比较的繁忙,每天都要学习新的东西,所以好久没有写博客了,今天抽空写写博客来记录我这段时间研究的东西,给自己加深一下印象,我用easyUI的组件开发了一个简单操作数据库的小样 ...

  5. ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(11)之支付管理及广告管理...

    源码下载地址:http://www.yealuo.com/Sccnn/Detail?KeyValue=c891ffae-7441-4afb-9a75-c5fe000e3d1c 本项目属于个人项目,不支 ...

  6. ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(10)之素材管理

    源码下载地址:http://www.yealuo.com/Sccnn/Detail?KeyValue=c891ffae-7441-4afb-9a75-c5fe000e3d1c 素材管理模块也是我们这个 ...

  7. ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(15)之前台网站页面

    源码下载地址:http://www.yealuo.com/Sccnn/Detail?KeyValue=c891ffae-7441-4afb-9a75-c5fe000e3d1c 本项目主要是一个素材的分 ...

  8. ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(8)之文章管理

    到这一步,我们整个项目的核心搭建已经算是完成了,接下来就是我们业务功能的实际应用,也就是表现层的设计和实现,如果你是一个项目负责人,到这一步,接下来的工作就可以交给下面的兄弟去完成了,在这里我们用文章 ...

  9. ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(16)之轻博客

    源码下载地址:http://www.yealuo.com/Sccnn/Detail?KeyValue=c891ffae-7441-4afb-9a75-c5fe000e3d1c 项目到上面一步其实已经算 ...

  10. 《ASP.NET MVC 4 实战》----导读

    目 录 [第 1 章 绪论 1.1 发展阶段 ](https://yq.aliyun.com/articles/91051) 1.2 ASP.NET MVC是什么 1.3 ASP.NET MVC 3/ ...

最新文章

  1. HTML作业-潮流服装网页
  2. 第二篇 Python数据类型、字符编码、文件处理
  3. CSS3之3D效果中的transform运用
  4. Python脚本编译为可跨平台、跨架构执行的字节码文件pyc方法
  5. 一个空格引发的Bug! ----CSV输出和CSV读入
  6. K近邻算法(Python实现)
  7. linux宿主机文件拷贝,linux 虚拟机和宿主机相互拷贝文件
  8. Python 将中文大写数字转为阿拉伯数字
  9. 工控自动化通讯测试工具总结之--串口
  10. java100以内依个_使用Java多线程实现任务分发
  11. 双基测试题计算机理论基础知识梳理,与时俱进的认识“双基”
  12. 阿里云Code设置ssh公钥
  13. 用户标签体系的应用——精准营销
  14. 亚马逊 AWS推送 AWS nsn Was apps 证书配置 控制台创建 新建APP的几个坑 详解
  15. Android笔记之UI篇
  16. 第四讲财务报表的逻辑架构(财务分析与决策)
  17. 6810. 【2020.10.05提高组模拟】路哥
  18. 【vue项目】vue项目创建全流程,创建使用 vue-cli 搭建项目
  19. 电子邮件格式模板怎么写,如何在企业邮箱官网注册邮箱?
  20. matplotlib 几种常用的图表使用方法总结

热门文章

  1. paip.python ide 总结最佳实践o4.
  2. paip.输入法编程---增加码表类型
  3. paip.提升用户体验-----可访问性大原则及一些方法
  4. Rust :公钥、私钥与keypair、signature、verify 三部曲
  5. Julia: “.juliarc.jl” 的妙用:设置IDE启动时,自动运行某文件或某行命令
  6. 【图像压缩】基于matlab GUI小波变换图像压缩【含Matlab源码 609期】
  7. 语言输出奇树有多少总方法_新手如何快速学习一门编程语言?了解 TA,三周学好C语言...
  8. 无监督模型 训练过程_监督使用训练模型
  9. 算法与数据结构篇(暂未解答)
  10. java数组验证哥德巴赫猜想_java 验证哥德巴赫猜想