<del id="d4fwx"><form id="d4fwx"></form></del>
      <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

            <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
          • 微信公眾平臺(tái)開發(fā)之基礎(chǔ)框架搭建的示例分析-創(chuàng)新互聯(lián)

            這篇文章主要介紹了微信公眾平臺(tái)開發(fā)之基礎(chǔ)框架搭建的示例分析,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

            員工經(jīng)過長(zhǎng)期磨合與沉淀,具備了協(xié)作精神,得以通過團(tuán)隊(duì)的力量開發(fā)出優(yōu)質(zhì)的產(chǎn)品。創(chuàng)新互聯(lián)建站堅(jiān)持“專注、創(chuàng)新、易用”的產(chǎn)品理念,因?yàn)椤皩W⑺詫I(yè)、創(chuàng)新互聯(lián)網(wǎng)站所以易用所以簡(jiǎn)單”。公司專注于為企業(yè)提供做網(wǎng)站、網(wǎng)站制作、微信公眾號(hào)開發(fā)、電商網(wǎng)站開發(fā),小程序設(shè)計(jì),軟件定制網(wǎng)站建設(shè)等一站式互聯(lián)網(wǎng)企業(yè)服務(wù)。

            微信公眾平臺(tái)開發(fā)教程-基礎(chǔ)框架搭建

            首先我們?cè)O(shè)計(jì)了模塊層次圖,當(dāng)然圖中只是給出一種實(shí)現(xiàn)方式,不局限于此。具體見下圖。

            主要功能介紹如下:

            1)請(qǐng)求接口層。處理HTTP請(qǐng)求,及響應(yīng)

            2)分發(fā)層。由接口層傳入請(qǐng)求,然后具體分析請(qǐng)求類型,分發(fā)至不同的處理器

            3)業(yè)務(wù)邏輯層。這里是我們的具體業(yè)務(wù)邏輯了,根據(jù)請(qǐng)求,實(shí)現(xiàn)具體的業(yè)務(wù)邏輯。

            4)數(shù)據(jù)層。我們?cè)趯?shí)現(xiàn)某個(gè)應(yīng)用時(shí)可能需要訪問數(shù)據(jù),可以是數(shù)據(jù)庫(kù)或者是文件。如果是簡(jiǎn)單應(yīng)用,可能沒有這一層。

            其實(shí),具體的應(yīng)用可以在這個(gè)結(jié)構(gòu)上去擴(kuò)展,可以擴(kuò)展消息對(duì)象層、業(yè)務(wù)對(duì)象層、數(shù)據(jù)訪問層、功能管理層等。這里只是提供一種思路,不局限于此。

            微信公眾平臺(tái)開發(fā)之基礎(chǔ)框架搭建的示例分析

            根據(jù)層次圖,設(shè)計(jì)流程圖,具體講述實(shí)現(xiàn)的各個(gè)過程。以便了解整個(gè)處理過程。如下圖所示:

            微信公眾平臺(tái)開發(fā)之基礎(chǔ)框架搭建的示例分析

            根據(jù)流程圖,我們能夠清晰的了解整個(gè)流程,消息處理的具體實(shí)現(xiàn)步驟。

            下面我們針對(duì)每個(gè)流程進(jìn)行代碼實(shí)現(xiàn)。

            一、接收HTTP請(qǐng)求

            我們需要一個(gè)HttpHandler或者一個(gè)網(wǎng)頁(yè),來處理微信服務(wù)端HTTP請(qǐng)求。

            這里我們使用了HttpHandler。因?yàn)槠潇`活性高,性能好。

            具體實(shí)現(xiàn)如下。

                public class WeiXinHttpHandler:IHttpHandler
                {        /// <summary>
                    /// 
                    /// </summary>
                    public bool IsReusable
                    {            get { return true; }
                    }        /// <summary>
                    /// 處理請(qǐng)求        /// </summary>
                    /// <param name="context"></param>
                    public void ProcessRequest(HttpContext context)
                    {            //由微信服務(wù)接收請(qǐng)求,具體處理請(qǐng)求
                        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();
                    }
                }

            如果是HTTPHandler,需要在配置文件中,配置具體的應(yīng)用。具體的節(jié)點(diǎn)配置,我們不作說明。直接給出例子,配置HttpHandler節(jié)點(diǎn)如下

            <httpHandlers>
               <add verb="*" path="WXService.ashx" type="namespace.WeiXinHttpHandler,WXWeb" validate="true"/></httpHandlers>

            二、分發(fā)請(qǐng)求

            為了能功能封裝,我們也將此封裝在了處理組件中。其實(shí)可以放置在HttpHandler中的。

            1)驗(yàn)證簽名

            如果是首次請(qǐng)求,需要驗(yàn)證簽名。就相當(dāng)于一次HTTP握手。之前在上一章中,設(shè)置的服務(wù)器URL以及token值,這個(gè)功能就是檢驗(yàn)是否鏈接成功。

            這個(gè)請(qǐng)求是GET請(qǐng)求。以下具體說明(官方):

            業(yè)務(wù)邏輯:

            加密/校驗(yàn)流程:

            <1> 將token、timestamp、nonce三個(gè)參數(shù)進(jìn)行字典序排序

            <2> 將三個(gè)參數(shù)字符串拼接成一個(gè)字符串進(jìn)行SHA1加密

            <3> 開發(fā)者獲得加密后的字符串可與signature對(duì)比,標(biāo)識(shí)該請(qǐng)求來源于微信

            而官方只提供了PHP的代碼示例,很多東西在C#中并非直譯既得。所以這里面也有一些具體處理。先看官方的代碼:

                private function checkSignature()
                {        $signature = $_GET["signature"];        $timestamp = $_GET["timestamp"];        $nonce = $_GET["nonce"];    
                            
                    $token = TOKEN;        $tmpArr = array($token, $timestamp, $nonce);        sort($tmpArr);        $tmpStr = implode( $tmpArr );        $tmpStr = sha1( $tmpStr );        
                    if( $tmpStr == $signature ){            return true;
                    }else{            return false;
                    }
                }

            我們將其翻譯成C#版本:

                    /// <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;
                        }
                    }

            這里需要SHA1加密,具體的算法如下:

                    /// <summary>
                    /// SHA1加密        /// </summary>
                    /// <param name="intput">輸入字符串</param>
                    /// <returns>加密后的字符串</returns>
                    public static string SHA1Encrypt(string intput)
                    {            byte[] StrRes = Encoding.Default.GetBytes(intput);
                        HashAlgorithm mySHA = new SHA1CryptoServiceProvider();
                        StrRes = mySHA.ComputeHash(StrRes);
                        StringBuilder EnText = new StringBuilder();            foreach (byte Byte in StrRes)
                        {
                            EnText.AppendFormat("{0:x2}", Byte);
                        }            return EnText.ToString();
                    }

            2)分發(fā)請(qǐng)求

            接下來就是具體的消息請(qǐng)求了,這里都是POST請(qǐng)求。

            因?yàn)橛卸喾N消息類型,我們通過工廠類來進(jìn)行封裝,然后每種消息都有專門的處理器來進(jìn)行處理。具體實(shí)現(xiàn)邏輯:

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

            處理請(qǐng)求的對(duì)外方法(HttpHandler調(diào)用的方法就是這個(gè)了),即:

                    /// <summary>
                    /// 處理請(qǐng)求,產(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 "無法處理";
                        }
                    }

            三、消息處理器具體處理消息

            1)消息類型

            首先我們來看下,具體的消息類型,其實(shí)上一張中已經(jīng)明確給了消息的接口。

            這里再看具體看一下,請(qǐng)求的消息類型有哪些,回復(fù)的消息類型有哪些等。

            千萬要注意,請(qǐng)求的消息是文本類型,回復(fù)的消息,不一定也是文本哦,可以是圖文、音樂等任意一種可回復(fù)的消息。具體見下表所示。

            微信公眾平臺(tái)開發(fā)之基礎(chǔ)框架搭建的示例分析

            2)根據(jù)具體的消息接口,設(shè)計(jì)消息類。

            這里給出類圖,供參考。

            微信公眾平臺(tái)開發(fā)之基礎(chǔ)框架搭建的示例分析

            3)針對(duì)不同的消息,會(huì)有不同的處理器,來看下具體的類圖。

            微信公眾平臺(tái)開發(fā)之基礎(chǔ)框架搭建的示例分析

            4)具體業(yè)務(wù)處理

            每個(gè)handler里面就是可以處理具體請(qǐng)求。輸入的什么消息,訪問那些數(shù)據(jù),調(diào)用服務(wù)等,都在這里處理。

            還是建議大家對(duì)具體的業(yè)務(wù)進(jìn)行單獨(dú)封裝,在Handler中,只提供調(diào)用的接口。

            因?yàn)殡S著業(yè)務(wù)的增加,一個(gè)Handler可能要處理很多業(yè)務(wù),如果所有的操作邏輯都寫在這里,勢(shì)必影響閱讀,也不易于維護(hù)與擴(kuò)展。

            5)產(chǎn)生回復(fù)消息

            在處理完請(qǐng)求后,需要生成回復(fù)消息,響應(yīng)到終端。消息格式,就是我們介紹那些消息類型,但必須是可用于回復(fù)的,當(dāng)前支持的有:文本、圖文、音樂等。

            一定要明確:回復(fù)的消息類型不一定要與請(qǐng)求的消息類型一樣,比如,請(qǐng)求是文本,回復(fù)的可以是圖文、音樂。

            產(chǎn)生回復(fù)消息的過程,其實(shí),就是特定的消息對(duì)象格式化為對(duì)應(yīng)的XML的過程,然后將XML響應(yīng)至微信服務(wù)器。

            6)實(shí)例

            這里以微信用戶關(guān)注公眾賬號(hào),然后服務(wù)端處理處理事件請(qǐng)求,登記用戶,并提示歡迎信息。

                class EventHandler : IHandler
                {        /// <summary>
                    /// 請(qǐng)求的xml        /// </summary>
                    private string RequestXml { get; set; }        /// <summary>
                    /// 構(gòu)造函數(shù)        /// </summary>
                    /// <param name="requestXml"></param>
                    public EventHandler(string requestXml)
                    {            this.RequestXml = requestXml;
                    }        /// <summary>
                    /// 處理請(qǐng)求        /// </summary>
                    /// <returns></returns>
                    public string HandleRequest()
                    {            string response = string.Empty;
                        EventMessage em = EventMessage.LoadFromXml(RequestXml);            if (em.Event == EventType.Subscribe)
                        {                //注冊(cè)用戶
                            User user = new User();
                            user.OpenID = em.FromUserName;
                            UserManager.Regester(user);                //回復(fù)歡迎消息
                            TextMessage tm = new TextMessage();
                            tm.ToUserName = em.FromUserName;
                            tm.FromUserName = em.ToUserName;
                            tm.CreateTime = Common.GetNowTime();
                            tm.Content = "歡迎您關(guān)注xxx,我是小微。有什么我能幫助您的嗎?";
                            response = tm.GenerateContent();
                        }            return response;
                    }
                }

            四、HTTP響應(yīng)

            最后將處理結(jié)果返回至最初HttpHandler,響應(yīng)給微信服務(wù)器,直接Response處理。這也是在最開始設(shè)計(jì)的HttpHandler中實(shí)現(xiàn)的。

            下面是代碼片段,具體可見一、Http請(qǐng)求

                        context.Response.Clear();
                        context.Response.Charset = "UTF-8";
                        context.Response.Write(responseMsg);
                        context.Response.End();

            感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“微信公眾平臺(tái)開發(fā)之基礎(chǔ)框架搭建的示例分析”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,,關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!

            當(dāng)前標(biāo)題:微信公眾平臺(tái)開發(fā)之基礎(chǔ)框架搭建的示例分析-創(chuàng)新互聯(lián)
            網(wǎng)站網(wǎng)址:http://www.jbt999.com/article38/djposp.html

            成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、網(wǎng)站改版、外貿(mào)建站、用戶體驗(yàn)靜態(tài)網(wǎng)站、營(yíng)銷型網(wǎng)站建設(shè)

            廣告

            聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

            成都做網(wǎng)站

              <del id="d4fwx"><form id="d4fwx"></form></del>
              <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

                    <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
                  • 91精品久久久久久久久久久久 | 成人做爰A片免费看网站网豆传媒 | www操操| 自拍超碰在线 | 尻屄视频在线观看 |