因為正在計划做一個微信機器人,需要用ASP.NET,找了一下只有PHP的SDK,沒有C#的,於是動手寫了一個,已經全面支持微信7.x所有接口,包括公眾號、小程序、企業號、開放平台、多客服、卡券、微信支付、等。
- 微信公眾平台地址:http://mp.weixin.qq.com
- Senparc.Weixin SDK 官網地址:https://weixin.senparc.com
- 所有源代碼(SDK+示例): https://github.com/JeffreySu/WeiXinMPSDK(新版本已發布,可以在github中查看最新的代碼和教程)
- 在線示例(開源):https://sdk.weixin.senparc.com
- 微信技術交流社區:https://weixin.senparc.com/QA
- chm幫助文檔下載:https://sdk.weixin.senparc.com/Document
- 微信開發資源匯總:https://github.com/JeffreySu/WeixinResource
- 《微信開發深度解析:微信公眾號、小程序高效開發秘籍》配套輔助閱讀系統:https://book.weixin.senparc.com
目前已經支持微信6.x所有API(主要是自定義菜單),並且我為大家准備了兩個非常好用的在線工具(都已在源代碼中開源):
- 在線菜單編輯工具:https://sdk.weixin.senparc.com/Menu 可視化編輯微信菜單
- 在線模擬請求測試工具:https://sdk.weixin.senparc.com/SimulateTool 已經支持並發及異步測試功能
- 緩存測試工具:https://sdk.weixin.senparc.com/Cache/Test 支持本地緩存、分布式緩存等不同策略
技術交流QQ群:
- 1群:300313885 (2000人群 已滿)
- 2群:293958349 (1000人群 已滿)
- 3群:342319110 (2000人群 已滿)
- 4群:372212092 (500人群 已滿)
- 5群:377815480 (1000人群 已滿)
- 6群:425898825 (1000人群 已滿)
- 7群:482942254 (500人群 已滿)
- 8群:106230270 (500人群 已滿)
- 9群:539061281 (500人群 已滿)
- 10群(分布式緩存):246860933
- 11群:553198593 (500人群 已滿)
- 12群(微信小程序):108830388
- 13群(開放平台):183424136 (500人群 已滿)
- 14群(視頻學員):588231256
- 15群:289181996
- 16群(開放平台):860626938
Senparc.Weixin SDK 配套微信開發圖書《微信開發深度解析:微信公眾號、小程序高效開發秘籍》已經出版,點擊這里購買正版!
用微信掃描下面二維碼,關注官方公眾號(添加后可發送文本、位置、圖片信息,以及點擊菜單,測試部分功能效果):
注意:開始開發之前需要到上面申請一個公眾賬號,並開啟“關鍵詞自動回復 => 公眾平台消息接口”,根據提示設置token等信息。
Senparc.Weixin.MP所有項目文件如下:
(項目已更新,具體文件請到https://github.com/JeffreySu/WeiXinMPSDK查看或同步最新代碼)
Senparc.Weixin.MP幾個關鍵類介紹如下:
- Entities/Request*.cs 用於接收微信平台自動發送到服務器的實體(發送過來的是XML),包括文本、位置、圖片三類
- Entities/Response*.cs 用於反饋給發送人的信息實體(最終會轉成XML),包括文本、新聞(圖文)兩類
- Helpers/EntityHelper.cs 用於實體和XML之間的轉換(由於其中有許多需要特殊處理的字段和類型,這里不能簡單用XML序列化)
- Helpers/MsgTypeHelper.cs 用於獲取消息類型
- CheckSignature.cs 驗證請求合法性類
- Enums.cs 各種枚舉
- RequestMessageFactory.cs 用於自動生成不同Request類型的實體,並作必要的數據填充
Senparc.Weixin.MP幾個關鍵類及重要方法(按一般使用過程排序,注意很多地方已經升級到更簡潔的方法,請參考最新的代碼:https://github.com/JeffreySu/WeiXinMPSDK)
- 生成驗證字符串:Senparc.Weixin.MP.CheckSignature.GetSignature(string timestamp, string nonce, string token = null),返回根據微信平台提供的數據,SHA1加密后的驗證字符串(注意token必須跟公眾平台的設置一直)
- 驗證請求:Senparc.Weixin.MP.CheckSignature.Check(string signature, string timestamp, string nonce, string token = null),驗證請求是否合法
- 獲取請求實體:var requestMessage = Senparc.Weixin.MP.RequestMessageFactory.GetRequestEntity(XDocument doc); 根據不同請求的類型,自動生成可用於操作的實體(doc只需要用XDocument.Parse(xmlString)就能生成),requestMessage.MsgType就是請求枚舉類型。
- 進行判斷及各類操作。
- 根據需要,創建響應類型的實體,如:var responseMessage = ResponseMessageBase.CreateFromRequestMessage(requestMessage, ResponseMsgType.Text) as ResponseMessageText; 即可返回文本類型信息。
注:v0.6版本以后,此方法可以簡寫為:var responseMessage = CreateResponseMessage<ResponseMessageText>(); - 由於目前微信只接受XML的返回數據,所以在返回之前還需要做一次轉換:XDocument responseDoc = Senparc.Weixin.MP.Helpers.EntityHelper.ConvertEntityToXml(responseMessage); var xmlString = responseDoc.ToString();
- 至此整個微信公眾賬號的自動響應過程結束。
所有Senparc.Weixin.MP源代碼及示例代碼已開源(示例是ASP.NET MVC 4,.NET 4.0,Senparc.Weixin.MP源代碼最低支持.NET 4.0,其中.NET 4.5的版本支持更多異步處理等新功能):
https://github.com/JeffreySu/WeiXinMPSDK
(包含三個文件夾:Senparc.Weixin.MP、Senparc.Weixin.MP.BuildOutPut、Senparc.Weixin.MP.Sample,分別對應Senparc.Weixin.MP.dll源代碼項目、Senparc.Weixin.MP.dll輸出目錄、Web示例,Web示例建議放到公網測試,讓公眾平台自動發送)
目前SDK還在測試中,歡迎大家提出寶貴意見!
補充:
關於直接使用Senparc.Weixin.MP.Sample部署到服務器上進行測試的朋友,有幾點需要注意一下:
- 進入微信公眾賬號后台后,依次進入 高級功能 > 開發模式 > 成為開發者 ,編輯接口配置信息,其中Url中需要填寫默認端口(80)的Url,如http://weixin.senparc.com/weixin (注意后面的/weixin一定要加,這是用於驗證的一個Controller地址)
- 為了確保安全,在上述接口配置信息中的Token最好輸入一個復雜一些的字符串,並且在Senparc.Weixin.MP.Sample/Controllers/WeixinController.cs中修改Token使之匹配,如:
關於Senparc.Weixin.MP.Test單元測試項目:所有Senparc.Weixin.MP核心代碼都已通過單元測試。沒有外網部署條件的朋友也可以使用Senparc.Weixin.MP.Test項目提供的單元測試進行測試,這些測試同樣適用於微信還沒有正式發布、無法實際測試的功能,如消息推送:
截圖對應測試版本:v0.3.1
微信開發教程(Senparc.Weixin.MP SDK): http://www.cnblogs.com/szw/archive/2013/05/14/weixin-course-index.html