亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

.NET微信公眾號開發-4.0公眾號消息處理

2019-11-14 15:55:55
字體:
來源:轉載
供稿:網友

一.前言

  微信公眾平臺的消息處理還是比較完善的,有最基本的文本消息,到圖文消息,到圖片消息,語音消息,視頻消息,音樂消息其基本原理都是一樣的,只不過所post的xml數據有所差別,在處理消息之前,我們要認真閱讀,官方給我們的文檔: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>

  我們可以看到這是消息處理的一個最基本的模式,有發送者,接受者,創建時間,類型,內容等等。

首先我們來創建一個消息處理的類,這個類用來捕獲,所有的消息請求,根據不同的消息請求類型來處理不同的消息回復。

public class WeiXinService    {        /// <summary>        /// TOKEN        /// </summary>        PRivate const string TOKEN = "finder";        /// <summary>        /// 簽名        /// </summary>        private const string SIGNATURE = "signature";        /// <summary>        /// 時間戳        /// </summary>        private const string TIMESTAMP = "timestamp";        /// <summary>        /// 隨機數        /// </summary>        private const string NONCE = "nonce";        /// <summary>        /// 隨機字符串        /// </summary>        private const string ECHOSTR = "echostr";        /// <summary>        ///         /// </summary>        private HttpRequest Request { get; set; }        /// <summary>        /// 構造函數        /// </summary>        /// <param name="request"></param>        public WeiXinService(HttpRequest request)        {            this.Request = request;        }        /// <summary>        /// 處理請求,產生響應        /// </summary>        /// <returns></returns>        public string Response()        {            string method = Request.HttpMethod.ToUpper();            //驗證簽名            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);            //驗證            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")            {                //由微信服務接收請求,具體處理請求                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類中的消息相應至關重要。

        /// <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是一個消息處理接口,其下面有EventHandler,TextHandler處理類實現這個接口。代碼如下

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

EventHandler

class EventHandler : IHandler    {        /// <summary>        /// 請求的xml        /// </summary>        private string RequestXml { get; set; }        /// <summary>        /// 構造函數        /// </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))//用來判斷是不是首次關注            {                PicTextMessage tm = new PicTextMessage();//我自己創建的一個圖文消息處理類                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>        /// 構造函數        /// </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;            //進行發送者、接收者轉換            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"))//用來匹配用戶輸入的關鍵字            {                response = "你的Openid: "+openid;            }            else if (requestContent.Contains("token") || requestContent.Contains("access_token"))            {                response = "你的access_token: " + access_token;            }else             {                response = "試試其他關鍵字吧。";            }            return response;        }    }

HandlerFactory

    /// <summary>    /// 處理器工廠類    /// </summary>    public class HandlerFactory    {        /// <summary>        /// 創建處理器        /// </summary>        /// <param name="requestXml">請求的xml</param>        /// <returns>IHandler對象</returns>        public static IHandler CreateHandler(string requestXml)        {            IHandler handler = null;            if (!string.IsNullOrEmpty(requestXml))            {                //解析數據                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;        }    }

