ホームページ  >  記事  >  WeChat アプレット  >  .net WeChat パブリック アカウント開発のニュースとイベント

.net WeChat パブリック アカウント開発のニュースとイベント

高洛峰
高洛峰オリジナル
2017-03-08 16:12:271852ブラウズ

この記事では、WeChat パブリック アカウント開発におけるメッセージとイベントの処理方法について説明します。(1) メッセージ (イベント) の概要、(3) メッセージの解析、(4) メッセージへの受動的返信。 ; (5) ) 他のメッセージを送信します。
1 メッセージ (イベント) 概要

一般の WeChat ユーザーが公式アカウントにメッセージを送信するか、WeChat サーバーが公式アカウントにイベントをプッシュすると、WeChat サーバーはメッセージ (イベント) の XML データ パケットを開発者によって入力された公式アカウント サーバーの URL がメッセージに応答します。
1.1 メッセージ フロー プロセス
区別しやすくするために、WeChat サーバーから公式アカウント サーバーに送信されるメッセージをリクエスト メッセージと呼び、公式アカウント サーバーから WeChat サーバーに送信されるメッセージをプッシュ イベントと呼びます。特別なリクエストメッセージとして扱われます。
リクエストメッセージとレスポンスメッセージの流れを以下の図に示します。

.net WeChat パブリック アカウント開発のニュースとイベント

1.2 リクエストメッセージ
リクエストメッセージには多くの種類があり、それぞれに対応するクラスを設けています。以下の図に示されています:

.net WeChat パブリック アカウント開発のニュースとイベント

一部のリクエストメッセージには応答できますが、一部のリクエストメッセージには応答できません。詳細については、以下の表を参照してください:

メニューをクリックしてメッセージをプルしますメニューをクリックするとジャンプしますリンクメニューをクリックしてQRコードをスキャンし、返信を待ちます√√メニューシステムをクリックして写真を送信してください√ 不明システム写真送信イベントを受信できません。WeChatサーバーが写真メッセージを送信します。返信できますメニューをクリックして写真を撮るか、WeChatサーバーが写真メッセージをフォトアルバムに送信します√×、返信できますメニューをクリックしてWeChatに写真を送信します√×WeChatサーバーが写真メッセージを送信し、返信できます メニューをクリックして選択します地理的位置√×WeChatサーバーが地理的位置メッセージを送信し、返信できますグループメッセージの結果をプッシュ√×テンプレートメッセージの結果をプッシュ √×

1.3 応答メッセージ
応答メッセージのクラス階層は以下のとおりです:

.net WeChat パブリック アカウント開発のニュースとイベント


2 メッセージの信頼性を検証します
公式アカウントサーバーがWeChatサーバーからリクエストを受信した後、最初に行うことはメッセージの信頼性を検証します。
Utility.CheckSignature メソッドは、メッセージの署名が正しいかどうかを確認するために使用されます。
例は次のとおりです:

/// <summary>
    /// 验证消息的有效性
    /// </summary>
    /// <param name="context"></param>
    /// <returns>如果消息有效,返回true;否则返回false。</returns>
    private bool Validate(HttpContext context)
    {
        string username = RequestEx.TryGetQueryString("username");  //在接口配置的URL中加入了username参数,表示哪个微信公众号
        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);
    }

验证消息真实性

メッセージの信頼性を検証します

3 メッセージを解析します

メッセージの署名が検証に合格した場合、XML 形式のメッセージ テキストを解析してリクエスト メッセージ オブジェクトにする必要がありますこの作業を完了するには、RequestMessageHelper クラスが使用されます。

RequestMessageHelper helper = new RequestMessageHelper(context.Request);
if(helper.Message != null)
{
    //消息解析成功,对它进行处理
}

メッセージが正常に解析された後、helper.Message はメッセージ基本クラスの RequestBaseMessage であり、MsgType 属性と Event 属性に基づいてメッセージ (イベント) の種類を判断し、それを に変換できます。適切なサブタイプ。例:

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;
}

メッセージの解析の詳細については、ソース コードを参照してください: http://git.oschina.net/xrwang2/xrwang.weixin.PublicAccount/blob/master/PublicAccount/RequestMessage/RequestMessageHelper .cs

4 メッセージへの受動的返信
WeChat サーバーからメッセージ (イベント) を受信した後、5 秒以内にメッセージに直接 (受動的に) 返信できます。最初に空の文字列に直接返信することもできます。その後、48 時間以内にカスタマー サービスのメッセージに返信してください。
まず ResponseXxxMessage を初期化し、次に ToXml メソッドを使用して応答メッセージの内容を取得します。
受動的な応答メッセージの例は次のとおりです:

/// <summary>
    /// 处理微信的POST请求
    /// </summary>
    /// <param name="context"></param>
    /// <returns>返回xml响应</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>
    /// 处理请求消息,返回响应消息
    /// </summary>
    /// <returns>返回响应消息</returns>
    private ResponseBaseMessage HandleRequestMessage(RequestBaseMessage requestMessage)
    {
        ResponseTextMessage response = new ResponseTextMessage(requestMessage.FromUserName, requestMessage.ToUserName, 
            DateTime.Now, string.Format("自动回复,请求内容如下:\r\n{0}", requestMessage));
        return response;
    }


5 他のメッセージを送信します

受動的な応答メッセージに加えて、カスタマー サービス メッセージ、グループ メッセージを送信したり、テンプレート メッセージを送信したりすることもできます。後で説明します。記事内で 1 つずつ来てください。


メッセージタイプ イベント が受動的に応答できるかどうか 備考
テキスト ×
写真 ×
音声 ×
ビデオ × 不明 ビデオメッセージを受信できません、わかりません 受動的に返信することは可能ですか
地理的位置 ×
リンク ×
購読
購読解除
×

以上が.net WeChat パブリック アカウント開発のニュースとイベントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。