ホームページ WeChat アプレット WeChatの開発 WeChat パブリック プラットフォーム開発: MessageHandler について

WeChat パブリック プラットフォーム開発: MessageHandler について

Feb 27, 2017 pm 12:00 PM
マイクロチャネルパブリックプラットフォーム

前の記事のコードを続けて、プロジェクトに CustomMessageHandle.cs クラスを追加します。

WeChat パブリック プラットフォーム開発: MessageHandler について

CustomMessageHandle.cs は、抽象クラス Senparc.Weixin.MP.MessageHandlers を継承し、いくつかのメソッドを実装する必要があります。 。最も初期的な CustomMessageHandle.cs コードは次のとおりです。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

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() という名前であることがわかります。この情報は、対応する型 (. WeChat メッセージがコードによって処理されない場合、デフォルトではここに結果が返されます。

DefaultResponseMessage() メソッドには、次の文があります:

1

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

ログイン後にコピー

ここでの CreateResponseMessage メソッドは、さまざまな戻り値の型に対応する次のいずれかの型になります。

ResponseMessageText - に対応します。テキスト メッセージ

ResponseMessageNews - グラフィック メッセージに対応します

ResponseMessageMusic - 音楽メッセージに対応します

ResponseMessageXXX - 他のタイプについても同様

上記のすべてのタイプのパラメータの設定方法については、次のデモを参照できます。オープン ソース プロジェクトはこちらです。繰り返しません: https://github.com/JeffreySu/WeiXinMPSDK。

では、ユーザーから送信されたテキスト メッセージをどのように処理するのでしょうか?

非常に簡単です - OnTextRequest メソッドを書き換えるだけです:

1

2

3

4

5

6

7

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 に相当します。音声、地理的位置、メニューなどのメッセージを処理したい場合は、対応するメソッドを書き換えるだけで済みます。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

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 が相当します。イベントリクエストのサブタイプに。

CustomMessageHandler の基本クラスを設定するときに、MessageContext というジェネリックが使用されていることがわかりました (MessageHandler)。この MessageContext は、SDK によって提供されるデフォルトのメッセージ コンテキスト処理クラスであり、最も基本的な In をすでに処理できます。この場合、アプリケーションがそれほど複雑でない場合は、このクラスを直接使用してください。プロジェクトがより複雑な場合は、必要に応じて独自のクラスを作成したり (IMessageContext インターフェイスを継承したり)、このクラスを継承してさらにいくつかの属性 (ワークフローや分散キャッシュなど) を拡張したりすることもできます。

これまで、WeChat ユーザーから送信されたすべてのリクエストを処理するために、MassageHandler を使用してきました。

ここでは、MassageHandler の「秘密兵器」をいくつか紹介します。

OnExecuting() と OnExecuted()

これら 2 つのメソッドを直接オーバーライドできます。このうち、OnExecuting は、すべてのメッセージ処理メソッド (OnTextRequest、OnVoiceRequest など) が実行される前に実行されます。このプロセス中に、CancelExecute を true に設定して、後続のすべてのメソッド (OnExecuted を含む) の実行を中断できます。 :

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

public override void OnExecuting()

{

    if (RequestMessage.FromUserName == "olPjZjsXuQPJoV0HlruZkNzKc91E")

    {

        CancelExcute = true; //终止此用户的对话

      

        //如果没有下面的代码,用户不会收到任何回复,因为此时ResponseMessage为null

  

        //添加一条固定回复

        var responseMessage = CreateResponseMessage<ResponseMessageText>();

        responseMessage.Content = "Hey!你已经被拉黑啦!";

  

        ResponseMessage = responseMessage;//设置返回对象

    }

}

ログイン後にコピー

If OnExecuting メソッドに中断がない場合、たとえば OnTextRequest メソッドが実行されると (またはデフォルトのメソッドが実行されると)、OnExecuted() メソッドがトリガーされ、それに応じて書き換えることもできます。 OnExecuted() メソッド内で、ResponseMessage に戻り値が割り当てられていることに注意してください。

その他の WeChat パブリック プラットフォーム開発: MessageHandler 関連の記事については、PHP 中国語 Web サイトに注目してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)