文章說明: 本文是基於盛派網路蘇震巍老師的《微信公眾號+小程式快速開發》課程筆記。 課程地址: https://study.163.com/course/courseMain.htm?courseId=1004873017 本課項目地址: https://github.com/wechatdevel ...
課程地址:
https://study.163.com/course/courseMain.htm?courseId=1004873017
本課項目地址:
https://github.com/wechatdeveloper/WechatVideoCourse
課程目標:
從0開始新建Asp.Net MVC Web項目引入Senparc.Weixin SDK,並把Web項目發佈到應用伺服器實現和微信公眾號伺服器的通訊介面對接,實現對用戶不同消息(文本、圖片、地理位置等)的處理以及根據需求返回不同的消息(文本、圖片、圖片消息等)。
課程準備: ①功能變數名稱(需要備案) ②基礎版雲伺服器一臺
課程主題:消息通訊的過程,如下圖
課程代碼參考:
1,Sample項目 https://github.com/JeffreySu/WeiXinMPSDK/tree/master/Samples/net45-mvc
2,視頻課程對應的項目WechatVideoCourse:https://github.com/JeffreySu/WechatVideoCourse
由於在視頻錄製之後,SDK有了很多個版本的更新迭代,部分介面和實現方法有更新;
所以我也新建立了課程對應的項目,使用的是最新版本的Senparc SDK。
項目名稱:SenparcCourse , 大家也可作為參考,項目地址:https://github.com/wechatdeveloper/WechatVideoCourse
-
創建Asp.net MVC Web項目(.Net Framework 4.5):
-
項目名稱 :SenparcCourse
-
-
解決方案下添加新的類庫項目:
-
類庫名稱 :SenparcCourse.Service , 給Web項目提供基礎服務
-
Web項目引用類庫項目
-
-
Web 項目和類庫都安裝Nuget包:
-
Senparc.Weixin.mp
-
-
SenparcCourse.Service 項目下添加類:
-
消息上下文類:CustomerMessageContext.cs
-
消息處理類:CustomerMessageHandler.cs
-
-
MVC Web項目下添加Controller
-
WeixinController.cs ,添加方法實現和微信伺服器的驗證
-
-
複製Github Sample中的web.config 配置參數
-
WeixinAppId,Secret ,Token配置為和測試公眾號一致
-
-
測試號配置應用伺服器的URL信息
-
配置後,返回是否成功的消息
-
-
WeixinController 接收微信伺服器消息交給MessageHandler處理後,再返回給微信伺服器:
Wexin/Index 接收處理用戶消息
-
messageHandler , 接收、處理、返回用戶消息
-
messageHandler.SaveRequestMessageLog(); //記錄Request日誌
-
messageHandler.SaveResponseMessageLog(); //記錄Response日誌
-
postModel.EncodingAESKey = EncodingAESKey;//根據自己後臺的設置保持一致,消息加密處理
-
messageHandler.OmitRepeatedMessage = true;//消息去重,如果微信伺服器發給應用伺服器的消息沒有得到響應,5秒內 微信伺服器會連續發送相同MsgId的消息
-
var maxRecordCount = 10; // 配置每個人上下文消息儲存的最大數量
消息處理類:CustomerMessageHandler.cs
-
用戶請求消息 (RequestMessage)
-
響應消息返回給用戶(ResponseMessage)
-
TextKeywordHandler 用戶消息關鍵字處理
-
OnTextRequest 文字消息處理
-
OnTextOrEventRequest 文字、消息統一處理方法
-
關鍵字消息回覆
`var keyWordHandler = requestMessage.StartHandler(false)
.Keyword("",()=>{}) //關鍵字處理
Keywords(new string[] { "exit", "quit", "close" }, () => {})//多個關鍵字`
.Regex(@"^http", () => {}) //正則表達式
-
OnExcuteing 消息的前置處理,如檢查消息的合法性
-
OnExcuted 消息後置處理 ,如添加簽名
-
base.GetCurrentMessageContext().Result.ExpireMinutes = 10; ///消息沒有響應時候的會話過期時間
-
base.CancelExcute = true;//取消以後所有的消息回覆
-
return new ResponseMessageNoResponse(); //不返回任何消息
-
DefaultResponseMessage , MessageHandler中沒有處理到的消息類型給個預設的處理
-
Web項目發佈後,在測試號管理後臺填寫介面配置信息的URL 和 Token
如果配置失敗,可F12打開調試視窗,查看失敗原因: