热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

微信响应菜单点击事件php,微信开发实现各种消息的响应

继续之前我们没有完成的部分,现在可以实现简单的文本交互,这篇将实现各种消息,事件的响应。一:实现各类消息的简单回复基于现在的

继续之前我们没有完成的部分,现在可以实现简单的文本交互,这篇将实现各种消息,事件的响应。

一:实现各类消息的简单回复

基于现在的底层框架,我们不难看出其余的响应机制不是很难,只是我们不是很熟悉这个SDK而已;现在已经实现了文本回复,我们在重写OnTextRequest方法的时候发现有很多的重新方法,如下。

0370e7b7984bc54e37117c87bfef6767.png

这个就是我们需要实现各种消息机制和事件机制的方法。可以通过实现对应的方法来响应微信服务器发送过来的各种POST请求,如果网站有很多的需求,那么处理的业务逻辑就是在这些方法中进行。1.1:处理语音请求;public override IResponseMessageBase OnVoiceRequest(RequestMessageVoice requestMessage)

{

var responseVoice = base.CreateResponseMessage();

responseVoice.Voice=new Voice()

{

MediaId = requestMessage.MediaId

};

return responseVoice;

}

我们客户端发送的语音请求先到OnVoiceRequest方法中,要是没有任何的回复就到默认回复方法中回复用户消息。在上面方法测试中我们创建了语音的回复,默认回复它自己的语音,MediaId是通过素材管理接口上传的多媒体文件得到的ID,其实就是微信服务器保存用户发送语音的ID;1.2:处理图片请求;public override IResponseMessageBase OnImageRequest(RequestMessageImage requestMessage)

{

var responseImage = base.CreateResponseMessage();

responseImage.Content = "来自图片,ahui";

return responseImage;

}

用户发送的图片请求,之后我们回复文本。要是需要复杂的逻辑我们可以自己在这里添加。其中的base.CreateResponseMessage()就是创建了一个回复的文本类型;1.3:处理地理位置请求;public override IResponseMessageBase OnLocationRequest(RequestMessageLocation requestMessage)

{

//返回的是图文消息,是关于地址的图文消息。

var responseLocation = base.CreateResponseMessage();

var markersList = new List();

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;

}

处理地理位置请求,用户发送自己的地理位置,我们可以给用户发送任何我们想发送的信息,上面是调用百度地图的接口,将它自己的信息又重新的发送。1.4:处理链接请求;public override IResponseMessageBase OnLinkRequest(RequestMessageLink requestMessage)

{

var responseLink = base.CreateResponseMessage();

responseLink.Articles.Add(new Article()

{

Title="处理链接来的请求。",

Description =requestMessage.Description,

PicUrl = "http://pic.cnblogs.com/avatar/679140/20141128195544.png",

Url=requestMessage.Url

});

return responseLink;

}

关于链接也是回复图文消息,之前的很多都是回复图文消息,但是我们需要注意里面的参数,这样才可以符合微信的回复内容。二:POST事件的回复

微信用户和公众号的交互过程中,用户的一些操作会使微信服务器以事件的形式发送请求到开发者设置的网站服务器上,某些事件可以让我们回复用户信息;下面就是来处理这些的。

微信开发者文档的事件推送:

带有Event_标识的代表就是事件的方法,我们需要重写这些方法来实现我们的回复。这里面有很多可以看官网的介绍。2.1:订阅事件///

/// 订阅事件

///

///

///

public override IResponseMessageBase OnEvent_SubscribeRequest(RequestMessageEvent_Subscribe requestMessage)

{

var responseSubscribe = base.CreateResponseMessage();

responseSubscribe.Content = "欢迎订阅,张辉欢迎您。";

return responseSubscribe;

}

回复的是文本内容,这有利于测试,我们可以添加任何的逻辑,也可以回复任何的图文,语音,文本等类型。这就要看项目的需求了。2.2:点击菜单拉取消息时的事件推送///

/// 点击事件

///

///

///

public override IResponseMessageBase OnEvent_ClickRequest(RequestMessageEvent_Click requestMessage)

{

var respondeEvert = base.CreateResponseMessage();

respondeEvert.Content = "点击事件,";

return respondeEvert;

}

这里你可能不知道这个点击事件是什么,这个是在菜单栏那边设置的,我们之后就会实现菜单栏的功能。2.3:点击菜单跳转链接时的事件推送public override IResponseMessageBase OnEvent_ViewRequest(RequestMessageEvent_View requestMessage)

{

var responseView = base.CreateResponseMessage();

responseView.Content = "点击带有view的菜单栏";

return responseView;

}三:实现微信公众号自定义菜单

每一个微信的页面下基本上都有菜单栏,人家的那个是通过常规的设置可以实现的,现在我们的只是测试号,在测试号页面找了好久都没有发现,最后经过查询在开发者调试中可以设置。还有一种是利用SDK提供的页面来实现。3.1:利用开发者调试工具实现自定义菜单

04f1e3cdfe7464bbf109c96bdf123ff0.png

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

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

98eca122993456aa0541d1b662c133fe.png

在第一幅图中我们还需要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来设置微信的自定义菜单。

10373e6faa6926fd6ee9de5b051bdf42.png

93a80247ca7079811bc5ee6178ccf6d2.png四:最终的结果展示

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

e36e5eccf22f9d96f7e8d41cd7ec4ea9.png

780d9a8e6df70c796d4e930181d6f856.png



推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
author-avatar
cy45vsf
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有