国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

用c#開發(fā)微信(3)基于Senparc.Weixin框架的接收普通消息處理 (源碼下載)

2019-11-17 02:22:15
字體:
供稿:網(wǎng)友

用c#開發(fā)微信(3)基于Senparc.Weixin框架的接收普通消息處理 (源碼下載)

本文講述使用Senparc.Weixin框架來快速處理各種接收的普通消息。這里的消息指的是傳統(tǒng)的微信公眾平臺(tái)消息交互,微信用戶向公眾號(hào)發(fā)送消息后,公眾號(hào)回復(fù)消息給微信用戶。包括以下7種類型:

1 文本消息 2 圖片消息 3 語音消息 4 視頻消息 5 小視頻消息 6 地理位置消息 7 鏈接消息

實(shí)現(xiàn)非常簡單,自定義一個(gè)繼承MessageHandler的類,重寫這7種類型的方法即可。注意:DefaultResponseMessage必須重寫,用于返回沒有處理過的消息類型(也可以用于默認(rèn)消息,如幫助信息等);其中所有原OnXX的抽象方法已經(jīng)都改為虛方法,可以不必每個(gè)都重寫。若不重寫,默認(rèn)返回DefaultResponseMessage方法中的結(jié)果。

下面詳細(xì)介紹實(shí)現(xiàn)步驟:

1. 添加index頁面

PRivate readonly string Token = ConfigurationManager.AppSettings["token"];//與微信公眾賬號(hào)后臺(tái)的Token設(shè)置保持一致,區(qū)分大小寫。
       protected void Page_Load(object sender, EventArgs e)
       {
           string signature = Request["signature"];
           string timestamp = Request["timestamp"];
           string nonce = Request["nonce"];
           string echostr = Request["echostr"];
           if (Request.HttpMethod == "GET")
           {
               //get method - 僅在微信后臺(tái)填寫URL驗(yàn)證時(shí)觸發(fā)
               if (CheckSignature.Check(signature, timestamp, nonce, Token))
               {
                   WriteContent(echostr); //返回隨機(jī)字符串則表示驗(yàn)證通過
               }
               else
               {
                   WriteContent("failed:" + signature + "," + CheckSignature.GetSignature(timestamp, nonce, Token) + "。" +
                               "如果你在瀏覽器中看到這句話,說明此地址可以被作為微信公眾賬號(hào)后臺(tái)的Url,請(qǐng)注意保持Token一致。");
               }
               Response.End();
           }
           else
           {
               //post method - 當(dāng)有用戶想公眾賬號(hào)發(fā)送消息時(shí)觸發(fā)
               if (!CheckSignature.Check(signature, timestamp, nonce, Token))
               {
                   WriteContent("參數(shù)錯(cuò)誤!");
                   return;
               }
               //設(shè)置每個(gè)人上下文消息儲(chǔ)存的最大數(shù)量,防止內(nèi)存占用過多,如果該參數(shù)小于等于0,則不限制
               var maxRecordCount = 10;
               //自定義MessageHandler,對(duì)微信請(qǐng)求的詳細(xì)判斷操作都在這里面。
               var messageHandler = new CustomMessageHandler(Request.InputStream, maxRecordCount);
               try
               {
                   //測(cè)試時(shí)可開啟此記錄,幫助跟蹤數(shù)據(jù),使用前請(qǐng)確保App_Data文件夾存在,且有讀寫權(quán)限。
                   messageHandler.RequestDocument.Save(
                       Server.MapPath("~/App_Data/" + DateTime.Now.Ticks + "_Request_" +
                                      messageHandler.RequestMessage.FromUserName + ".txt"));
                   //執(zhí)行微信處理過程
                   messageHandler.Execute();
                   //測(cè)試時(shí)可開啟,幫助跟蹤數(shù)據(jù)
                   messageHandler.ResponseDocument.Save(
                       Server.MapPath("~/App_Data/" + DateTime.Now.Ticks + "_Response_" +
                                      messageHandler.ResponseMessage.ToUserName + ".txt"));
                   WriteContent(messageHandler.ResponseDocument.ToString());
                   return;
               }
               catch (Exception ex)
               {
                   //將程序運(yùn)行中發(fā)生的錯(cuò)誤記錄到App_Data文件夾
                   using (TextWriter tw = new StreamWriter(Server.MapPath("~/App_Data/Error_" + DateTime.Now.Ticks + ".txt")))
                   {
                       tw.WriteLine(ex.Message);
                       tw.WriteLine(ex.InnerException.Message);
                       if (messageHandler.ResponseDocument != null)
                       {
                           tw.WriteLine(messageHandler.ResponseDocument.ToString());
                       }
                       tw.Flush();
                       tw.Close();
                   }
                   WriteContent("");
               }
               finally
               {
                   Response.End();
               }
           }
       }
       private void WriteContent(string str)
       {
           Response.Output.Write(str);
       }

