国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 微信小程式 微信開發(fā) 微信開發(fā)系列----02:實現(xiàn)POST請求回應(yīng)

微信開發(fā)系列----02:實現(xiàn)POST請求回應(yīng)

Feb 14, 2017 am 11:17 AM

專案GitHub地址https://github.com/Andyahui/xgyxsh_WeiXin

一:微信XML的POST請求處理

一:微信XML的POST請求處理時可以到底,且是得到了對應(yīng)的處理,以下是我們透過瀏覽器我們配置的URL瀏覽到的。

微信開發(fā)系列----02:實現(xiàn)POST請求響應(yīng)

我們可以發(fā)現(xiàn)在get請求中設(shè)定的回傳值在這裡出現(xiàn)了,說明我們的測試是成功的。下面我們要設(shè)定POST請求對應(yīng)的Action。

? 注意:由於我們微信和網(wǎng)站伺服器的每一次互動都是透過POST請求來得到自己想要的東西,我們就必須為傳輸進(jìn)行加密。

        /// <summary>
        /// 用戶發(fā)送消息后,微信平臺自動Post一個請求到這里,并等待響應(yīng)XML。
        /// PS:此方法為簡化方法,效果與OldPost一致。
        /// v0.8之后的版本可以結(jié)合Senparc.Weixin.MP.MvcExtension擴(kuò)展包,使用WeixinResult,見MiniPost方法。
        /// </summary>
        [HttpPost]
        [ActionName("Index")]
        public ActionResult Post(PostModel postModel)
        {
            postModel.Token = Token;
            // postModel.EncodingAESKey = "";          //根據(jù)自己后臺的設(shè)置保持一致
            // postModel.AppId = AppId;                       //根據(jù)自己后臺的設(shè)置保持一致  
            //驗證數(shù)字簽名
            if (!CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, Token))
            {
                //??? 這里有問題,要是不注釋的話,就會在這里出錯,也就是數(shù)字簽名有問題。
                //return Content("參數(shù)錯誤!");
            }

            //  1:自定義MessageHandler,對微信請求的詳細(xì)判斷操作都在這里面。  實例化了一個類
            var messageHandler = new CustomMessageHandle(Request.InputStream, postModel);   //接收消息

            //  2:執(zhí)行微信處理過程----執(zhí)行完這里之后ResponseMessage才會有值。
            messageHandler.Execute();            

            //  3:return new FixWeixinBugWeixinResult(messageHandler); 這個有換行的問題。           
            //return new FixWeixinBugWeixinResult(messageHandler.ToString());

            //  3:注意第三個----為了解決官方微信5.0軟件換行bug暫時添加的方法,平時用下面一個方法即可
            return new WeixinResult(messageHandler);                 //v0.8+
        }

?? 我們可以清楚的看到上面的每一行的意思,這裡我有個疑問,驗證數(shù)字簽名的里面要是不註釋if判斷裡面的就直接顯示「參數(shù)錯誤」不會繼續(xù)執(zhí)行下面的操作,但是官網(wǎng)部落格裡面沒有註釋,不知道為什麼? ? (求大神解答。)

上面主要有三步:

?? 先是實例化了CustomMessageHandle對象,並且傳遞了對應(yīng)的參數(shù),透過對應(yīng)的CTOR進(jìn)行了初始化,接著調(diào)用它的初始化,接著調(diào)用它的Execute()方法,最後透過實例化WeixinResult來傳回對應(yīng)的CustomMessageHandle對象,此時物件中就包含了我們網(wǎng)站後臺的邏輯處理方法。

?? 這就是我們POST請求對於的處理,每一次微信伺服器轉(zhuǎn)發(fā)的信息?? 這就是我們POST請求對於的處理,每一次微信服務(wù)器轉(zhuǎn)發(fā)的信息

?xml ,我們進(jìn)行處理。

二:了解MessageHandler

????

要完成微信開發(fā),SDK中關(guān)鍵類就需要了解,下面就簡單說下MessageHandler; ,進(jìn)行對應(yīng)的處理。也可以進(jìn)行邏輯判斷,說白了就是我們所有的業(yè)務(wù)邏輯都是在這個類別下面進(jìn)行的。 <訊息和事件>。

這是一個抽象類,我們需要透過繼承重新實現(xiàn)它。下面是具體的實作。 《這裡是對應(yīng)官方的解釋WiKi》。

