使用ASP.NET MVC、Rabbit WeixinSDK和Azure快速開發部署微信後臺

朱永光發表於2015-07-28

(此文章同時發表在本人微信公眾號“dotNET每日精華文章”,歡迎右邊二維碼來關注。)

題記:公眾號後臺系統和資料都基本準備妥當了,可以來分享下我是如何開發本微信公眾號的後臺系統了。

首先說說我對公眾號後臺的簡單需求:

  • 讀者可以方便的獲取歷史文章
  • 可以通過關鍵字查詢文章
  • 可以通過發表日期查詢文章

基於這樣的需求,也基於我的公眾號可用的介面(由於是沒有微信認證的訂閱號,可用介面少得可憐),故設計瞭如下的實現方案:

  • 後臺用一個資料來源儲存所有文章的資訊,具體的欄位包含了微信自動回覆所需要的必要欄位(標題、描述、封面圖片Url,文章Url),資訊需要手動填入(如果介面許可權夠,其實可以自動讀取的)。
  • 實現一系列命令列,來回應使用者的輸入。即定義特定的命令,解析命令,查詢資料來源,並回復內容。回覆的內容可以是文字也可以是文章列表。

在有了需求和方案想法後,就是具體實現了。在考慮了幾種技術選型後,最終還是決定用ASP.NET MVC、Entity Framework、Azure這樣的方案來實現(主要是我時間不多,只能選擇輕車熟路的技術路線)。然後在研究了幾種.NET的微信後臺SDK後,選擇了一個由國內Rabbit團隊剛剛開源的一個SDK作為基礎。

這個SDK雖然版本還比較低,但是整個架構設計的很不錯,對微信的API封裝的很好,基於它進行微信後臺開發就很容易。不過為了方便,我Fork了這個專案,也做了一些調整(使用的.NET執行時改為4.5,去掉一些多餘的Nuget包,也把Nuget包升級到最新)。我的地址在:https://github.com/heavenwing/WeiXinSDK

下面就簡單介紹一下我基於Rabbit WeixinSDK的實現,這個也算是Rabbit WeixinSDK的簡單教程。

  1. 新建一個ASP.NET MVC 5的專案
  2. 引用EntityFramework.SqlServerCompact,因為我們打算在本地除錯和Staging環境中使用SQL Server Compact(避免使用Azure SQL Database帶來的額外費用)
  3. 建立文章資訊的資料模型(Article)和DbContext。
  4. 使用VS提供的腳手架來建立一個MVC 5 Controller with views, using Entity Framework(ArticlesController),這樣你馬上就可以對文章資訊進行管理(無需編寫任何程式碼)。我給這個Controller加上了[Authorize],以便我登入後才能管理內容。
  5. 克隆Rabbit WeixinSDK最新的程式碼,通過專案引用它。暫時不要用Nuget來引用,因為Nuget的版本比程式碼低(我一開始就是這樣,結果遇到一些問題)。
  6. 建立一個MessageHandlerMiddleware(CommandMessageHandlerMiddleware)來包含你需要響應微信post內容的動作,包括事件、文字輸入等。注意只能有一個,因為一開始我以為可以把不同的處理事件放到不同的MessageHandlerMiddleware中,結果無法正常得到返回訊息。
  7. 建立一個微信介面用的空Controller(WeChatController),提供兩個Action,一個通過HttpGet用於驗證介面,一個通過HttpPost用於訊息的收發。根據Rabbit WeixinSDK的規範,把CommandMessageHandlerMiddleware註冊到HandlerBuilder中(在IgnoreRepeatMessageHandlerMiddleware之後,GenerateResponseXmlHandlerMiddleware之前)。注意和Rabbit WeixinSDK原示例不同的地方是要對Action非同步化。
  8. 在Azure中建立兩個Web App分別用於測試站點和生產站點。(我選擇的是一個免費用於測試、一個共享用於生產)。匯出他們的釋出配置,匯入到VS中用於釋出。
  9. 為了本地除錯和Staging用SQL Compact,生產用SQL Server,我建立了兩個連線字串,名稱分別為"wechat_sqldb"和"wechat_sqlcompactdb",通過條件編譯來改變DbContext對連線字串的使用,從而非常容易的達到資料庫自由切換。
  10. 然後分別釋出測試站點和生產站點後,到Azure後臺的應用配置中,根據情況填寫web.config中AppSettings中的配置。比如我的測試站點的wx:AppId和wx:AppSecret就填寫的是“微信公眾平臺介面測試帳號”的資訊,生產站點才是填寫的真正內容。同理,ida:ClientId也可以分別填寫。這種部署和配置方式既方便了除錯,又隔離了資料。
  11. 在手機上分別對測試站點和生產站點進行實際使用者驗收測試。到此,使用ASP.NET MVC、Rabbit WeixinSDK和Azure快速開發部署微信後臺的工作就完成了。

我的這個後臺系統已經開源在GitHub上,供大家參考和交流:https://github.com/heavenwing/MyWeChatPublic

當然,我的後臺系統的功能還有待進一步完善,有任何使用問題歡迎和我交流。如果你也想用這個專案給自己的公眾號上一套後臺,遇到技術問題也歡迎和我交流。

    相關文章