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

.net微信公眾號(hào)開發(fā)消息與事件

高洛峰
發(fā)布: 2017-03-08 16:12:27
原創(chuàng)
2037人瀏覽過

本文介紹如何處理微信公眾號(hào)開發(fā)中的消息與事件,包括:(1)消息(事件)概況;(2)驗(yàn)證消息的真實(shí)性;(3)解析消息;(4)被動(dòng)回復(fù)消息;(5)發(fā)送其他消息。
1 消息(事件)概況

? ? 當(dāng)普通微信用戶向公眾號(hào)發(fā)消息或者微信服務(wù)器向公眾號(hào)推送事件時(shí),微信服務(wù)器將POST消息(事件)的XML數(shù)據(jù)包到開發(fā)者填寫的公眾號(hào)服務(wù)器URL上;公眾號(hào)服務(wù)器然后對(duì)消息作出響應(yīng)。
1.1 消息的流轉(zhuǎn)過程
? ? 為了便于區(qū)分,我們將微信服務(wù)器發(fā)往公眾號(hào)服務(wù)器的消息稱為請(qǐng)求(Request)消息;將公眾號(hào)服務(wù)器發(fā)往微信服務(wù)器的消息稱為響應(yīng)(Response)消息;將推送事件看成特殊的請(qǐng)求消息。
? ? 請(qǐng)求與響應(yīng)消息的流轉(zhuǎn)過程如下圖所示:

.net微信公眾號(hào)開發(fā)消息與事件

1.2 請(qǐng)求消息
? ? 請(qǐng)求消息有很多種,我們?yōu)槠湟灰唤⒘藢?duì)應(yīng)的類,類層次結(jié)構(gòu)如下圖所示:

.net微信公眾號(hào)開發(fā)消息與事件

有些請(qǐng)求消息,我們可以做出響應(yīng),有些則不能,詳見下表:

消息類型 是否事件 能夠被動(dòng)回復(fù) 備注
文本 × ?
圖片 × ?
聲音 × ?
視頻 × 未知 接收不到視頻消息,不知道是否能被動(dòng)回復(fù)
地理位置 × ?
鏈接 × ?
訂閱 ?
取消訂閱 × ?
掃描二維碼 × ?
上報(bào)地理位置 × ?
點(diǎn)擊菜單拉取消息 ?
點(diǎn)擊菜單跳轉(zhuǎn)鏈接 × ?
點(diǎn)擊菜單掃碼推 × ?
點(diǎn)擊菜單掃碼等待回復(fù) ?
點(diǎn)擊菜單系統(tǒng)發(fā)圖 未知 接收不到系統(tǒng)發(fā)圖事件;微信服務(wù)器會(huì)發(fā)送圖片消息,可回復(fù)
點(diǎn)擊菜單拍照或相冊(cè)發(fā)圖 × 微信服務(wù)器會(huì)發(fā)送圖片消息,可回復(fù)
點(diǎn)擊菜單微信發(fā)圖 × 微信服務(wù)器會(huì)發(fā)送圖片消息,可回復(fù)
點(diǎn)擊菜單選擇地理位置 × 微信服務(wù)器會(huì)發(fā)送地理位置消息,可回復(fù)
推送群發(fā)消息結(jié)果 × ?
推送發(fā)送模板消息結(jié)果 × ?

?

1.3 響應(yīng)消息
? ? 響應(yīng)消息的類層次結(jié)構(gòu)如下圖所示:

.net微信公眾號(hào)開發(fā)消息與事件


2 驗(yàn)證消息的真實(shí)性
? ? 公眾號(hào)服務(wù)器接收到微信服務(wù)器的請(qǐng)求之后,第一件事情是驗(yàn)證消息的真實(shí)性。
? ? Utility.CheckSignature方法用于驗(yàn)證消息簽名是否正確。
? ? 示例如下:

/// <summary>
    /// 驗(yàn)證消息的有效性
    /// </summary>
    /// <param name="context"></param>
    /// <returns>如果消息有效,返回true;否則返回false。</returns>
    private bool Validate(HttpContext context)
    {
        string username = RequestEx.TryGetQueryString("username");  //在接口配置的URL中加入了username參數(shù),表示哪個(gè)微信公眾號(hào)
        AccountInfo account = AccountInfoCollection.GetAccountInfo(username);
        if (account == null)
            return false;
        string token = account.Token;
        string signature = RequestEx.TryGetQueryString("signature");
        string timestamp = RequestEx.TryGetQueryString("timestamp");
        string nonce = RequestEx.TryGetQueryString("nonce");
        if (string.IsNullOrWhiteSpace(signature) || string.IsNullOrWhiteSpace(timestamp) || string.IsNullOrWhiteSpace(nonce))
            return false;
        return xrwang.weixin.PublicAccount.Utility.CheckSignature(signature, token, timestamp, nonce);
    }

