微信C# SDKhtml
# | 模块功能 | DLL |
---|---|---|
1 | 基础库 | Senparc.Weixin.dll |
2 | 微信公众号 / 微信支付 / JSSDK / 摇周边 / 等等 | Senparc.Weixin.MP.dll |
3 | ASP.NET MVC 扩展 | Senparc.Weixin.MP.MVC.dll |
4 | 微信企业号 | Senparc.Weixin.QY.dl |
5 | 微信开放平台 | Senparc.Weixin.Open.dll |
6 | Redis 分布式缓存 | Senparc.Weixin.Cache.Redis.dll |
7 | Memcached 分布式缓存 | Senparc.Weixin.Cache.Memcached.dll |
本库为.NET4.5,其余.NET版本请看各自分支。git
目前官方的API都已完美集成,除非有特殊说明,全部升级都会尽可能确保向下兼容,因此已经发布的版本请放心使用或直接升级(覆盖)最新的DLLs。github
若是须要使用或修改此项目的源代码,建议先Fork。也欢迎将您修改的通用版本Pull Request过来。浏览器
源代码及最新更新:https://github.com/JeffreySu/WeiXinMPSDK缓存
1群:300313885,2群:293958349,3群:342319110,4群:372212092服务器
5群:377815480,6群:425898825,7群:482942254,8群:106230270微信
9群:539061281mvc
业务联系QQ:498977166微信公众平台
新浪微博:@苏震巍dom
若是这个项目对您有用,咱们欢迎各方任何形式的捐助,也包括参与到项目代码更新或意见反馈中来。谢谢!
资金捐助: 进入主页
微信公众平台开发系列教程:http://www.cnblogs.com/szw/archive/2013/05/14/weixin-course-index.html
文件夹 | 说明 |
---|---|
Senparc.Weixin.Cache | Senparc.Weixin.Cache.Memcached.dll 、 Senparc.Weixin.Cache.Redis.dll 等分布式缓存扩展方案 |
Senparc.Weixin.MP.BuildOutPut | 全部最新版本DLL发布文件夹 |
Senparc.Weixin.MP.MvcExtension | Senparc.Weixin.MP.MvcExtension.dll源码,为MVC4.0项目提供的扩展包。 |
Senparc.Weixin.MP.Sample | 能够直接发布使用的Demo(ASP.NET MVC 4.0) |
Senparc.Weixin.MP.Sample.WebForms | 能够直接发布使用的Demo(ASP.NET WebForms) |
Senparc.Weixin.MP | Senparc.Weixin.MP.dll 微信公众帐号SDK源代码 |
Senparc.Weixin.QY | Senparc.Weixin.QY.dll 微信企业号SDK源代码 |
Senparc.Weixin.Open | Senparc.Weixin.Open.dll 第三方开放平台SDK源代码 |
Senparc.Wiexin | 全部Senparc.Weixin.[x].dll 基础类库源代码 |
注:这是MVC项目,WebForms项目见对应Demo中的Weixin.aspx。
下面的Token须要和微信公众平台后台设置的Token同步,若是常常更换建议写入Web.config等配置文件(实际使用过程当中两列建议使用数字+英文大小写改写Token,Token一旦被破解,微信请求将很容易被伪造!):
public readonly string Token = "weixin";
下面这个Action(Get)用于接收并返回微信后台Url的验证结果,无需改动。地址如:http://domain/Weixin或http://domain/Weixin/Index
/// <summary> /// 微信后台验证地址(使用Get),微信后台的“接口配置信息”的Url填写如:http://weixin.senparc.com/weixin /// </summary> [HttpGet] [ActionName("Index")] public ActionResult Get(PostModel postModel, string echostr) { if (CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, Token)) { return Content(echostr); //返回随机字符串则表示验证经过 } else { return Content("failed:" + postModel.Signature + "," + MP.CheckSignature.GetSignature(postModel.Timestamp, postModel.Nonce, Token) + "。" + "若是你在浏览器中看到这句话,说明此地址能够被做为微信公众帐号后台的Url,请注意保持Token一致。"); } }
上述方法中的PostModel是一个包括了了Signature、Timestamp、Nonce(由微信服务器经过请求时的Url参数传入),以及AppId、Token、EncodingAESKey等一系列内部敏感的信息(须要自行传入)的实体类,同时也会在后面用到。
下面这个Action(Post)用于接收来自微信服务器的Post请求(一般由用户发起),这里的if必不可少,以前的Get只提供微信后台保存Url时的验证,每次Post必须从新验证,不然很容易伪造请求。
/// <summary> /// 用户发送消息后,微信平台自动Post一个请求到这里,并等待响应XML /// </summary> [HttpPost] [ActionName("Index")] public ActionResult Post(PostModel postModel) { if (!CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, Token)) { return Content("参数错误!"); } ... }
Senparc.Weixin.MP提供了2中处理请求的方式,传统方法及使用MessageHandler处理方法(推荐)。上面两个方法在wiki中已经有比较详细的说明,这里简单举例MessageHandler的处理方法。
MessageHandler的处理流程很是简单:
[HttpPost]
[ActionName("Index")] public ActionResult Post(PostModel postModel) { if (!CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, Token)) { return Content("参数错误!"); } postModel.Token = Token; postModel.EncodingAESKey = EncodingAESKey;//根据本身后台的设置保持一致 postModel.AppId = AppId;//根据本身后台的设置保持一致 var messageHandler = new CustomMessageHandler(Request.InputStream, postModel);//接收消息(第一步) messageHandler.Execute();//执行微信处理过程(第二步) return new FixWeixinBugWeixinResult(messageHandler);//返回(第三步) }
整个消息除了postModel的赋值之外,接收(第一步)、处理(第二步)、返回(第三步)分别只须要一行代码。
上述代码中的CustomMessageHandler是一个自定义的类,继承自Senparc.Weixin.MP.MessageHandler.cs。MessageHandler是一个抽象类,包含了执行各类不一样请求类型的抽象方法(如文字,语音,位置、图片等等),咱们只须要在本身建立的CustomMessageHandler中逐个实现这些方法就能够了。刚建好的CustomMessageHandler.cs以下:
using System; using System.IO; using Senparc.Weixin.MP.MessageHandlers; using Senparc.Weixin.MP.Entities; namespace Senparc.Weixin.MP.Sample.CustomerMessageHandler { public class CustomMessageHandler : MessageHandler<MessageContext> { public public CustomMessageHandler(Stream inputStream, PostModel postModel, int maxRecordCount = 0) : base(inputStream, postModel, maxRecordCount) { } public override IResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage) { //ResponseMessageText也能够是News等其余类型 var responseMessage = CreateResponseMessage<ResponseMessageText>(); responseMessage.Content = "这条消息来自DefaultResponseMessage。"; return responseMessage; } public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage) { //... } public override IResponseMessageBase OnVoiceRequest(RequestMessageVoice requestMessage) { //... } //更多没有重写的OnXX方法,将默认返回DefaultResponseMessage中的结果。 .... } }
其中OnTextRequest、OnVoiceRequest等分别对应了接收文字、语音等不一样的请求类型。
好比咱们须要对文字类型请求作出回应,只须要完善OnTextRequest方法:
public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage) { //TODO:这里的逻辑能够交给Service处理具体信息,参考OnLocationRequest方法或/Service/LocationSercice.cs var responseMessage = CreateResponseMessage<ResponseMessageText>(); responseMessage.Content = string.Format( "您刚才发送了文字信息:{0}", requestMessage.Content); return responseMessage; }
这样CustomMessageHandler在执行messageHandler.Execute()的时候,若是发现请求信息的类型是文本,会自动调用以上代码,并返回代码中的responseMessage做为返回信息。responseMessage能够是IResponseMessageBase接口下的任何类型(包括文字、新闻、多媒体等格式)。
从v0.4.0开始,MessageHandler增长了对用户会话上下文的支持,用于解决服务器上没法使用Session管理用户会话的缺陷。详见:用户上下文WeixinContext和MessageContext
命令:
PM> Install-Package Senparc.Weixin.MP
Senparc.Weixin.MP.MVC 针对 ASP.NET MVC 项目作了更多的优化,包括便捷的浏览器环境判断、官方 bug 修复等。
Nuget 地址:https://www.nuget.org/packages/Senparc.Weixin.MP.MVC
命令:
PM> Install-Package Senparc.Weixin.MP.MVC
Senparc.Weixin.QY.dll对企业号相关功能进行了封装,操做过程和微信公众帐号SDK(Senparc.Weixin.MP)保持了一致。
命令:
PM> Install-Package Senparc.Weixin.QY
Senparc.Weixin.Open.dll对目前全部的开放平台API进行了封装,消息处理过程和微信公众帐号SDK(Senparc.Weixin.MP)保持了一致,其余一些特殊的消息流程请先阅读官方的文档,而后对照Senparc.Weixin.MP.Sample中有关Open的Demo进行开发。
命令:
PM> Install-Package Senparc.Weixin.Open
Senparc.Weixin SDK 提供了完善的缓存策略接口,默认使用本机缓存实现,同时也提供了 Redis 和 Memcached 两个扩展方案,您也能够根据相同的规则添加本身的缓存策略。
PM> Install-Package Senparc.Weixin.Senparc.Weixin.Cache.Redis
PM> Install-Package Senparc.Weixin.Senparc.Weixin.Cache.Memcached
微信公众号
- 接收/发送消息(事件)
- 自定义菜单 & 个性化菜单
- OAuth受权
- JSSDK
- 微信支付
- 用户管理
- 素材管理
- 帐号管理
- 带参数二维码
- 长连接转短连接接口
- 微信认证事件推送
- 数据统计
- 微信小店
- 微信卡券
- 微信门店
- 微信智能
- 微信设备功能
- 多客服功能
- 微信摇一摇周边
- 微信连WI-FI(未完整)
- 微信扫一扫(商家)
微信开放平台
- 网站应用
- 公众号第三方平台
微信企业号
- 管理通信录
- 管理素材文件
- 管理企业号应用
- 接收消息与事件
- 发送消息
- 自定义菜单
- 身份验证接口
- JSSDK
- 第三方应用受权
- 企业号受权登录
- 企业号微信支付
- 企业回话服务
- 企业摇一摇周边
- 企业客服服务
缓存策略
- 策略扩展接口
- 本地缓存
- Redis 扩展包
- Memcached 扩展包
欢迎开发者对未完成或须要补充的模块进行 Pull Request!