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

Maison Applet WeChat Développement WeChat Série de développement WeChat ---- 02?: Implémentation de la réponse à la demande POST

Série de développement WeChat ---- 02?: Implémentation de la réponse à la demande POST

Feb 14, 2017 am 11:17 AM

Adresse GitHub du projet?:https://github.com/Andyahui/xgyxsh_WeiXin

Un?: Traitement des demandes WeChat XML POST

Hier, nous sommes devenus développeurs, ce qui montre que la demande d'obtention peut être complétée et traitée en conséquence. Voici ce que nous faisons via le navigateur L'URL. nous avons configuré est parcouru.

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

Nous pouvons constater que la valeur de retour définie dans la requête get appara?t ici, indiquant que notre test est réussi. Ensuite, nous devons définir l'action correspondant à la requête POST.

Remarque?: étant donné que chaque interaction entre notre WeChat et le serveur du site Web se fait via une requête POST pour obtenir ce que nous voulons, nous devons crypter la transmission.

        /// <summary>
        /// 用戶發(fā)送消息后,微信平臺(tái)自動(dòng)Post一個(gè)請(qǐng)求到這里,并等待響應(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ù)自己后臺(tái)的設(shè)置保持一致
            // postModel.AppId = AppId;                       //根據(jù)自己后臺(tái)的設(shè)置保持一致  
            //驗(yàn)證數(shù)字簽名
            if (!CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, Token))
            {
                //??? 這里有問題,要是不注釋的話,就會(huì)在這里出錯(cuò),也就是數(shù)字簽名有問題。
                //return Content("參數(shù)錯(cuò)誤!");
            }

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

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

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

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

On voit clairement la signification de chaque ligne ci-dessus. J'ai une question ici. Si le jugement n'est pas commenté dans la vérification de la signature numérique, il affichera directement " "Erreur de paramètre" ne continuera pas à effectuer les opérations suivantes, mais il n'y a aucun commentaire sur le blog officiel. Je ne sais pas pourquoi ? ? (Demandez des réponses au ma?tre.)

Il y a trois étapes principales ci-dessus?:

Tout d'abord, l'objet CustomMessageHandle est instancié et les paramètres correspondants sont passés. Le CTOR correspondant est initialisé, puis sa méthode Execute() est appelée, et enfin l'objet CustomMessageHandle correspondant est renvoyé en instanciant WeixinResult. à ce stade, l'objet contient la méthode de traitement logique du backend de notre site Web.

C'est ainsi que notre requête POST est traitée, chaque Chaque fois que les informations XML transmises par le serveur WeChat seront à nouveau transmises ici à l'aide du formulaire de demande POST, nous les traiterons.

2?: Comprendre MessageHandler

Pour terminer le développement de WeChat, vous devez comprendre les classes clés du SDK. Ce qui suit est simple Parlons de MessageHandler?;

MessageHandler est le c?ur du traitement des messages du SDK. Il gère principalement les requêtes POST en conséquence. Des jugements logiques peuvent également être formulés. Pour parler franchement, toute notre logique métier est exécutée dans cette classe. . Il s'agit d'une classe abstraite et nous devons la réimplémenter par héritage. Ce qui suit est la mise en ?uvre spécifique. "Voici l'explication officielle correspondanteWiKi".

namespace XGY_WeiXin.WeiXinHelper
{
    public class CustomMessageHandle : MessageHandler<CustomMessageContext>
    {
        //PostModel:表示的都是從微信服務(wù)器里面得到的值,時(shí)間戳,字符串等。(WeiXinController中使用過)
        //構(gòu)造函數(shù)的inputStream用于接收來自微信服務(wù)器的請(qǐng)求流(如果需要在外部處理,這里也可以傳入XDocument)。
        public CustomMessageHandle(Stream inputSrream,PostModel postModel):base(inputSrream,postModel)
        {            
        }
        /// <summary>
        /// 必須實(shí)現(xiàn)抽象的類------作用:用于放回一條信息,當(dāng)沒有對(duì)應(yīng)類型的微信消息沒有被代碼處理,那么默認(rèn)會(huì)執(zhí)行返回這里的結(jié)果。
        /// </summary>
        /// <param name="requestMessage">請(qǐng)求消息</param>
        /// <returns></returns>
    public override IResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage)
    {
        //CreateResponseMessage<T>  這里是創(chuàng)建一個(gè)放回的對(duì)象,代表不同的類型,
        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">請(qǐng)求消息</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;
        }
    }
}

Analysez de haut en bas. J'ai trouvé qu'il est hérité de MessageHandler mais il y a un CustomMessageContext derrière. Pour le moment, j'ai une nouvelle compréhension de MessageHandler. Cette chose s'avère être une classe abstraite générique. Nous devons remplir un type. description et disons que ce CustomMessageContext est une coutume. Je n'ai pas étudié attentivement ce qu'est la classe de contexte définie. Regardons l'introduction officielle (WiKi). Ensuite, vous trouverez ci-dessous un CTOR, qui est principalement utilisé lors de l'instanciation . Faites attention aux paramètres à l'intérieur. L'un est le flux de requête inputSrream, et l'autre est. le serveur WeChat La classe de données envoyée est PostModel. La prochaine étape est la méthode que nous implémentons. La première est la méthode DefaultResponseMessage, qui doit être implémentée. Parce qu'il gère les données sans réponse des requêtes WeChat, il envoie des messages au serveur WeChat par défaut. Enfin, il s'agit du traitement de texte. La méthode OnTextRequest est ici remplacée afin qu'elle puisse répondre à la demande d'informations textuelles de l'utilisateur. Si nous devons implémenter d'autres traitements, tels que des images, de la voix, une localisation géographique, etc., nous pouvons l'implémenter en réécrivant d'autres méthodes séparément et en renvoyant le type de message correspondant.

3?: Contexte personnalisé CustomMessageContext

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

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

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

四:微信測(cè)試號(hào)效果展示

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

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

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

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

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

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefa?on, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1502
276