驗(yàn)證消息真實(shí)性
登錄后復(fù)制

驗(yàn)證消息真實(shí)性

?

3 解析消息

? ? 如果消息簽名通過驗(yàn)證,我們需要將XML格式的消息文本解析成請(qǐng)求消息對(duì)象,RequestMessageHelper類用于完成這項(xiàng)工作。

RequestMessageHelper helper = new RequestMessageHelper(context.Request);
if(helper.Message != null)
{
    //消息解析成功,對(duì)它進(jìn)行處理
}
登錄后復(fù)制

?

?消息解析成功之后,helper.Message為消息基類RequestBaseMessage,我們可以根據(jù)屬性MsgType及Event判斷到底是哪種消息(事件),并轉(zhuǎn)換成適當(dāng)?shù)淖宇愋?。例如?/p>

RequestBaseMessage bm=helper.Message;
switch(bm.MsgType)
{
    case RequestMessageTypeEnum.text:  //文本消息
        HandleTextMessage((RequestTextMessage)bm);
        break;
    case RequestMessageTypeEnum.image: //圖片消息
        HandleImageMessage((RequestImageMessage)bm);
        break;
    //處理其他消息
    case RequestMessageTypeEnum.event:    //事件
        RequestEventMessage ev=(RequestEventMessage)bm;
        switch(ev.Event)
        {
            case RequestEventTypeEnum.subscribe:    //訂閱
                HandleSubscribeMessage((RequestSubscribeMessage)ev);
                break;
            case RequestEventTypeEnum.unsubscribe:    //取消訂閱
                HandleUnsubscribeMessage((RequestUnsubscribeMessage)ev);
                break;
            //處理其他事件
        }
        break;
    default:
        break;
}
登錄后復(fù)制

解析消息的細(xì)節(jié)請(qǐng)參看源代碼:http://git.oschina.net/xrwang2/xrwang.weixin.PublicAccount/blob/master/PublicAccount/RequestMessage/RequestMessageHelper.cs

4 被動(dòng)回復(fù)消息
? ? 從微信服務(wù)器接收到消息(事件)之后,我們可以在5秒之內(nèi)直接(被動(dòng))回復(fù)消息;也可以先直接回復(fù)空字符串,然后再在48小時(shí)內(nèi)回復(fù)客服消息。
? ? 先初始化ResponseXxxMessage,然后用ToXml方法得到響應(yīng)消息內(nèi)容。
? ? 被動(dòng)回復(fù)消息的示例如下:

/// <summary>
    /// 處理微信的POST請(qǐng)求
    /// </summary>
    /// <param name="context"></param>
    /// <returns>返回xml響應(yīng)</returns>
    private string HandlePost(HttpContext context)
    {
        RequestMessageHelper helper = new RequestMessageHelper(context.Request);
        if (helper.Message != null)
        {
            ResponseBaseMessage responseMessage = HandleRequestMessage(helper.Message);
            return responseMessage.ToXml(helper.EncryptType);
        }
        else
            return string.Empty;
    }

    /// <summary>
    /// 處理請(qǐng)求消息,返回響應(yīng)消息
    /// </summary>
    /// <returns>返回響應(yīng)消息</returns>
    private ResponseBaseMessage HandleRequestMessage(RequestBaseMessage requestMessage)
    {
        ResponseTextMessage response = new ResponseTextMessage(requestMessage.FromUserName, requestMessage.ToUserName, 
            DateTime.Now, string.Format("自動(dòng)回復(fù),請(qǐng)求內(nèi)容如下:\r\n{0}", requestMessage));
        return response;
    }
登錄后復(fù)制

?5 發(fā)送其他消息

? ? 除了被動(dòng)回復(fù)消息之外,我們還可以發(fā)送客服消息、群發(fā)消息、發(fā)送模板消息,這些內(nèi)容將在后續(xù)文章中一一道來。

?

?

以上就是.net微信公眾號(hào)開發(fā)消息與事件的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!

微信app下載
微信app下載

微信是一款手機(jī)通信軟件,支持通過手機(jī)網(wǎng)絡(luò)發(fā)送語音短信、視頻、圖片和文字。微信可以單聊及群聊,還能根據(jù)地理位置找到附近的人,帶給大家全新的移動(dòng)溝通體驗(yàn),有需要的小伙伴快來保存下載體驗(yàn)吧!

下載
來源:php中文網(wǎng)
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn
最新問題
開源免費(fèi)商場(chǎng)系統(tǒng)廣告
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長(zhǎng)!
關(guān)注服務(wù)號(hào) 技術(shù)交流群
PHP中文網(wǎng)訂閱號(hào)
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時(shí)隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號(hào)
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://www.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)