因為正在計劃做一個機器人,需要用ASP.NET,找了一下只有PHP的SDK,沒有C#的,於是動手寫了一個,準系統已經完成。
公眾平台地址:http://mp.weixin.qq.com
Senparc.Weixin.MP官網地址:http://weixin.senparc.com
所有原始碼(SDK+樣本): https://github.com/JeffreySu/WeiXinMPSDK(新版本發行,可以在github中查看最新的代碼和教程)
技術交流QQ群:300313885
用掃描下面二維碼,添加測試帳號為好友(添加後發送文本、位置、圖片資訊,測試反饋效果):
注意:開始開發之前需要到上面申請一個公眾帳號,並開啟“關鍵詞自動回複 => 公眾平台訊息介面”,根據提示設定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幾個關鍵類及重要方法(按一般使用過程排序)
- 產生驗證字串: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.3版本以後,此方法可以簡寫為:var responseMessage = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageText>(requestMessage);
- 由於目前只接受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 3.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
升級記錄:https://github.com/JeffreySu/WeiXinMPSDK/blob/master/Senparc.Weixin.MP.BuildOutPut/readme.md