1)當(dāng)Get請(qǐng)求時(shí),調(diào)用 CheckSignature.Check(signature, timestamp, nonce, Token) 方法驗(yàn)證url接入, 詳情參考 用c#開發(fā)微信(1)服務(wù)號(hào)的服務(wù)器配置和企業(yè)號(hào)的回調(diào)模式 - url接入 (源碼下載)

2) 當(dāng)有Post請(qǐng)求過來時(shí),調(diào)用自定義MessageHandler類,對(duì)微信請(qǐng)求的詳細(xì)判斷操作都在這里面。

var messageHandler = new CustomMessageHandler(Request.InputStream, maxRecordCount);

messageHandler.Execute();

2. 自定義消息處理類

定義CustomMessageHandler繼承MessageHandler<MessageContext<IRequestMessageBase, IResponseMessageBase>>

public partial class CustomMessageHandler : MessageHandler<MessageContext<IRequestMessageBase, IResponseMessageBase>>
{
    public CustomMessageHandler(Stream inputStream, int maxRecordCount = 0)
        : base(inputStream, null, maxRecordCount)
    {
        WeixinContext.ExpireMinutes = 3;
    }
    public override void OnExecuting()
    {
        //測(cè)試MessageContext.StorageData
        if (CurrentMessageContext.StorageData == null)
        {
            CurrentMessageContext.StorageData = 0;
        }
        base.OnExecuting();
    }
    public override void OnExecuted()
    {
        base.OnExecuted();
        CurrentMessageContext.StorageData = ((int)CurrentMessageContext.StorageData) + 1;
    }
}

3. 分別重寫7種接收普通消息

我們可以通過重寫MessageHandler里的這7種類型方法來處理我們的業(yè)務(wù),當(dāng)然也可以只重寫需要的部分類型,不需要的類型可以不重寫,只需要定義一個(gè)統(tǒng)一的DefaultResponseMessage

public override IResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage)
{
    //所有沒有被處理的消息會(huì)默認(rèn)返回這里的結(jié)果
    var responseMessage = this.CreateResponseMessage<ResponseMessageText>();
    responseMessage.Content = "這條消息來自DefaultResponseMessage。";
    return responseMessage;
}

下面分別就這7種類型,各寫一個(gè)例子:

1) 文本消息
/// <summary>
/// 處理文字請(qǐng)求
/// </summary>
/// <returns></returns>
public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage)
{
    //注意:下面泛型ResponseMessageText即返回給客戶端的類型,可以根據(jù)自己的需要填寫ResponseMessageNews等不同類型。
    var responseMessage = CreateResponseMessage<ResponseMessageText>();
    var result = new
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 宽城| 合山市| 和田县| 大荔县| 洞口县| 永川市| 五河县| 营口市| 通山县| 蕲春县| 柳河县| 五指山市| 凯里市| 西畴县| 长顺县| 文登市| 阳泉市| 浏阳市| 通化县| 邵武市| 旬阳县| 西贡区| 汤阴县| 专栏| 苏尼特右旗| 堆龙德庆县| 治县。| 东山县| 杭锦旗| 哈密市| 彭水| 句容市| 浦县| 安康市| 昌宁县| 依安县| 万年县| 枣庄市| 醴陵市| 孙吴县| 黄陵县|