微信公众平台入门开发教程.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,用抓包工具抓微信的包, ...
随机推荐
- 1.C#中通过委托Action消除重复代码
阅读目录 一:重复的代码 二:使用委托消除重复代码 一:重复的代码 我们在写一些方法的时候,会在里面可能出现异常的地方使用try catch语句,这样每个方法都会有try catch语 ...
- Python: 拷贝函数签名
使用场景有很多,比如C API在Python下很多都变成了(*args, **kwargs)的参数,这时候可能需要为其添加一个更严格签名来约束参数. 查了许多资料,能有效的拷贝函数签名貌似只能通过动态 ...
- dwz_bootstrap + thinkphp
http://www.thinkphp.cn/code/936.html 回去继续学习 SuperWebSocket
- [Javascript] Limit Built Branches on Travis
By default, Travis will build all branches, tags, and Pull Requests. Because we're building our mast ...
- c#如何区分静态只读变量和常量
常量const 常量就是一个其值永远不会改变的静态字段.常量的值会在编译时自动推算,编译器会在遇到常量时,将其逐个替换为该常量的值.常量可以是C#内建的任何数字类型或枚举类型.声明一个常量的时候必须对 ...
- database link
create database link lims_qumas_supplyconnect to QPROCESSDEV identified by qprocessdevusing '(DESCRI ...
- Android复制assets目录下的图片到内存
转自:http://www.chenwg.com/android/android%E5%A4%8D%E5%88%B6assets%E7%9B%AE%E5%BD%95%E4%B8%8B%E7%9A%84 ...
- 我也要学C语言-第十九章:命令行参数
C语言的语法规定main函数是带连个参数的,因为当初是考虑是在控制台下写程序.于是用户可以给参数微控程序.其实现在的WINDOWS程序也可以带参数.一般正规军写的应该程序一般都带命令行参数,帮助文档, ...
- sql server 2008安装过程中服务器配置出错
请选择:对所有 SQL Server 服务使用相同的账号: 但这里不能给他设置自己定义的账号和密码 ( 例如下面设置它的账号为 sa ,密码为 654321) 就会发生错误:
- win7任务栏还原为xp样式
win7的确是非常强大的操作系统,值得一提的是超级任务栏,非常新颖,不过,不是很适应win7的超级任务栏,今天,我们恢复win7超级任务栏还原xp任务栏. 方法/步骤: 1.在win7超级任务栏空白处 ...