namespace XGY_WeiXin.WeiXinHelper
{
    public class CustomMessageHandle : MessageHandler<CustomMessageContext>
    {
        //PostModel:表示的都是從微信服務(wù)器里面得到的值,時間戳,字符串等。(WeiXinController中使用過)
        //構(gòu)造函數(shù)的inputStream用于接收來自微信服務(wù)器的請求流(如果需要在外部處理,這里也可以傳入XDocument)。
        public CustomMessageHandle(Stream inputSrream,PostModel postModel):base(inputSrream,postModel)
        {            
        }
        /// <summary>
        /// 必須實現(xiàn)抽象的類------作用:用于放回一條信息,當(dāng)沒有對應(yīng)類型的微信消息沒有被代碼處理,那么默認(rèn)會執(zhí)行返回這里的結(jié)果。
        /// </summary>
        /// <param name="requestMessage">請求消息</param>
        /// <returns></returns>
    public override IResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage)
    {
        //CreateResponseMessage<T>  這里是創(chuàng)建一個放回的對象,代表不同的類型,
        var responseMessage = base.CreateResponseMessage<ResponseMessageText>();//ResponseMessageText可以更換為別的類型
        responseMessage.Content = "這條消息來自DefaultResponseMessage。";
        return responseMessage;
    }
         /// <summary>
        ///1: 處理用戶發(fā)送過來的文字消息。重寫OnTextRequest方法。
       /// --------(總結(jié):)方法里面可以自由發(fā)揮,讀取DB,判斷關(guān)鍵字,甚至返回不同的ResponseMessageXX類型(只要最終的類型都是在IResponseMessageBase接口下的即可)。
        /// </summary>
        /// <param name="requestMessage">請求消息</param>
        /// <returns></returns>
        public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage)
        {
            //CreateResponseMessage<類型>根據(jù)當(dāng)前的RequestMessage創(chuàng)建指定類型的ResponseMessage;創(chuàng)建相應(yīng)消息.
            var responseMessage = base.CreateResponseMessage<ResponseMessageText>();
            responseMessage.Content = "您的OpenID是:" + requestMessage.FromUserName + "。\r\t您發(fā)送了文字信息:" +
                                      requestMessage.Content;
            return responseMessage;
        }
    }
}

? 由上至下分析。發(fā)現(xiàn)它是繼承自MessageHandler但是它後面還有個CustomMessageContext,此時對於MessageHandler有了重新的認(rèn)識,這貨原來是個泛型的抽象類,我們需要往裡面填寫個類型,查看官方說明說這個CustomMessageContext是個自定義的上下文類,到底是什麼了,我也沒仔細(xì)研究,看官方的介紹吧(

WiKi)。 接著下面是個CTOR,主要是實例化的時候使用,注意裡面的參數(shù),一個是請求流inputSrream,一個是微信伺服器發(fā)送的資料類PostModel。 在接著就是我們實作的方法了,第一個是DefaultResponseMessage方法,這個是必須實現(xiàn)的。因為它是處理微信請求來沒有回應(yīng)的數(shù)據(jù),預(yù)設(shè)給微信伺服器發(fā)送訊息的。最後到了文字處理了,這裡override了OnTextRequest方法,從而可以對應(yīng)回應(yīng)使用者的文字訊息請求。我們要是需要實現(xiàn)別的處理,例如圖片,語音,地理位置等,分別重寫別的方法,返回對應(yīng)的訊息類型就可以實現(xiàn)。

三:自訂上下文CustomMessageContext

下面是自定義上下文類CustomMessageContext,主要是繼承自MessageContext來實現(xiàn)對于的功能。

    /// <summary>
    /// 自定義的上下文類---->處理單個用戶的對話狀態(tài)。
    /// </summary>
    public class CustomMessageContext : MessageContext<IRequestMessageBase,IResponseMessageBase>
    {
        public CustomMessageContext()
        {
            base.MessageContextRemoved+=CustomMessageContext_MessageContextRemoved;
        }
        /// <summary>
        /// 當(dāng)上下文過期,被移除的時候觸發(fā)的時間
        /// </summary>
        private void CustomMessageContext_MessageContextRemoved(object sender, Senparc.Weixin.Context.WeixinContextRemovedEventArgs<IRequestMessageBase, IResponseMessageBase> e)
        {
            /* 注意,這個事件不是實時觸發(fā)的(當(dāng)然你也可以專門寫一個線程監(jiān)控)
            * 為了提高效率,根據(jù)WeixinContext中的算法,這里的過期消息會在過期后下一條請求執(zhí)行之前被清除
            */
            var messageContext = e.MessageContext as CustomMessageContext;
            if (messageContext==null)
            {
                //如果是正常的調(diào)用,messageContext不會為null
                return ;                 
            }
            //TODO:這里根據(jù)需要執(zhí)行消息過期時候的邏輯,下面的代碼僅供參考
            //Log.InfoFormat("{0}的消息上下文已過期",e.OpenId);
            //api.SendMessage(e.OpenId, "由于長時間未搭理客服,您的客服狀態(tài)已退出!");
        }
    }

?? 解釋參考官方給的解釋,版本升級了(WiKi),我覺得這里以后還是會做大文章的。

四:微信測試號效果展示

?? 此時我們大體的底層框架就搭建成功了,我們發(fā)布部署到服務(wù)器上面就可以看到文本處理的響應(yīng)了。

微信開發(fā)系列----02:實現(xiàn)POST請求響應(yīng)

這是微信的二維碼可以關(guān)注下,可以實現(xiàn)簡單的互動。

微信開發(fā)系列----02:實現(xiàn)POST請求響應(yīng)

更多微信開發(fā)系列----02:實現(xiàn)POST請求響應(yīng)?相關(guān)文章請關(guān)注PHP中文網(wǎng)!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276