使用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的简单教程。
- 新建一个ASP.NET MVC 5的项目
- 引用EntityFramework.SqlServerCompact,因为我们打算在本地调试和Staging环境中使用SQL Server Compact(避免使用Azure SQL Database带来的额外费用)
- 创建文章信息的数据模型(Article)和DbContext。
- 使用VS提供的脚手架来创建一个MVC 5 Controller with views, using Entity Framework(ArticlesController),这样你马上就可以对文章信息进行管理(无需编写任何代码)。我给这个Controller加上了[Authorize],以便我登录后才能管理内容。
- 克隆Rabbit WeixinSDK最新的代码,通过项目引用它。暂时不要用Nuget来引用,因为Nuget的版本比代码低(我一开始就是这样,结果遇到一些问题)。
- 创建一个MessageHandlerMiddleware(CommandMessageHandlerMiddleware)来包含你需要响应微信post内容的动作,包括事件、文本输入等。注意只能有一个,因为一开始我以为可以把不同的处理事件放到不同的MessageHandlerMiddleware中,结果无法正常得到返回消息。
- 创建一个微信接口用的空Controller(WeChatController),提供两个Action,一个通过HttpGet用于验证接口,一个通过HttpPost用于消息的收发。根据Rabbit WeixinSDK的规范,把CommandMessageHandlerMiddleware注册到HandlerBuilder中(在IgnoreRepeatMessageHandlerMiddleware之后,GenerateResponseXmlHandlerMiddleware之前)。注意和Rabbit WeixinSDK原示例不同的地方是要对Action异步化。
- 在Azure中创建两个Web App分别用于测试站点和生产站点。(我选择的是一个免费用于测试、一个共享用于生产)。导出他们的发布配置,导入到VS中用于发布。
- 为了本地调试和Staging用SQL Compact,生产用SQL Server,我创建了两个连接字符串,名称分别为"wechat_sqldb"和"wechat_sqlcompactdb",通过条件编译来改变DbContext对连接字符串的使用,从而非常容易的达到数据库自由切换。
- 然后分别发布测试站点和生产站点后,到Azure后台的应用配置中,根据情况填写web.config中AppSettings中的配置。比如我的测试站点的wx:AppId和wx:AppSecret就填写的是“微信公众平台接口测试帐号”的信息,生产站点才是填写的真正内容。同理,ida:ClientId也可以分别填写。这种部署和配置方式既方便了调试,又隔离了数据。
- 在手机上分别对测试站点和生产站点进行实际用户验收测试。到此,使用ASP.NET MVC、Rabbit WeixinSDK和Azure快速开发部署微信后台的工作就完成了。
我的这个后台系统已经开源在GitHub上,供大家参考和交流:https://github.com/heavenwing/MyWeChatPublic
当然,我的后台系统的功能还有待进一步完善,有任何使用问题欢迎和我交流。如果你也想用这个项目给自己的公众号上一套后台,遇到技术问题也欢迎和我交流。
使用ASP.NET MVC、Rabbit WeixinSDK和Azure快速开发部署微信后台的更多相关文章
- Asp.net Mvc模块化开发之“开启模块开发、调试的简单愉快之旅”
整个世界林林种种,把所有的事情都划分为对立的两个面. 每个人都渴望的财富划分为富有和贫穷,身高被划分为高和矮,身材被划分为胖和瘦,等等. 我们总是感叹,有钱人的生活我不懂;有钱人又何尝能懂我们每天起早 ...
- [转]ASP.NET MVC 5 学习教程:快速入门
本教程将使用Visual Studio 2013手把手教你构建一个入门的ASP.NET MVC5 Web应用程序.本教程配套的C#源码工程可通过如下网址下载:C#版本源码链接.同时,请查阅 Build ...
- ASP.NET MVC 5 学习教程:快速入门
起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 通过控制器访问模型的数据 生成的代码详解 使用 SQL Se ...
- ASP.NET MVC Display Mode 移动端视图 配置对微信内置浏览器的识别
最近在捣鼓一个稍微有点low的商城网站,没有计划做app却要求有个wap版,而前端又没有做成响应式,时间WTF,直接利用了asp.net mvc的Display Mode Provider. 使用方式 ...
- 基于TeamCity的asp.net mvc/core,Vue 持续集成与自动部署
一 Web Server(Windows)端的配置 1.配置IIS,重要的是管理服务 1.1 配置FTP(前端NPM项目需要) 该步骤略,如果是在阿里云ESC上,需要开启端口21(用来FTP认证握手) ...
- ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(2)之创建项目
我们在创建项目的时候一定要遵循层次和命名的原则,同时也要有统一的规范,无论是多人项目还是单人项目,能够让人看着一目了然并赏析悦目,做一个有追求的程序员. 例如IA.WebApp是视图控制器层(表现层) ...
- ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(1)之数据库设计
本文主要讲解本项目网站所应用到的知识点,及数据库的相关设计: 一.知识点 (1)本项目主要采取ASP.NET MVC的编程模式,相信你已经了解到了MVC的具体含义是什么,这里不再赘述,有不了解的朋友, ...
- ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(13)之会员登录注册
源码下载地址:http://www.yealuo.com/Sccnn/Detail?KeyValue=c891ffae-7441-4afb-9a75-c5fe000e3d1c 会员中心,是我们与用户交 ...
- ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(11)之支付管理及广告管理
源码下载地址:http://www.yealuo.com/Sccnn/Detail?KeyValue=c891ffae-7441-4afb-9a75-c5fe000e3d1c 本项目属于个人项目,不支 ...
随机推荐
- PHP常用字符串操作函数实例总结(trim、nl2br、addcslashes、uudecode、md5等)
/*常用的字符串输出函数 * * echo() 输出字符串 * print() 输出一个或多个字符串 * die() 输出一条信息,并退出当前脚本 * printf() 输出格式化字符串 * spri ...
- poj 1220(短除法)
http://poj.org/problem?id=1220 题意:进制转换,把a进制转换为b进制. 如果数据不大的话,那么这个题还是很简单的,但这个题就是数据范围太大,所以这里可以采用短除法来做. ...
- Centos7 修改SSH 端口
修改/etc/ssh/sshd_config vi /etc/ssh/sshd_config #Port 22 //这行去掉#号,防止配置不好以后不能远程登录,还得去机房修改,等修改以后的端口能使用以 ...
- 右下角浮窗&动画效果
2015-07-17 11:07:57 CSS #goreg { width: 70px; position: fixed; bottom: 20px; right: 25px; ; opacity: ...
- Spring4 与 Hibernate4 整合过程中的问题记录
Spring4使用注解配置,很方便也很有趣,就是有一些坑需要自己去发现和解决,笔者列出自己在使用过程中遇到的问题,希望对您有所帮助. 1.如果使用hibernate.cfg.xml配置文件配置Hibe ...
- Tcpdump的详细用法
1. TCPDump介绍 TcpDump可以将网络中传送的数据包的"头"完全截获下来提供分析.它支持针对网络层.协议.主机.网络或端口的过滤,并提供and.or.not等逻辑语句来 ...
- Maven实现直接部署Web项目到Tomcat7(转)
转载自:http://my.oschina.net/angel243/blog/178554 以前在项目中很少使用Maven,最近自己学习了一下maven,真的是非常强大的项目构建工具,对于依赖包的定 ...
- 引入Fresco
这里告诉你如何在项目中引入 Fresco. 使用 Android Studio 或者其他 Gradle 构建的项目 编辑 build.gradle 文件: 1 2 3 4 dependencies { ...
- 【leetcode】Maximal Rectangle (hard)★
Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and ...
- 使用cocoapods导入第三方类库后 头文件没有代码提示?
选择Target -> Build Settings 菜单,找到\”User Header Search Paths\”设置项 新增一个值"${SRCROOT}",并且选择\ ...