Home  >  Article  >  WeChat Applet  >  WeChat development implements responses to various messages

WeChat development implements responses to various messages

高洛峰
高洛峰Original
2017-03-08 16:40:071605browse

Continuing with the part we did not complete before, we can now implement simple text interaction. This article will implement responses to various messages and events.

Project GitHub address: https://github.com/Andyahui/xgyxsh_WeiXin

SDK’s GitHub address: https:/ /github.com/JeffreySu/WeiXinMPSDK/

SDK official introduction blog: http://www.cnblogs.com/szw/archive/2013/05/14/weixin-course- index.html


1: Implement simple replies to various messages

Based on the current underlying framework, it is not difficult for us to see other response mechanisms It's not difficult, it's just that we are not very familiar with this SDK; now that text replies have been implemented, we found that there are many re-methods when rewriting the OnTextRequest method, as follows.

WeChat development implements responses to various messages

This is how we need to implement various message mechanisms and event mechanisms. You can respond to various POST requests sent by the WeChat server by implementing corresponding methods. If the website has a lot of needs, the business logic is processed in these methods.

  • 1.1: Processing voice requests;

        public override IResponseMessageBase OnVoiceRequest(RequestMessageVoice requestMessage)
        {
            var responseVoice = base.CreateResponseMessage<responsemessagevoice>();
            responseVoice.Voice=new Voice()
            {                
                MediaId = requestMessage.MediaId
            };           
            return responseVoice;
        }</responsemessagevoice>

The voice request sent by our client first goes to the OnVoiceRequest method. If there is no reply, Reply to the user's message in the default reply method. In the above method test, we created a voice reply, which replies with its own voice by default. MediaId is the ID obtained from the multimedia file uploaded through the material management interface. In fact, the WeChat server saves the ID of the voice sent by the user;

  • 1.2: Process image requests;

        public override IResponseMessageBase OnImageRequest(RequestMessageImage requestMessage)
        {
            var responseImage = base.CreateResponseMessage<responsemessagetext>();
            responseImage.Content = "来自图片,ahui";
            return responseImage;
        }</responsemessagetext>

The user sends an image request, and then we reply with the text. If we need complex logic, we can add it here ourselves. Among them, base.CreateResponseMessage() is to create a reply text type;

  • 1.3: Processing geographical location requests;

        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>

Processing the geographical location request, the user sends his or her geographical location, and we can send any information we want to the user. The above is the interface that calls Baidu Maps to re-send its own information.

  • 1.4: Processing link requests;

        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>

Regarding links, they also reply to graphic messages. Many of the previous ones responded to graphic messages, but We need to pay attention to the parameters inside so that it can comply with WeChat's reply content.

2: Reply to POST event

During the interaction between WeChat users and official accounts, some user operations will cause the WeChat server to send requests to the development team in the form of events On the website server set up by the author, certain events allow us to reply to user information; the following is to handle these.

Event push of WeChat developer documentation:

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

The representatives with the Event_ logo are the event methods. We need to rewrite these methods to implement our reply. There are many introductions here that you can read on the official website.

  • 2.1: Subscription event

        /// <summary>
        /// 订阅事件
        /// </summary>
        /// <param>
        /// <returns></returns>
        public override IResponseMessageBase OnEvent_SubscribeRequest(RequestMessageEvent_Subscribe requestMessage)
        {
            var responseSubscribe = base.CreateResponseMessage<responsemessagetext>();
            responseSubscribe.Content = "欢迎订阅,张辉欢迎您。";
            return responseSubscribe;
        }</responsemessagetext>

The reply is text content, which is conducive to testing. We can add any logic and can also reply Any image, voice, text, etc. types. This depends on the needs of the project.

  • 2.2: Event push when clicking on the menu to pull the message

        /// <summary>
        /// 点击事件
        /// </summary>
        /// <param>
        /// <returns></returns>
        public override IResponseMessageBase OnEvent_ClickRequest(RequestMessageEvent_Click requestMessage)
        {
            var respondeEvert = base.CreateResponseMessage<responsemessagetext>();
            respondeEvert.Content = "点击事件,";
            return respondeEvert;
        }</responsemessagetext>

Here you may not know what this click event is, this is Set on the menu bar, we will implement the function of the menu bar later.

  • 2.3: Event push when clicking the menu jump link

        public override IResponseMessageBase OnEvent_ViewRequest(RequestMessageEvent_View requestMessage)
        {
            var responseView = base.CreateResponseMessage<responsemessagetext>();
            responseView.Content = "点击带有view的菜单栏";
            return responseView;
        }</responsemessagetext>

3: Implementing the WeChat public account custom menu

Basically, there is a menu bar under every WeChat page. The one they have can be achieved through regular settings. Now ours is just a test account. We have been looking for the test account page for a long time and haven’t found it. Finally, it can be set in developer debugging after querying. Another way is to use the page provided by the SDK to achieve it.

  • 3.1: Use developer debugging tools to implement custom menus

WeChat development implements responses to various messages

开发者调试工具网址: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 development implements responses to various messages

在第一幅图中我们还需要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 development implements responses to various messagesWeChat development implements responses to various messages

四:最终的结果展示

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

WeChat development implements responses to various messagesWeChat development implements responses to various messages


The above is the detailed content of WeChat development implements responses to various messages. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn