微信公众平台入门开发教程.Net(C#)框架
一、序言
一直在想第一次写博客,应该写点什么好?正好最近在研究微信公众平台开发,索性就记录下,分享下自己的心得,也分享下本人简单模仿asp.net运行机制所写的通用的微信公众平台开发.Net(c#)框架吧。由于本人知识有限、文字组织能力有限,如有错误或不足,请多多指教!
二、微信公众平台.Net(C#)框架介绍

运行流程:WeiXinRequestHandler.ashx接收微信服务器post请求,创建WeiXinApplication实例,构造函数中设置WeiContext(WeiXinRequest,WeiXinResponse)请求上下文属性,执行WeiXinApplication的GetResponseXml()方法,使用WeiXinHandlerFactory工厂类动态加载程序集,遍历程序集里的Type集合,反射获取控制器中的WeiXinMsgType属性值判断是否与请求消息上下文WeiXinRequest的WeiXinMsgType属性值一致创建相对应的消息处理控制器实例,并返回这个实例,赋值给WeiXinApplication中IWeiXinHandler属性值,调用ProcessWeiXin(WeiXinContext context)方法,执行完毕后,返回WeiXinResponse对象中的响应消息。
三、微信公众平台注册/接入相关事宜
1、注册:
填写基本信息,激活邮箱,登记信息......公众号信息。值得一提的是:目前个人只允许注册订阅号,公司单位才能注册服务号,服务号可以实现自定义菜单;公众号名称一经确认就无法修改!
2、接入:(必须条件:拥有自己的公网可访问的服务器)
①、成为开发者:在公众平台网站的高级功能 – 开发模式页,点击“成为开发者”按钮,根据官方文档填写相关接口配置信息并提交。
②、验证url有效性:开发者提交信息后,微信服务器将发送GET请求到填写的URL上,GET请求携带四个参数:
| 参数 | 描述 |
|---|---|
| signature | 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 |
| timestamp | 时间戳 |
| nonce | 随机数 |
| echostr | 随机字符串 |
开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。
加密/校验流程如下:
1. 将token、timestamp、nonce三个参数进行字典序排序
2. 将三个参数字符串拼接成一个字符串进行sha1加密
3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信 验证工具类:UtilityHelper
#region 检查加密签名是否一致 - public static bool CheckSignature(string signature, string timestamp, string nonce)
/// <summary>
/// 检查加密签名是否一致
/// </summary>
/// <param name="signature">微信加密签名</param>
/// <param name="timestamp">时间戳</param>
/// <param name="nonce">随机数</param>
/// <returns></returns>
public static bool CheckSignature(string signature, string timestamp, string nonce)
{
List<string> stringList = new List<string> {Token, timestamp, nonce};
// 字典排序
stringList.Sort();
return Sha1Encrypt(string.Join("", stringList)) == signature;
}
#endregion
#region 对字符串SHA1加密 - public static string Sha1Encrypt(string targetString)
/// <summary>
/// 对字符串SHA1加密
/// </summary>
/// <param name="targetString">源字符串</param>
/// <returns>加密后的十六进制字符串</returns>
private static string Sha1Encrypt(string targetString)
{
byte[] byteArray = Encoding.Default.GetBytes(targetString);
HashAlgorithm hashAlgorithm = new SHA1CryptoServiceProvider();
byteArray = hashAlgorithm.ComputeHash(byteArray);
StringBuilder stringBuilder = new StringBuilder();
foreach (byte item in byteArray)
{
stringBuilder.AppendFormat("{0:x2}", item);
}
return stringBuilder.ToString();
}
#endregion
#region 根据加密类型对字符串SHA1加密 - public static string Sha1Encrypt(string targetString, string encryptType)
/// <summary>
/// 根据加密类型对字符串SHA1加密
/// </summary>
/// <param name="targetString">源字符串</param>
/// <param name="encryptType">加密类型:MD5/SHA1</param>
/// <returns>加密后的字符串</returns>
private static string Sha1Encrypt(string targetString, string encryptType)
{
return FormsAuthentication.HashPasswordForStoringInConfigFile(targetString, encryptType);
}
#endregion
四、微信公众平台运行原理介绍

五、结束
字穷了...~~~!附源码吧。看web.config,打开Test.html进行测试。添加自己的消息控制器必须继承WeiXinHandlerType,程序集生成插件目录bin/WeiXinPlugins。
源码下载:WeiXin.Framework
微信公众平台入门开发教程.Net(C#)框架的更多相关文章
- 微信公众平台应用开发:方法、技巧与案例--柳峰,Java语言版本
他本人的博客:http://blog.csdn.net/lyq8479 作者简介: 刘运强,网名“柳峰”,资深微信公众平台应用开发工程师,国内微信公众平台应用开发的先驱之一,项目经验丰富.他还是一位资 ...
- 基于微信公众平台的开发(清华大学第二讲)_Alien的笔记
基于微信公众平台的开发(清华大学第二讲)_Alien的笔记 基于微信公众平台的开发(清华大学第二讲)
- 【课程分享】ASP.NET MVC5&微信公众平台整合开发实战(响应式布局、JQuery Mobile,Windows Azure、微信核心开发)
对这个课程有兴趣的,能够联系我QQ2748165793 基础知识储备 ASP.NET MVC 5基础(6讲) 第一讲-初识ASP.NET MVC并搭建整合开发环境 第二讲-深入MVC开发模式 第三讲- ...
- 微信公众平台PHP开发
p=932" style="color: rgb(255, 153, 0); text-decoration: none;">微信公众平台PHP开发 2013.05 ...
- 微信公众平台开发 - 动手篇。使用weinxinFundation开始一个微信公众平台的开发
本文主要讲解如何使用 weinxinFundation 进行二次开发. 步骤如下: 1.创建新的web项目. 在eclipse里新建一个dynamicly web project,比如本文叫weixi ...
- 用node.js进行微信公众平台的开发
基本原理 用nodejs怎样来实现对微信公众平台的开发呢? 别的就不多说了,先来简单介绍微信公众平台的基本原理. 微信服务器就相当于一个转发服务器,终端(手机.Pad等)发起请求至微信服务器,微信服务 ...
- 微信公众平台网页开发实战--3.利用JSSDK在网页中获取地理位置(HTML5+jQuery)
复制一份JSSDK环境,创建一份index.html文件,结构如图7.1所示. 图7.1 7.1节文件结构 在location.js中,封装“getLocation”接口,如下: 01 wxJSSD ...
- Taurus.MVC WebAPI 入门开发教程1:框架下载环境配置与运行(含系列目录)。
前言: Taurus.MVC 微服务版本已经发布了:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单. 以前都是框架发布时写点相关功能点的文章,没有形成 ...
- C#微信公众平台账号开发,从零到整,步骤详细。
想到微信的火热,想到其他公司开发手游,如雷电,酷跑类的,都不是很火,但是弱智的“打飞机”和“天天酷跑”却是那么火热.于是乎,想做个微信营销的软件.首先想到的是手机连电脑wifi,用抓包工具抓微信的包, ...
随机推荐
- [GraphQL] Write a GraphQL Schema in JavaScript
Writing out a GraphQL Schema in the common GraphQL Language can work for simple GraphQL Schemas, but ...
- floor相关
select floor(@f*0.22) -- 直接可显示结果 create table demo( id ,), id1 int ) select * from demo insert into ...
- C#判断一个string是否为数字
案一:Try...Catch(执行效率不高) private bool IsNumberic(string oText) { try { int var1=Convert.ToInt32 (oText ...
- Spring3系列8- Spring 自动装配 Bean
Spring3系列8- Spring 自动装配 Bean 1. Auto-Wiring ‘no’ 2. Auto-Wiring ‘byName’ 3. Auto-Wiri ...
- 聊聊 Linux 中的五种 IO 模型
本文转载自: http://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=2666538919&idx=1&sn=6013c451 ...
- JMir——Java版热血传奇2之资源文件与地图
我虽然是90后,但是也很喜欢热血传奇2(以下简称“传奇”)这款游戏. 进入程序员行业后自己也对传奇客户端实现有所研究,现在将我的一些研究结果展示出来,如果大家有兴趣的话不妨与我交流. 项目我托管到co ...
- 安装Window Services 提示错误 [SC] OpenSCManager FAILED 5
通过CMD注册Windows服务 之前一直这样写一直也是注册成功,今天却遇到了问题SC Manager 失败 sc create RenService binPath= C:\Tools\Stat ...
- saiku 分布式实践
saiku比较吃内存,一旦人多了,那么内存可能不够,所以会考虑主从结构,分担压力.为了保证数据的稳定性,也会有类似的考虑,那么问题来了,如何实现saiku的分布式搭建哪? 我阅读了一些国内的文章,没有 ...
- 读书笔记_Effective_C++_条款四十五:运用成员函数模板接受所有兼容类型
比如有一个Base类和一个Derived类,像下面这样: class BaseClass {…}; class DerivedClass : public BaseClass {…}; 因为是父类与子 ...
- Android样式的开发:layer-list篇
上图Tab的背景效果,和带阴影的圆角矩形,是怎么实现的呢?大部分的人会让美工切图,用点九图做背景.但是,如果只提供一张图,会怎么样呢?比如,中间的Tab背景红色底线的像素高度为4px,那么,在mdpi ...