WeChat開発ではさまざまなメッセージへの応答を実装します

高洛峰
リリース: 2017-03-08 16:40:07
オリジナル
1630 人が閲覧しました

前に完了していなかった部分を続けて、簡単なテキスト インタラクションを実装します。この記事では、さまざまなメッセージやイベントへの応答を実装します。

プロジェクト GitHub アドレス: https://github.com/Andyahui/xgyxsh_WeiXin

SDK GitHub アドレス: https://github.com/JeffreySu/WeiXinMPSDK/

SDK 公式紹介ブログ: http ://www.cnblogs.com/szw/archive/2013/05/14/weixin-course-index.html


1: さまざまなメッセージに対する単純な返信の実装

現在の基礎となるフレームワークに基づいて、残りの応答メカニズムが難しくないことはわかりますが、私たちはこの SDK にあまり慣れていません。テキスト応答が実装されたので、OnTextRequest メソッドを書き換えるときに多くの再メソッドがあることがわかりました。が続きます。

WeChat開発ではさまざまなメッセージへの応答を実装します

これが、さまざまなメッセージメカニズムとイベントメカニズムを実装する必要がある方法です。 Web サイトに多くのニーズがある場合、WeChat サーバーから送信されるさまざまな POST リクエストに対応するメソッドで応答できます。ビジネス ロジックはこれらのメソッドで処理されます。

  • 1.1: 音声リクエストの処理;

        public override IResponseMessageBase OnVoiceRequest(RequestMessageVoice requestMessage)
        {
            var responseVoice = base.CreateResponseMessage<responsemessagevoice>();
            responseVoice.Voice=new Voice()
            {                
                MediaId = requestMessage.MediaId
            };           
            return responseVoice;
        }</responsemessagevoice>
ログイン後にコピー

クライアントから送信された音声リクエストは、最初に OnVoiceRequest メソッドに送られ、応答がない場合、ユーザー メッセージはデフォルトの応答メソッドに返信されます。上記のメソッドのテストでは、デフォルトで独自の音声で応答する音声応答を作成しました。 MediaId は、素材管理インターフェイスを通じてアップロードされたマルチメディア ファイルから取得された ID です。実際には、送信された音声の ID が WeChat サーバーに保存されます。ユーザーによる;

  • 1.2: 画像リクエストを処理します。

        public override IResponseMessageBase OnImageRequest(RequestMessageImage requestMessage)
        {
            var responseImage = base.CreateResponseMessage<responsemessagetext>();
            responseImage.Content = "来自图片,ahui";
            return responseImage;
        }</responsemessagetext>
ログイン後にコピー

ユーザーが画像リクエストを送信した後、テキストで返信します。複雑なロジックが必要な場合は、自分でここに追加できます。その中で、base.CreateResponseMessage() は応答テキスト タイプを作成します。

  • 1.3: 地理的位置リクエストの処理;

        public override IResponseMessageBase OnLocationRequest(RequestMessageLocation requestMessage)
        {
            //返回的是图文消息,是关于地址的图文消息。
            var responseLocation = base.CreateResponseMessage<responsemessagenews>();

            var markersList = new List<baidumarkers>();
            markersList.Add(new BaiduMarkers()
            {
                Size=BaiduMarkerSize.m,
                Color ="red",
                Label="A",
                Latitude =requestMessage.Location_X,
                Longitude=requestMessage.Location_Y,
            });
            var mapUrl = BaiduMapHelper.GetBaiduStaticMap(requestMessage.Location_Y,requestMessage.Location_X,1,13,markersList);
            responseLocation.Articles.Add(new Article()
            {
                Description = string.Format("您刚才发送了地理位置信息。Location_X:{0},Location_Y:{1},Scale:{2},标签:{3}",requestMessage.Location_X,requestMessage.Location_Y,requestMessage.Scale,requestMessage.Label),
                PicUrl = "http://pic.cnblogs.com/avatar/679140/20141128195544.png",
                Title="张辉的地图",
                Url = mapUrl
            });
            return responseLocation;
        }</baidumarkers></responsemessagenews>
ログイン後にコピー

地理的位置リクエストを処理し、ユーザーは自分の地理的位置を送信します。ユーザーは送信したい情報を送信します。 上記は、Baidu Maps を呼び出して独自の情報を再送信するインターフェイスです。

  • 1.4: リンクリクエストの処理;

        public override IResponseMessageBase OnLinkRequest(RequestMessageLink requestMessage)
        {
            var responseLink = base.CreateResponseMessage<responsemessagenews>();
            responseLink.Articles.Add(new Article()
            {
                Title="处理链接来的请求。",
                Description =requestMessage.Description,
                PicUrl = "http://pic.cnblogs.com/avatar/679140/20141128195544.png",
                Url=requestMessage.Url
            });
            return responseLink;
        }</responsemessagenews>
ログイン後にコピー
リンクについては、以前のリンクの多くはグラフィックメッセージに返信することもできましたが、内部のパラメータに注意する必要があります。 WeChat の返信内容に従うことができます。

2: POST イベントに返信

WeChat ユーザーと公式アカウント間のやり取り中、ユーザーの一部の操作により、WeChat サーバーは開発者が設定した特定の Web サイト サーバーにイベントの形式でリクエストを送信します。イベントではユーザー情報に返信できます。これが次に行うことです。

WeChat 開発者ドキュメントのイベント プッシュ:

http://mp.weixin.qq.com/wiki/7/9f89d962eba4c5924ed95b513ba69d9b.html

