<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

        .NET微信公眾號開發(fā)之公眾號消息處理

        來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:38:25
        文檔

        .NET微信公眾號開發(fā)之公眾號消息處理

        .NET微信公眾號開發(fā)之公眾號消息處理:一.前言 微信公眾平臺的消息處理還是比較完善的,有最基本的文本消息,到圖文消息,到圖片消息,語音消息,視頻消息,音樂消息其基本原理都是一樣的,只不過所post的xml數(shù)據(jù)有所差別,在處理消息之前,我們要認(rèn)真閱讀,官方給我們的文檔:http://mp.w
        推薦度:
        導(dǎo)讀.NET微信公眾號開發(fā)之公眾號消息處理:一.前言 微信公眾平臺的消息處理還是比較完善的,有最基本的文本消息,到圖文消息,到圖片消息,語音消息,視頻消息,音樂消息其基本原理都是一樣的,只不過所post的xml數(shù)據(jù)有所差別,在處理消息之前,我們要認(rèn)真閱讀,官方給我們的文檔:http://mp.w

        一.前言

          微信公眾平臺的消息處理還是比較完善的,有最基本的文本消息,到圖文消息,到圖片消息,語音消息,視頻消息,音樂消息其基本原理都是一樣的,只不過所post的xml數(shù)據(jù)有所差別,在處理消息之前,我們要認(rèn)真閱讀,官方給我們的文檔:http://mp.weixin.qq.com/wiki/14/89b871b5466b19b3efa4ada8e577d45e.html。首先我們從最基本的文本消息處理開始。

        <xml>
        <ToUserName><![CDATA[toUser]]></ToUserName>
        <FromUserName><![CDATA[fromUser]]></FromUserName>
        <CreateTime>12345678</CreateTime>
        <MsgType><![CDATA[text]]></MsgType>
        <Content><![CDATA[你好]]></Content>
        </xml>
        
        

          我們可以看到這是消息處理的一個(gè)最基本的模式,有發(fā)送者,接受者,創(chuàng)建時(shí)間,類型,內(nèi)容等等。

        首先我們來創(chuàng)建一個(gè)消息處理的類,這個(gè)類用來捕獲,所有的消息請求,根據(jù)不同的消息請求類型來處理不同的消息回復(fù)。

        public class WeiXinService
         {
         /// <summary>
         /// TOKEN
         /// </summary>
         private const string TOKEN = "finder";
         /// <summary>
         /// 簽名
         /// </summary>
         private const string SIGNATURE = "signature";
         /// <summary>
         /// 時(shí)間戳
         /// </summary>
         private const string TIMESTAMP = "timestamp";
         /// <summary>
         /// 隨機(jī)數(shù)
         /// </summary>
         private const string NONCE = "nonce";
         /// <summary>
         /// 隨機(jī)字符串
         /// </summary>
         private const string ECHOSTR = "echostr";
         /// <summary>
         /// 
         /// </summary>
         private HttpRequest Request { get; set; }
         /// <summary>
         /// 構(gòu)造函數(shù)
         /// </summary>
         /// <param name="request"></param>
         public WeiXinService(HttpRequest request)
         {
         this.Request = request;
         }
         /// <summary>
         /// 處理請求,產(chǎn)生響應(yīng)
         /// </summary>
         /// <returns></returns>
         public string Response()
         {
         string method = Request.HttpMethod.ToUpper();
         //驗(yàn)證簽名
         if (method == "GET")
         {
         if (CheckSignature())
         {
         return Request.QueryString[ECHOSTR];
         }
         else
         {
         return "error";
         }
         }
        
         //處理消息
         if (method == "POST")
         {
         return ResponseMsg();
         }
         else
         {
         return "無法處理";
         }
         }
        
         /// <summary>
         /// 處理請求
         /// </summary>
         /// <returns></returns>
         private string ResponseMsg()
         {
         string requestXml = CommonWeiXin.ReadRequest(this.Request);
         IHandler handler = HandlerFactory.CreateHandler(requestXml);
         
         if (handler != null)
         {
         return handler.HandleRequest();
         }
        
         return string.Empty;
         }
         /// <summary>
         /// 檢查簽名
         /// </summary>
         /// <param name="request"></param>
         /// <returns></returns>
         private bool CheckSignature()
         {
         string signature = Request.QueryString[SIGNATURE];
         string timestamp = Request.QueryString[TIMESTAMP];
         string nonce = Request.QueryString[NONCE];
        
         List<string> list = new List<string>();
         list.Add(TOKEN);
         list.Add(timestamp);
         list.Add(nonce);
         //排序
         list.Sort();
         //拼串
         string input = string.Empty;
         foreach (var item in list)
         {
         input += item;
         }
         //加密
         string new_signature = SecurityUtility.SHA1Encrypt(input);
         //驗(yàn)證
         if (new_signature == signature)
         {
         return true;
         }
         else
         {
         return false;
         }
         }
         }
        
        

        在來看看我們的首先是如何捕獲消息的。首頁Default.ashx的代碼如下

         public void ProcessRequest(HttpContext context)
         {
         context.Response.ContentType = "text/html";
         
        
         string postString = string.Empty;
         if (HttpContext.Current.Request.HttpMethod.ToUpper() == "POST")
         {
         //由微信服務(wù)接收請求,具體處理請求
         WeiXinService wxService = new WeiXinService(context.Request);
         string responseMsg = wxService.Response();
         context.Response.Clear();
         context.Response.Charset = "UTF-8";
         context.Response.Write(responseMsg);
         context.Response.End();
         }
         else
         {
         string token = "wei2414201";
         if (string.IsNullOrEmpty(token))
         {
         return;
         }
        
         string echoString = HttpContext.Current.Request.QueryString["echoStr"];
         string signature = HttpContext.Current.Request.QueryString["signature"];
         string timestamp = HttpContext.Current.Request.QueryString["timestamp"];
         string nonce = HttpContext.Current.Request.QueryString["nonce"];
        
         if (!string.IsNullOrEmpty(echoString))
         {
         HttpContext.Current.Response.Write(echoString);
         HttpContext.Current.Response.End();
         }
         }
        
        
         }
        
        

        從上面的代碼中我們可以看到WeiXinService.cs類中的消息相應(yīng)至關(guān)重要。

         /// <summary>
         /// 處理請求
         /// </summary>
         /// <returns></returns>
         private string ResponseMsg()
         {
         string requestXml = CommonWeiXin.ReadRequest(this.Request);
         IHandler handler = HandlerFactory.CreateHandler(requestXml);
         
         if (handler != null)
         {
         return handler.HandleRequest();
         }
        
         return string.Empty;
         }
        
        

        IHandler是一個(gè)消息處理接口,其下面有EventHandler,TextHandler處理類實(shí)現(xiàn)這個(gè)接口。代碼如下

         /// <summary>
         /// 處理接口
         /// </summary>
         public interface IHandler
         {
         /// <summary>
         /// 處理請求
         /// </summary>
         /// <returns></returns>
         string HandleRequest();
         }
        
        

        EventHandler

        class EventHandler : IHandler
         {
         /// <summary>
         /// 請求的xml
         /// </summary>
         private string RequestXml { get; set; }
         /// <summary>
         /// 構(gòu)造函數(shù)
         /// </summary>
         /// <param name="requestXml"></param>
         public EventHandler(string requestXml)
         {
         this.RequestXml = requestXml;
         }
         /// <summary>
         /// 處理請求
         /// </summary>
         /// <returns></returns>
         public string HandleRequest()
         {
         string response = string.Empty;
         EventMessage em = EventMessage.LoadFromXml(RequestXml);
         if (em.Event.Equals("subscribe", StringComparison.OrdinalIgnoreCase))//用來判斷是不是首次關(guān)注
         {
        
        
         PicTextMessage tm = new PicTextMessage();//我自己創(chuàng)建的一個(gè)圖文消息處理類
         tm.ToUserName = em.FromUserName;
         tm.FromUserName = em.ToUserName;
         tm.CreateTime = CommonWeiXin.GetNowTime();
         response = tm.GenerateContent();
        
         }
        
         return response;
         }
         }
        
        

        TextHandler

         /// <summary>
         /// 文本信息處理類
         /// </summary>
         public class TextHandler : IHandler
         {
         string openid { get; set; }
         string access_token { get; set; }
        
         /// <summary>
         /// 請求的XML
         /// </summary>
         private string RequestXml { get; set; }
         /// <summary>
         /// 構(gòu)造函數(shù)
         /// </summary>
         /// <param name="requestXml">請求的xml</param>
         public TextHandler(string requestXml)
         {
         this.RequestXml = requestXml;
         }
         /// <summary>
         /// 處理請求
         /// </summary>
         /// <returns></returns>
         public string HandleRequest()
         {
         string response = string.Empty;
         TextMessage tm = TextMessage.LoadFromXml(RequestXml);
         string content = tm.Content.Trim();
         if (string.IsNullOrEmpty(content))
         {
         response = "您什么都沒輸入,沒法幫您啊。";
         }
         else
         {
         string username = System.Configuration.ConfigurationManager.AppSettings["weixinid"].ToString();
         AccessToken token = AccessToken.Get(username);
         access_token = token.access_token;
         openid = tm.FromUserName;
         response = HandleOther(content);
         
         }
         tm.Content = response;
         //進(jìn)行發(fā)送者、接收者轉(zhuǎn)換
         string temp = tm.ToUserName;
         tm.ToUserName = tm.FromUserName;
         tm.FromUserName = temp;
         response = tm.GenerateContent();
         return response;
         }
         /// <summary>
         /// 處理其他消息
         /// </summary>
         /// <param name="tm"></param>
         /// <returns></returns>
         private string HandleOther(string requestContent)
         {
         string response = string.Empty;
         if (requestContent.Contains("你好") || requestContent.Contains("您好"))
         {
         response = "您也好~";
         }else if (requestContent.Contains("openid") || requestContent.Contains("id") || requestContent.Contains("ID"))//用來匹配用戶輸入的關(guān)鍵字
         {
         response = "你的Openid: "+openid;
         }
         else if (requestContent.Contains("token") || requestContent.Contains("access_token"))
         {
         response = "你的access_token: " + access_token;
         }else 
         {
         response = "試試其他關(guān)鍵字吧。";
         }
         return response;
         }
         }
        
        

        HandlerFactory

         /// <summary>
         /// 處理器工廠類
         /// </summary>
         public class HandlerFactory
         {
         /// <summary>
         /// 創(chuàng)建處理器
         /// </summary>
         /// <param name="requestXml">請求的xml</param>
         /// <returns>IHandler對象</returns>
         public static IHandler CreateHandler(string requestXml)
         {
         IHandler handler = null;
         if (!string.IsNullOrEmpty(requestXml))
         {
         //解析數(shù)據(jù)
         XmlDocument doc = new System.Xml.XmlDocument();
         doc.LoadXml(requestXml);
         XmlNode node = doc.SelectSingleNode("/xml/MsgType");
         if (node != null)
         {
         XmlCDataSection section = node.FirstChild as XmlCDataSection;
         if (section != null)
         {
         string msgType = section.Value;
        
         switch (msgType)
         {
         case "text":
         handler = new TextHandler(requestXml);
         break;
         case "event":
         handler = new EventHandler(requestXml);
         break;
         }
         }
         }
         }
        
         return handler;
         }
         }
        
        

         在這里基本的一些類已經(jīng)完成了,現(xiàn)在我們來完成,關(guān)注我們的微信公眾號,我們就發(fā)送一條圖文消息,同時(shí)輸入我們的一些關(guān)鍵字,返回一些消息,比如輸入id返回用戶的openid等等。

        二.PicTextMessage

        public class PicTextMessage : Message
         {
         /// <summary>
         /// 模板靜態(tài)字段
         /// </summary>
         private static string m_Template;
        
         /// <summary>
         /// 默認(rèn)構(gòu)造函數(shù)
         /// </summary>
         public PicTextMessage()
         {
         this.MsgType = "news";
         }
         /// <summary>
         /// 從xml數(shù)據(jù)加載文本消息
         /// </summary>
         /// <param name="xml"></param>
         public static PicTextMessage LoadFromXml(string xml)
         {
         PicTextMessage tm = null;
         if (!string.IsNullOrEmpty(xml))
         {
         XElement element = XElement.Parse(xml);
         if (element != null)
         {
         tm = new PicTextMessage();
         tm.FromUserName = element.Element(CommonWeiXin.FROM_USERNAME).Value;
         tm.ToUserName = element.Element(CommonWeiXin.TO_USERNAME).Value;
         tm.CreateTime = element.Element(CommonWeiXin.CREATE_TIME).Value;
         }
         }
        
         return tm;
         }
         /// <summary>
         /// 模板
         /// </summary>
         public override string Template
         {
         get
         {
         if (string.IsNullOrEmpty(m_Template))
         {
         LoadTemplate();
         }
        
         return m_Template;
         }
         }
         /// <summary>
         /// 生成內(nèi)容
         /// </summary>
         /// <returns></returns>
         public override string GenerateContent()
         {
         this.CreateTime = CommonWeiXin.GetNowTime();
         string str= string.Format(this.Template, this.ToUserName, this.FromUserName, this.CreateTime);
         return str;
         }
        
        
         /// <summary>
         /// 加載模板
         /// </summary>
         private static void LoadTemplate()
         {
         m_Template= @"<xml>
         <ToUserName><![CDATA[{0}]]></ToUserName>
         <FromUserName><![CDATA[{1}]]></FromUserName>
         <CreateTime>{2}</CreateTime>
         <MsgType><![CDATA[news]]></MsgType>
         <ArticleCount>1</ArticleCount>
         <Articles>
         <item>
         <Title><![CDATA[有位停車歡迎你!]]></Title> 
         <Description><![CDATA[如有問題請致電400-6238-136或直接在微信留言,我們將第一時(shí)間為您服務(wù)!]]></Description>
         <PicUrl><![CDATA[http://www.baidu.com/youwei.jpg]]></PicUrl>
         <Url><![CDATA[http://www.baidu.com]]></Url>
         </item>
         </Articles>
         </xml> ";
         }
         }
        
        

        最后我們的效果如下所示;

        以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        .NET微信公眾號開發(fā)之公眾號消息處理

        .NET微信公眾號開發(fā)之公眾號消息處理:一.前言 微信公眾平臺的消息處理還是比較完善的,有最基本的文本消息,到圖文消息,到圖片消息,語音消息,視頻消息,音樂消息其基本原理都是一樣的,只不過所post的xml數(shù)據(jù)有所差別,在處理消息之前,我們要認(rèn)真閱讀,官方給我們的文檔:http://mp.w
        推薦度:
        標(biāo)簽: 微信 微信號 消息
        • 熱門焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲综合激情五月丁香六月| 亚洲天堂男人天堂| 亚洲1区2区3区精华液| 无遮免费网站在线入口| 亚洲春色另类小说| 性短视频在线观看免费不卡流畅 | 亚洲精品无码专区2| 看一级毛片免费观看视频| 免费一级毛片清高播放| 日本激情猛烈在线看免费观看| 亚洲av无码专区在线观看素人| 免费高清A级毛片在线播放| 亚洲国产成人精品91久久久| 一级毛片在线免费播放| 亚洲精品无码不卡在线播HE| 暖暖免费日本在线中文| 亚洲最大中文字幕| 国产在线播放免费| 成在线人视频免费视频| 亚洲国产一区在线| 无人影院手机版在线观看免费 | 亚洲欧洲精品国产区| 青青草a免费线观a| 综合偷自拍亚洲乱中文字幕| 精品国产香蕉伊思人在线在线亚洲一区二区 | 亚洲日本va中文字幕久久| 免费播放一区二区三区| 亚洲熟妇无码一区二区三区 | 伊人亚洲综合青草青草久热| 无人在线观看免费高清| 国产精品高清视亚洲精品| 免费国产怡红院在线观看| 男女午夜24式免费视频 | 欧洲美女大片免费播放器视频| 亚洲精品国产精品乱码视色| 国产成人精品免费视频网页大全| 亚洲AV无码AV日韩AV网站| 一个人看的www在线观看免费| 亚洲人成影院在线| 精品韩国亚洲av无码不卡区| 亚洲毛片αv无线播放一区|