




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第C#微信公眾號開發之消息處理回顧上一節服務器配置的內容,我們已經可以自己完成公眾號服務器的配置。配置完成之后,我們就可以通過調用的方式,完成對消息管理的處理。當用戶關注公眾號或者發送消息的時候,我們應該啟用默認回復,要不然用戶得不到回應,
從而導致丟失體驗。所以這一章節,我們將通過消息管理的方式,對用戶的信息進行處理,完成公眾號消息回復功能,實現公眾號與用戶之間的完整對話。
微信公眾平臺對信息做了比較清晰的分類,最基本的包括請求(Request)和響應(Response)兩大類信息,這兩類信息有分為文字、語音、圖片等格式。Senparc.Weixin.MP提供了MessageHandler消息處理類,這些類型在以枚舉的方式區分,
同時根據嚴格命名規則命名了所有類型的RequestMessage和ResponseMessage。在Senparc里也詳細說明了如何這個類的
新建一個UserMessageHandler.cs,需要繼承Senparc.Weixin.MP.MessageHandlersTC這個抽象類,并重寫所有方法:
publicclassUserMessageHandler:MessageHandlerUserMessageContext
///summary
///構造函數
////summary
///paramname="inputStream"構造函數的inputStream用于接收來自微信服務器的請求流(如果需要在外部處理,這里也可以傳入XDocument)/param
///paramname="postModel"微信公眾服務器Post過來的加密參數集合(不包括PostData)/param
publicUserMessageHandler(StreaminputStream,PostModelpostModel)
:base(inputStream,postModel)
publicoverrideIResponseMessageBaseDefaultResponseMessage(IRequestMessageBaserequestMessage)
/*所有沒有被處理的消息會默認返回這里的結果
varresponseMessage=this.CreateResponseMessageResponseMessageText//ResponseMessageText也可以是News等其他類型
responseMessage.Content="這條消息來自DefaultResponseMessage。";
returnresponseMessage;
}
usingSenparc.Weixin.Context;
usingSenparc.Weixin.MP.Entities;
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Web;
namespaceWeiXinHandler
publicclassUserMessageContext:MessageContextIRequestMessageBase,IResponseMessageBase
publicUserMessageContext()
*注意:即使使用其他類實現IMessageContext,
*也務必在這里進行下面的初始化,尤其是設置當前時間,
*這個時間關系到及時從緩存中移除過期的消息,節約內存使用
base.MessageContextRemoved+=UserMessageContext_MessageContextRemoved;
///summary
///當上下文過期,被移除時觸發的時間
////summary
///paramname="sender"/param
///paramname="e"/param
voidUserMessageContext_MessageContextRemoved(objectsender,Senparc.Weixin.Context.WeixinContextRemovedEventArgsIRequestMessageBase,IResponseMessageBasee)
/*注意,這個事件不是實時觸發的(當然你也可以專門寫一個線程監控)
*為了提高效率,根據WeixinContext中的算法,這里的過期消息會在過期后下一條請求執行之前被清除
varmessageContext=e.MessageContextasCustomMessageContext;
if(messageContext==null)
return;//如果是正常的調用,messageContext不會為null
//TODO:這里根據需要執行消息過期時候的邏輯,下面的代碼僅供參考
//Log.InfoFormat("{0}的消息上下文已過期",e.OpenId);
//api.SendMessage(e.OpenId,"由于長時間未搭理客服,您的客服狀態已退出!");
}
重寫的方法對應了接收不同的Request類型,構造函數的inputStream用于接收來自微信服務器的請求流
基本用戶不同類型的請求,比如用戶向我們發送一條信息,那么會最終會調用OnTextRequest這個方法,所以在不同的重寫方法內,實現自己的方法。
比如:我們對于文字(Text)信息進行這樣的處理,在UserMessageHandler中我們可以重寫方法OnTextRequest:
publicoverrideIResponseMessageBaseOnTextRequest(RequestMessageTextrequestMessage)
varresponseMessage=base.CreateResponseMessageResponseMessageText
responseMessage.Content="您剛剛發送了文字信息:"+requestMessage.Content;//requestMessage.Content即用戶發過來的文字內容
returnresponseMessage;
}
對于圖片信息進行這樣的處理,在UserMessageHandler中我們可以重寫方法OnImageRequest
///summary
///處理圖片請求
////summary
///paramname="requestMessage"/param
///returns/returns
publicoverrideIResponseMessageBaseOnImageRequest(RequestMessageImagerequestMessage)
varresponseMessage=CreateResponseMessageResponseMessageNews
responseMessage.Articles.Add(newArticle()
Title="您剛才發送了圖片信息",
Description="您發送的圖片將會顯示在邊上",
PicUrl=requestMessage.PicUrl,
Url="/i3yuan/"
returnresponseMessage;
}
對于語音信息進行這樣的處理,在UserMessageHandler中我們可以重寫方法OnVoiceRequest
///summary
///處理語音請求
////summary
///paramname="requestMessage"/param
///returns/returns
publicoverrideIResponseMessageBaseOnVoiceRequest(RequestMessageVoicerequestMessage)
//獲取公眾號
AccessTokenResultaccount=Senparc.Weixin.MP.CommonAPIs.CommonApi.GetToken(AppId,AppSecret);
varresponseMessage=CreateResponseMessageResponseMessageMusic
//上傳縮略圖
varuploadResult=Senparc.Weixin.MP.AdvancedAPIs.MediaApi.UploadTemporaryMedia(account.access_token,UploadMediaFileType.image,
Server.GetMapPath("~/Images/Logo.jpg"));
//設置音樂信息
responseMessage.Music.Title="天籟之音";
responseMessage.Music.Description="播放您上傳的語音";
responseMessage.Music.MusicUrl="/Media/GetVoicemediaId="+requestMessage.MediaId;
responseMessage.Music.HQMusicUrl="/Media/GetVoicemediaId="+requestMessage.MediaId;
responseMessage.Music.ThumbMediaId=uploadResult.media_id;
returnresponseMessage;
}
對于視頻信息進行這樣的處理,在UserMessageHandler中我們可以重寫方法OnVideoRequest
///summary
///處理視頻請求
////summary
///paramname="requestMessage"/param
///returns/returns
publicoverrideIResponseMessageBaseOnVideoRequest(RequestMessageVideorequestMessage)
varresponseMessage=CreateResponseMessageResponseMessageText
responseMessage.Content="您發送了一條視頻信息,ID:"+requestMessage.MediaId;
returnresponseMessage;
}
對于地理信息進行這樣的處理,在UserMessageHandler中我們可以重寫方法OnLocationRequest
///summary
///處理位置請求
////summary
///paramname="requestMessage"/param
///returns/returns
publicoverrideIResponseMessageBaseOnLocationRequest(RequestMessageLocationrequestMessage)
varlocationService=newLocationService();
varresponseMessage=locationService.GetResponseMessage(requestMessageasRequestMessageLocation);
returnresponseMessage;
}
對于鏈接信息進行這樣的處理,在UserMessageHandler中我們可以重寫方法OnLinkRequest
///summary
///處理鏈接消息請求
////summary
///paramname="requestMessage"/param
///returns/returns
publicoverrideIResponseMessageBaseOnLinkRequest(RequestMessageLinkrequestMessage)
varresponseMessage=ResponseMessageBase.CreateFromRequestMessageResponseMessageText(requestMessage);
responseMessage.Content=string.Format(@"您發送了一條連接信息:
Title:{0}
Description:{1}
Url:{2}",requestMessage.Title,requestMessage.Description,requestMessage.Url);
returnresponseMessage;
}
在Action中使用MessageHandler,返回對用戶的處理,在上一節中我們已經新建了WXController.cs,在其中通過Post的方式處理用戶的請求
[HttpPost]
[ActionName("Index")]
publicTaskActionResultPost(PostModelpostModel)
returnTask.Factory.StartNewActionResult(()=
if(!CheckSignature.Check(postModel.Signature,postModel.Timestamp,postModel.Nonce,Token))
returnnewWeixinResult("參數錯誤!");
varmessageHandler=newUserMessageHandler(Request.InputStream);
messageHandler.Execute();//執行微信處理過程
returnnewFixWeixinBugWeixinResult(messageHandler);
}).ContinueWithActionResult(task=task.Result);
}
m
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安全工程試題及答案
- 城市快速路建設項目2025年社會穩定風險評估與城市規劃與社區互動研究報告
- 工業互聯網平臺入侵檢測系統2025年數據安全防護方案報告
- 《庫存管理》課件
- 冬季換季教育培訓課件
- 中國發展動態課件
- 數碼影像培訓課件
- 周末安全教學課件
- 員工職業規劃課件
- 團委培訓分享交流
- 2024年石家莊市市屬國有企業招聘考試真題
- 醫院火災的應急預案及處理流程
- 2025年山東省煙臺市中考真題數學試題【含答案解析】
- 種豬養殖場建設項目初步設計方案
- 中位數與箱線圖-第2課時箱線圖復習鞏固課件北師大版(2025)數學八年級上冊
- 2025河南省豫地科技集團社會招聘169人筆試參考題庫附帶答案詳解
- 2025年山東將軍煙草新材料科技有限公司招聘筆試沖刺題(帶答案解析)
- 人教版(2024)七年級下冊英語期末模擬測試卷(含答案)
- 2025年中考語文押題作文范文10篇
- T/CADCC 003-2024汽車漆面保護膜施工技術規程
- 打造重點專科協議書
評論
0/150
提交評論