真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

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

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

創(chuàng)新互聯(lián)公司是專業(yè)的烈山網站建設公司,烈山接單;提供網站設計、網站建設,網頁設計,網站設計,建網站,PHP網站建設等專業(yè)做網站服務;采用PHP框架,可快速的進行烈山網站開發(fā)網頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網站,專業(yè)的做網站團隊,希望更多企業(yè)前來合作!

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

首先我們設計了模塊層次圖,當然圖中只是給出一種實現(xiàn)方式,不局限于此。具體見下圖。

主要功能介紹如下:

1)請求接口層。處理HTTP請求,及響應

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

3)業(yè)務邏輯層。這里是我們的具體業(yè)務邏輯了,根據請求,實現(xiàn)具體的業(yè)務邏輯。

4)數(shù)據層。我們在實現(xiàn)某個應用時可能需要訪問數(shù)據,可以是數(shù)據庫或者是文件。如果是簡單應用,可能沒有這一層。

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

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

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

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

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

下面我們針對每個流程進行代碼實現(xiàn)。

一、接收HTTP請求

我們需要一個HttpHandler或者一個網頁,來處理微信服務端HTTP請求。

這里我們使用了HttpHandler。因為其靈活性高,性能好。

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

    public class WeiXinHttpHandler:IHttpHandler
    {        /// 
        /// 
        /// 
        public bool IsReusable
        {            get { return true; }
        }        /// 
        /// 處理請求        /// 
        /// 
        public void ProcessRequest(HttpContext context)
        {            //由微信服務接收請求,具體處理請求
            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,需要在配置文件中,配置具體的應用。具體的節(jié)點配置,我們不作說明。直接給出例子,配置HttpHandler節(jié)點如下


   

二、分發(fā)請求

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

1)驗證簽名

如果是首次請求,需要驗證簽名。就相當于一次HTTP握手。之前在上一章中,設置的服務器URL以及token值,這個功能就是檢驗是否鏈接成功。

這個請求是GET請求。以下具體說明(官方):

業(yè)務邏輯:

加密/校驗流程:

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

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

<3> 開發(fā)者獲得加密后的字符串可與signature對比,標識該請求來源于微信

而官方只提供了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#版本:

        /// 
        /// 檢查簽名        /// 
        /// 
        /// 
        private bool CheckSignature()
        {            string signature = Request.QueryString[SIGNATURE];            string timestamp = Request.QueryString[TIMESTAMP];            string nonce = Request.QueryString[NONCE];

            List list = new List();
            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;
            }
        }

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

        /// 
        /// SHA1加密        /// 
        /// 輸入字符串
        /// 加密后的字符串
        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ā)請求

接下來就是具體的消息請求了,這里都是POST請求。

因為有多種消息類型,我們通過工廠類來進行封裝,然后每種消息都有專門的處理器來進行處理。具體實現(xiàn)邏輯:

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

處理請求的對外方法(HttpHandler調用的方法就是這個了),即:

        /// 
        /// 處理請求,產生響應        /// 
        /// 
        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 "無法處理";
            }
        }

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

1)消息類型

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

這里再看具體看一下,請求的消息類型有哪些,回復的消息類型有哪些等。

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

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

2)根據具體的消息接口,設計消息類。

這里給出類圖,供參考。

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

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

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

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

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

還是建議大家對具體的業(yè)務進行單獨封裝,在Handler中,只提供調用的接口。

因為隨著業(yè)務的增加,一個Handler可能要處理很多業(yè)務,如果所有的操作邏輯都寫在這里,勢必影響閱讀,也不易于維護與擴展。

5)產生回復消息

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

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

產生回復消息的過程,其實,就是特定的消息對象格式化為對應的XML的過程,然后將XML響應至微信服務器。

6)實例

這里以微信用戶關注公眾賬號,然后服務端處理處理事件請求,登記用戶,并提示歡迎信息。

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

四、HTTP響應

最后將處理結果返回至最初HttpHandler,響應給微信服務器,直接Response處理。這也是在最開始設計的HttpHandler中實現(xiàn)的。

下面是代碼片段,具體可見一、Http請求

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

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


分享題目:微信公眾平臺開發(fā)之基礎框架搭建的示例分析
分享路徑:http://weahome.cn/article/gpghdh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部