使用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 本项目属于个人项目,不支 ...
随机推荐
- DevExpress使用教程合集
博客园把网站屏蔽掉了.So,做了点小手脚.点击进入网址后把URL中的“20%”去掉即可. DevExpress Universal Subscription是DevExpress旗下重要的用户界面控件 ...
- android studio Error:java.lang.OutOfMemoryError: GC overhead limit exceeded
android studio Error:java.lang.OutOfMemoryError: GC overhead limit exceeded 在app下的build.gradle中找到and ...
- [Linux]centOS7-1-1503-x86_64下安装VM-TOOLS
1.安装Perl. 2.如果提示 The path "" is not a valid path to the 3.10.0-229.el7.x86_64 kernel heade ...
- PLSQL
select t.*,rowid from Table t; 编辑器设置
- spfa(模板)
spfa作为图论中的常用算法,深受各类出题人和各位OIer的喜爱: so,为了给大众创造福利,宝宝在此奉上spfa大发的思路和模板:以感谢社会, 感谢CCF,感谢CCTV, 感谢我的老师,感谢同学们, ...
- EL表达式中fn函数 (转载)
JSTL 使用表达式来简化页面的代码,这对一些标准的方法,例如bean的getter/setter方法,请求参数或者context以及 session中的数据的访问非常方便,但是我们在实际应用中经常需 ...
- Android异步加载访问网络图片-解析json
来自:http://www.imooc.com/video/7871 推荐大家去学习这个视频,讲解的很不错. 慕课网提供了一个json网址可以用来学习:http://www.imooc.com/api ...
- (2016弱校联盟十一专场10.2) E.Coins
题目链接 很久之前写的了,好像是对拍打表过的,推一下就行了. #include <bits/stdc++.h> using namespace std; typedef long long ...
- MongoDB配置文件YAML-based选项全解
配置文件部分 MongoDB引入一个YAML-based格式的配置文件.2.4版本以前的仍然兼容. 我的mongodb配置文件: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
- linux service命令常见使用方法
service命令,顾名思义,就是用于管理Linux操作系统中服务的命令. 1. 声明:这个命令不是在所有的linux发行版本中都有.主要是在redhat.fedora.mandriva和centos ...