 在這里基本的一些類已經完成了,現在我們來完成,關注我們的微信公眾號,我們就發送一條圖文消息,同時輸入我們的一些關鍵字,返回一些消息,比如輸入id返回用戶的openid等等。

二.PicTextMessage

public class PicTextMessage : Message    {        /// <summary>        /// 模板靜態字段        /// </summary>        private static string m_Template;        /// <summary>        /// 默認構造函數        /// </summary>        public PicTextMessage()        {            this.MsgType = "news";        }        /// <summary>        /// 從xml數據加載文本消息        /// </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>        /// 生成內容        /// </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或直接在微信留言,我們將第一時間為您服務!]]></Description>                                <PicUrl><![CDATA[http://www.baidu.com/youwei.jpg]]></PicUrl>                                <Url><![CDATA[http://www.baidu.com]]></Url>                                </item>                            </Articles>                        </xml> ";        }    }

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

本人能力有限,希望大家多多包涵.

三.微信公眾號開發系列導航

1.0初始微信公眾號

2.0創建自定義菜單

3.0查詢自定義菜單

4.0公眾號消息處理

5.0微信支付

6.0模板消息


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久99久久99精品免观看粉嫩| 97视频在线观看网址| 亚洲第一天堂av| 日韩中文字幕视频在线观看| 亚洲精品720p| 国产xxx69麻豆国语对白| 久久久久久久久久av| 午夜精品理论片| 成人午夜在线影院| 国产精品com| 国产成人精品电影久久久| 国产精品色午夜在线观看| 亚洲天堂免费在线| 韩曰欧美视频免费观看| 精品福利在线视频| 中文.日本.精品| 亚洲国产婷婷香蕉久久久久久| 亚洲aⅴ男人的天堂在线观看| 91精品国产自产在线老师啪| 久久成人综合视频| 国产精品免费久久久久久| 91国偷自产一区二区三区的观看方式| 国模精品一区二区三区色天香| 97成人在线视频| 亚洲精品网址在线观看| 欧美一级免费看| 色天天综合狠狠色| 亚洲欧美成人一区二区在线电影| 91最新在线免费观看| 国语自产精品视频在免费| 欧美另类99xxxxx| 久久久久久久久久久av| 97在线观看免费高清| 亚洲欧洲日本专区| 成人xxxx视频| 国产精品色悠悠| 在线观看国产成人av片| 欧美激情免费看| 欧美日韩黄色大片| 精品视频在线播放色网色视频| 欧美日韩在线免费| 91精品国产高清| 国产日韩中文在线| 日韩成人在线视频网站| 亚洲精品日韩激情在线电影| 亚洲精品久久久久久久久久久久| 一本一本久久a久久精品牛牛影视| 国产精品成人va在线观看| 国产69久久精品成人看| 91久久国产精品91久久性色| 久久久久久欧美| 国产主播在线一区| 久久影视电视剧凤归四时歌| 国产美女91呻吟求| 亚洲自拍小视频免费观看| 97视频在线观看网址| 亚洲精品美女久久久| 亚洲一区第一页| 午夜精品在线视频| 在线午夜精品自拍| 国产精品极品尤物在线观看| 欧美一级在线播放| 国产美女被下药99| 欧美视频一二三| 国产精品亚洲精品| 久久久久久久电影一区| 日韩av成人在线观看| 国产精品视频精品视频| 色综合久久中文字幕综合网小说| 欧美电影院免费观看| 在线播放日韩精品| 国产精品热视频| 国产精品普通话| 国产在线98福利播放视频| 日韩亚洲国产中文字幕| 欧美日韩在线第一页| 国产成人啪精品视频免费网| 日韩在线不卡视频| 久久深夜福利免费观看| 亚洲国产精品系列| 亚洲视频欧美视频| 一区二区三区天堂av| 国产日韩欧美在线观看| 亚洲美女精品成人在线视频| 中文字幕国产亚洲2019| 久久在线视频在线| 欧美专区国产专区| 成人黄色免费在线观看| 亚洲国产精品字幕| 午夜精品一区二区三区av| 97精品国产aⅴ7777| 国产不卡精品视男人的天堂| 国产亚洲精品一区二区| 久久久久久久久久久国产| 亚洲男女自偷自拍图片另类| 欧美黑人xxxⅹ高潮交| 国产精品久久久久久久美男| 亚洲精品国产综合区久久久久久久| 日本精品免费观看| 美日韩丰满少妇在线观看| 亚洲女人被黑人巨大进入| 亚洲在线视频观看| 亚洲图片欧美日产| 国产精品久久久久久久久免费| 久久久久国产精品www| 91亚洲精华国产精华| 成人日韩在线电影| 一区二区三区日韩在线| 九九视频这里只有精品| 欧美成人剧情片在线观看| 国产日韩欧美自拍| 日韩在线观看免费| 欧美精品中文字幕一区| 97国产真实伦对白精彩视频8| 一区二区三区视频免费| 国产视频精品免费播放| 久久精品91久久久久久再现| 精品中文字幕久久久久久| 亚洲女人天堂视频| 色中色综合影院手机版在线观看| 国产69精品99久久久久久宅男| 国产精品对白刺激| 中文字幕亚洲欧美| 国产精品看片资源| 欧美日韩高清区| 亚洲国语精品自产拍在线观看| 色悠悠久久88| 538国产精品视频一区二区| 精品久久久久久久久久国产| 影音先锋欧美精品| 欧美国产一区二区三区| 91精品国产色综合久久不卡98| 欧美午夜精品久久久久久久| 一区二区日韩精品| 国产精品va在线播放我和闺蜜| 51久久精品夜色国产麻豆| 日本欧美黄网站| 日韩高清人体午夜| 岛国av午夜精品| 日韩免费精品视频| 国产日韩欧美夫妻视频在线观看| 最新91在线视频| 国产精品视频免费在线观看| 亚洲国产精品va在线观看黑人| 国产美女91呻吟求| 欧美高清激情视频| 国内伊人久久久久久网站视频| 色多多国产成人永久免费网站| 国产精品久久久久一区二区| 久久久久久av| 亚洲成人精品久久久| 成人激情电影一区二区| 精品亚洲aⅴ在线观看| 国产精品18久久久久久首页狼| 狠狠躁夜夜躁人人爽天天天天97| 7777精品视频| 91精品久久久久久久久| 在线国产精品播放| 日韩性xxxx爱| 琪琪亚洲精品午夜在线| 97**国产露脸精品国产| 欧美超级免费视 在线| 欧美福利小视频| 欧美激情网友自拍|