中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

微信公眾平臺開發中MessageHandler怎么用

發布時間:2021-09-10 11:32:21 來源:億速云 閱讀:131 作者:小新 欄目:移動開發

小編給大家分享一下微信公眾平臺開發中MessageHandler怎么用,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

繼續為項目添加一個CustomMessageHandle.cs類:

微信公眾平臺開發中MessageHandler怎么用

CustomMessageHandle.cs需要繼承Senparc.Weixin.MP.MessageHandlers<TC>這個抽象類,并實現部分方法。最初步的CustomMessageHandle.cs代碼
可能如下:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using Senparc.Weixin.MP.Entities;
using Senparc.Weixin.MP.MessageHandlers;
 
namespace Senparc.Weixin.MP.Sample.Weixin
{
    public class CustomMessageHandler : MessageHandler<CustomMessageContext>
    {
        public CustomMessageHandler(Stream inputStream, PostModel postModel)
            : base(inputStream, postModel)
        {
 
        }
 
        public override IResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage)
        {
            var responseMessage = base.CreateResponseMessage<ResponseMessageText>(); //ResponseMessageText也可以是News等其他類型
            responseMessage.Content = "這條消息來自DefaultResponseMessage。";
            return responseMessage;
        }
    }
}

我們可以看到必須要重寫實現的抽象方法名為DefaultResponseMessage(),這一條信息用于返回一條的消息,假如對應類型(如語音)的微信消息沒有被代碼處理,那么默認會返回這里的結果。

在DefaultResponseMessage()方法中,我們看到這樣一句:

var responseMessage = base.CreateResponseMessage<ResponseMessageText>(); //ResponseMessageText也可以是News等其他類型

  這里的CreateResponseMessage<T>方法即創建一個返回對象,T可以為以下類型的任意一個,分別對應了不同的返回類型:

ResponseMessageText - 對應文本消息

ResponseMessageNews - 對應圖文消息

ResponseMessageMusic - 對應音樂消息

ResponseMessageXXX - 其他類型以此類推

關于上述所有類型參數的設置方法,可以看開源項目的Demo,這里不再重復:https://github.com/JeffreySu/WeiXinMPSDK。

那么我們如何處理用戶發過來的文字信息呢?

很簡單——重寫一個OnTextRequest方法即可:

public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage)
{
    var responseMessage = base.CreateResponseMessage<ResponseMessageText>();
    responseMessage.Content = "您的OpenID是:" + requestMessage.FromUserName      //這里的requestMessage.FromUserName也可以直接寫成base.WeixinOpenId
                            + "。\r\n您發送了文字信息:" + requestMessage.Content;  //\r\n用于換行,requestMessage.Content即用戶發過來的文字內容
    return responseMessage;
}

這個方法中可以自由發揮,比如讀取數據庫、判斷關鍵字,甚至返回不同的ResponseMessageXX類型(只要最終的類型都是在IResponseMessageBase接口下的即可)。

與OnTextRequest對應,如果我們要處理語音、地理位置、菜單等類型的消息,只需要重寫對應的方法,可以重寫的方法如下:

public virtual IResponseMessageBase OnImageRequest(RequestMessageImage requestMessage);
        public virtual IResponseMessageBase OnLinkRequest(RequestMessageLink requestMessage);
        public virtual IResponseMessageBase OnLocationRequest(RequestMessageLocation requestMessage);
        public virtual IResponseMessageBase OnTextRequest(RequestMessageText requestMessage);
        public virtual IResponseMessageBase OnVoiceRequest(RequestMessageVoice requestMessage);
        public virtual IResponseMessageBase OnVideoRequest(RequestMessageVideo requestMessage);


        public virtual IResponseMessageBase OnEvent_ClickRequest(RequestMessageEvent_Click requestMessage);
        public virtual IResponseMessageBase OnEvent_ViewRequest(RequestMessageEvent_View requestMessage);
        public virtual IResponseMessageBase OnEvent_EnterRequest(RequestMessageEvent_Enter requestMessage);
        public virtual IResponseMessageBase OnEvent_LocationRequest(RequestMessageEvent_Location requestMessage);
        public virtual IResponseMessageBase OnEvent_SubscribeRequest(RequestMessageEvent_Subscribe requestMessage);
        public virtual IResponseMessageBase OnEvent_UnsubscribeRequest(RequestMessageEvent_Unsubscribe requestMessage);
        public virtual IResponseMessageBase OnEvent_ScanRequest(RequestMessageEvent_Scan requestMessage)
        public virtual IResponseMessageBase OneEvent_MassSendJobFinisRequest(RequestMessageEvent_MassSendJobFinish requestMessage)

其中OnEvent_XX對應的都是Event請求的子類型。

在CustomMessageHandler的基類設置的時候,我們看到使用了一個叫MessageContext的泛型(MessageHandler<MessageContext>),這個MessageContext是SDK提供的一個默認的消息上下文處理類,這個類已經能夠處理最基礎的情況,如果您的應用不是很復雜,那么直接用這個類就行了。如果項目比較復雜,您也可以根據自己的需要寫一個自己的類(繼承IMessageContext接口),或繼承這個類在擴展一些更多的屬性(例如工作流和分布式緩存等等)。

至此我們已經使用MassageHandler處理所有微信用戶發送過來的請求。

下面介紹一些MassageHandler的“秘密武器”。

OnExecuting()和OnExecuted()

  我們可以直接重寫這兩個方法。其中OnExecuting會在所有消息處理方法(如OnTextRequest,OnVoiceRequest等)執行之前執行,這個過程中,我們可以把CancelExecute設為true,來中斷后面所有方法的執行(包括OnExecuted),例如:

public override void OnExecuting()
{
    if (RequestMessage.FromUserName == "olPjZjsXuQPJoV0HlruZkNzKc91E")
    {
        CancelExcute = true; //終止此用戶的對話
     
        //如果沒有下面的代碼,用戶不會收到任何回復,因為此時ResponseMessage為null
 
        //添加一條固定回復
        var responseMessage = CreateResponseMessage<ResponseMessageText>();
        responseMessage.Content = "Hey!你已經被拉黑啦!";
 
        ResponseMessage = responseMessage;//設置返回對象
    }
}

如果OnExecuting中沒有中斷,當例如OnTextRequest方法執行完畢之后(或執行了默認方法),OnExecuted()方法將會觸發,我們也可以對應地重寫。要注意的是,在OnExecuted()方法內,ResponseMessage已經被賦了返回值。

看完了這篇文章,相信你對“微信公眾平臺開發中MessageHandler怎么用”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

巴青县| 巧家县| 广河县| 凤冈县| 墨玉县| 漳浦县| 阜平县| 岗巴县| 文成县| 富宁县| 汾西县| 北海市| 思茅市| 嘉荫县| 广河县| 全椒县| 孟津县| 比如县| 巩留县| 克拉玛依市| 陈巴尔虎旗| 上蔡县| 获嘉县| 梁河县| 勐海县| 邹平县| 石台县| 遵化市| 陆良县| 怀远县| 兰考县| 达日县| 常山县| 新巴尔虎左旗| 吉林省| 镇雄县| 沈丘县| 比如县| 东宁县| 莲花县| 尼木县|