微信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!