Event_ ロゴが付いた代表はイベント メソッドです。再定義する必要があります。これらのメソッドを記述して応答を実装します。ここには公式ウェブサイトで読むことができる多くの紹介があります。

  • 2.1: サブスクリプションイベント

        /// <summary>
        /// 订阅事件
        /// </summary>
        /// <param>
        /// <returns></returns>
        public override IResponseMessageBase OnEvent_SubscribeRequest(RequestMessageEvent_Subscribe requestMessage)
        {
            var responseSubscribe = base.CreateResponseMessage<responsemessagetext>();
            responseSubscribe.Content = "欢迎订阅,张辉欢迎您。";
            return responseSubscribe;
        }</responsemessagetext>
ログイン後にコピー
はテキストコンテンツで返信します。これは、任意のロジックを追加して、任意の画像、音声、テキストなどのタイプに返信できます。これはプロジェクトのニーズによって異なります。

  • 2.2: メニューをクリックしてメッセージをプルするときのイベントプッシュ

        /// <summary>
        /// 点击事件
        /// </summary>
        /// <param>
        /// <returns></returns>
        public override IResponseMessageBase OnEvent_ClickRequest(RequestMessageEvent_Click requestMessage)
        {
            var respondeEvert = base.CreateResponseMessage<responsemessagetext>();
            respondeEvert.Content = "点击事件,";
            return respondeEvert;
        }</responsemessagetext>
ログイン後にコピー
ここでは、このクリックイベントが何であるかわからないかもしれませんが、これはメニューバーに設定されており、後でメニューバーの機能を実装します。

  • 2.3: メニュージャンプリンクをクリックしたときのイベントプッシュ

        public override IResponseMessageBase OnEvent_ViewRequest(RequestMessageEvent_View requestMessage)
        {
            var responseView = base.CreateResponseMessage<responsemessagetext>();
            responseView.Content = "点击带有view的菜单栏";
            return responseView;
        }</responsemessagetext>
ログイン後にコピー
3: WeChatパブリックアカウントのカスタムメニューの実装

基本的にすべてのWeChatページにはメニューバーがありますが、私が持っているのは従来の設定で実現できました。現在はテスト アカウントしかありません。テスト アカウントのページを長い間探しましたが、結局、開発者のデバッグで設定できるようになりました。もう 1 つの方法は、SDK によって提供されるページを使用してこれを実現することです。

  • 3.1: 開発者デバッグツールを使用してカスタムメニューを実装する

WeChat開発ではさまざまなメッセージへの応答を実装します

开发者调试工具网址:https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=%E6%B6%88%E6%81%AF%E6%8E%A5%E5%8F%A3%E8%B0%83%E8%AF%95&form=%E4%BA%8B%E4%BB%B6%E6%B6%88%E6%81%AF

     我们发现这个还需要access_token来请求,但是我们从之前的开发中都没有发现有这个,那么这个是什么呢,仔细的看官方的介绍吧;

获取access_token,我们可以通过开发者调试工具,利用AppId和secret来获取;

WeChat開発ではさまざまなメッセージへの応答を実装します

在第一幅图中我们还需要body,调用接口的json数据包;可以参考微信开发文档里面的进行设置。注意里面就会看到click和view这两个事件类型。

{
        "button": [
            {
                "name": "IT资讯", 
                "sub_button": [
                    {
                        "type": "view", 
                        "name": "博客园", 
                        "url": "http://m.cnblogs.com/", 
                        "sub_button": [ ]
                    }, 
                    {
                        "type": "view", 
                        "name": "IT新闻", 
                        "url": "http://news.cnblogs.com/m", 
                        "sub_button": [ ]
                    }, 
                    {
                        "type": "click", 
                        "name": "关于开发者", 
                        "key": "http://m.cnblogs.com/?u=netxiaohui", 
                        "sub_button": [ ]
                    }
                ]
            }, 
            {
                "name": "校园生活", 
                "sub_button": [
                    {
                        "type": "view", 
                        "name": "搜索", 
                        "url": "http://www.baidu.com/", 
                        "sub_button": [ ]
                    }, 
                    {
                        "type": "view", 
                        "name": "视频", 
                        "url": "http://v.qq.com/", 
                        "sub_button": [ ]
                    }, 
                    {
                        "type": "click", 
                        "name": "关注我们", 
                        "key": "V1001_GOOD", 
                        "sub_button": [ ]
                    }
                ]
            }, 
            {
                "name": "学生", 
                "sub_button": [
                    {
                        "type": "view", 
                        "name": "搜索", 
                        "url": "http://www.soso.com/", 
                        "sub_button": [ ]
                    }, 
                    {
                        "type": "view", 
                        "name": "视频", 
                        "url": "http://v.qq.com/", 
                        "sub_button": [ ]
                    }, 
                    {
                        "type": "click", 
                        "name": "关注我们", 
                        "key": "V1001_GOOD", 
                        "sub_button": [ ]
                    }
                ]
            }
        ]
    }
ログイン後にコピー

    关于里面的事件类型,我们可以自己随意的设置,都会响应我们前面设置的菜单事件,我们可以进行一系列的逻辑代码的处理。

3.2:SDK的自定义菜单

      通过下面的网址可以 进行设置,里面还是需要前面的两个参数AppId和secret或者Token来设置微信的自定义菜单。

设置自定义菜单网址:http://sdk.weixin.senparc.com/Menu

WeChat開発ではさまざまなメッセージへの応答を実装しますWeChat開発ではさまざまなメッセージへの応答を実装します

四:最终的结果展示

    实现上面的代码就可以实现相应的功能。这个SDK简单的使用我们现在已经大体的会了,在之后的博文中会慢慢的解析这个SDK里面的一些东西,会从Request,Response等基础开始。

WeChat開発ではさまざまなメッセージへの応答を実装しますWeChat開発ではさまざまなメッセージへの応答を実装します


以上がWeChat開発ではさまざまなメッセージへの応答を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート