微信自定义菜单开发教程
- 格式:doc
- 大小:1.37 MB
- 文档页数:13
【微信⼩程序】⾃定义抽屉式菜单(底部,从下向上拉出)通过使⽤这个创建动画的api,可以做出很多特效出来下⾯介绍⼀个抽屉菜单的案例实现代码:wxml:<!--button--><view class="btn" bindtap="powerDrawer" data-statu="open">button</view><!--mask--><view class="drawer_screen" bindtap="powerDrawer" data-statu="close" wx:if="{{showModalStatus}}"></view><!--content--><!--使⽤animation属性指定需要执⾏的动画--><view animation="{{animationData}}" class="drawer_attr_box" wx:if="{{showModalStatus}}"><!--drawer content--><view class="drawer_content"><view class="drawer_title line">菜单1</view><view class="drawer_title line">菜单2</view><view class="drawer_title line">菜单3</view><view class="drawer_title line">菜单4</view><view class="drawer_title">菜单5</view></view></view>wxss:/*button*/.btn {width: 80%;padding: 20rpx 0;border-radius: 10rpx;text-align: center;margin: 40rpx 10%;background: #0C1939;color: #fff;}/*mask*/.drawer_screen {width: 100%;height: 100%;position: fixed;top: 0;left: 0;z-index: 1000;background: #000;opacity: 0.2;overflow: hidden;}/*content*/.drawer_attr_box {width: 100%;overflow: hidden;position: fixed;bottom: 0;left: 0;z-index: 1001;background: #fff;}.drawer_content {padding: 20rpx 40rpx;height: 470rpx;overflow-y: scroll;}.drawer_title{padding:20rpx;font:42rpx "microsoft yahei";text-align: center;}.line{border-bottom: 1px solid #f8f8f8;} js:Page({data: {showModalStatus: false},powerDrawer: function (e) {var currentStatu = e.currentTarget.dataset.statu;this.util(currentStatu)},util: function(currentStatu){/* 动画部分 */// 第1步:创建动画实例var animation = wx.createAnimation({duration: 200, //动画时长timingFunction: "linear", //线性delay: 0 //0则不延迟});// 第2步:这个动画实例赋给当前的动画实例this.animation = animation;// 第3步:执⾏第⼀组动画:Y轴偏移240px后(盒⼦⾼度是240px),停 animation.translateY(240).step();// 第4步:导出动画对象赋给数据对象储存this.setData({animationData: animation.export()})// 第5步:设置定时器到指定时候后,执⾏第⼆组动画setTimeout(function () {// 执⾏第⼆组动画:Y轴不偏移,停animation.translateY(0).step()// 给数据对象储存的第⼀组动画,更替为执⾏完第⼆组动画的动画对象 this.setData({animationData: animation})//关闭抽屉if (currentStatu == "close") {this.setData({showModalStatus: false});}}.bind(this), 200)// 显⽰抽屉if (currentStatu == "open") {this.setData({showModalStatus: true});}}})效果: 。
公众号开发流程
公众号开发是指根据微信公众平台的要求,进行自定义菜单、消息回复、素材管理等功能的开发。
下面是公众号开发的一般流程:
1. 注册微信公众平台账号:首先需要在微信公众平台上注册一个账号,并选择要开发的类型,如订阅号、服务号或企业号。
2. 完善公众号基本信息:注册账号后,需要填写公众号的基本信息,包括公众号名称、头像、简介等。
3. 申请微信公众号开发者权限:为了能够使用公众号开发接口,需要申请微信公众号开发者权限。
申请步骤包括提供公众号的基本信息、开发者身份验证等。
4. 开发公众号功能:开发功能包括自定义菜单、消息回复、素材管理等。
可以使用微信提供的开发工具集成开发环境(IDE)
进行开发。
5. 部署代码:开发完成后,需要将代码部署到服务器上,确保公众号能够正常运行。
6. 测试和调试:在部署代码后,需要进行测试和调试,确保公众号的功能能够正常运行。
7. 提交审核:当开发完成并通过测试后,需要将开发的功能提交到微信公众平台审核。
审核包括选择要审核的功能,填写相
关说明等。
8. 上线发布:通过审核后,功能可以上线发布,用户可以通过搜索公众号或扫描二维码关注公众号。
9. 运营与推广:公众号上线后,需要进行运营与推广,包括推送内容、互动回复、关注活动等,吸引用户关注和使用公众号。
总结起来,公众号开发流程包括注册账号、完善基本信息、申请开发者权限、开发功能、部署代码、测试调试、提交审核、上线发布和运营与推广。
通过以上步骤,可以完成一个公众号的开发工作,并吸引用户关注和使用公众号。
微信公众号的自定义菜单该设置什么内容?趁早上挤地铁的时间扒了扒微信里关注的公众号。
205个!一天有205篇新文章要看,看1篇平均5分钟,17个小时才能看完。
还有7小时留来睡觉。
这么算,一天啥事不用干,光看文章就行了!花了点时间抽取了其中的53个经常更新的来分析下它们的自定义菜单功能都如何设置。
我把它们的菜单项归纳为7种类型,如下:1、自我介绍:关于我、我们2、活动:招聘会、考察、交流、培训班3、合作:投稿、联系我们、设计咨询4、电商:商城、店铺、5、文章:精选、近期、历史、推荐、资讯6、社群:互动社区、论坛、微信群7、广告:推书籍、推作品、推公众号8、空格:菜单为空。
这53个公众号,共有159个菜单项,1个没有设置置底的菜单。
5个只用了2个菜单项。
现在还有没设置菜单的公众号,这公号是有多懒。
统计后,占比见下图:文章分类遥遥领先竟然还有浪费菜单项的,直接空的合作的需求很大活动跟电商有不少了社群还没有受到重视打广告的还算比较少下面具体看看这几种类型的作用:一、文章分类:改善阅读体验出现这种类型的原因应该是微信公众号缺少分类功能,更符合碎片化阅读的场景。
读者查看时需要在历史记录里翻阅这么多文章,一篇篇往前翻,多费劲,而且还只能按时间来排序,缺少个提纲挈领的目录。
所以大小公众号往往为了避免碎片化阅读的弊端,吸取结构化阅读的优点,用菜单功能做了分类文章的功能,具体用“往期文章、必读、导读、精选、好文、最新资讯”来实现索引功能。
我们PK 下结构化阅读与碎片化阅读。
结构化阅读就像看一本书,有前言、提纲、章节。
碎片化阅读其实一直都有,比如报纸,一篇篇文章直接的关联性不是很强,经典的著作《论语》也是碎片化的。
2者各有利弊,结构化是系统性的、可以深入阅读,碎片化是随机的,灵活的、快速的。
碎片化更符合当前时代。
除了用菜单功能实现文章分类外,还有设置链接到一个轻应用的方式。
可选的有白鹭引擎最近上线的一款青雀的产品,有赞也不错,罗辑思维用的就是它。
微信公众号⾃定义菜单完整代码<?php$url = "https:///cgi-bin/token?grant_type=client_credential&appid=wxdf1c98cc137c3925&secret=948b41615d25d52236e13eb6531efcfd"; $dataa = getCurl($url);//通过⾃定义函数getCurl得到https的内容$resultArr = json_decode($dataa, true);//转为数组$access_token = $resultArr['access_token'];//echo $access_token;die;function getCurl($url){//get https的内容$ch = curl_init();curl_setopt($ch, CURLOPT_URL,$url);curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);//不输出内容curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);$result = curl_exec($ch);curl_close ($ch);return $result;}function createMenu($data,$url1){$ch = curl_init();curl_setopt($ch, CURLOPT_URL,$url1);curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);curl_setopt($ch, CURLOPT_AUTOREFERER, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $data);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);$tmpInfo = curl_exec($ch);if (curl_errno($ch)) {return curl_error($ch);}curl_close($ch);return $tmpInfo;}$url1 = "https:///cgi-bin/menu/create?access_token=".$access_token;$data = '{"button":[{"type":"click","name":"⾸页","key":"home"},{"type":"click","name":"简介","key":"introduct"},{"name":"个⼈中⼼","sub_button":[{"type":"view","name":"我的商城","url":"/" },{"type":"view","name":"我的媳妇","url":"https://"}]}]}';echo createMenu($data,$url1);。
公众平台开发教程公众平台开发教程1:概述1.1 什么是公众平台1.2 公众平台的作用1.3 公众平台开发的基本流程2:注册与配置2.1 注册公众平台账号2.2 配置开发者权限2.3 创建自定义菜单2.4 增加关注欢迎语2.5 设置自定义回复消息3:消息处理3.1 接收用户消息3.2 处理用户消息3.3 发送客服消息3.4 接收地理位置消息3.5 接收事件消息4:素材管理4.1 临时素材4.2 临时素材4.3 永久素材4.4 永久素材4.5 素材管理API调用示例5:用户管理5.1 获取用户基本信息5.2 获取用户列表5.3 获取用户分组5.4 管理用户分组5.5 用户标签管理5.6 用户管理6:账号管理7:网页授权7.1 用户授权流程7.2 获取授权用户信息7.3 刷新和验证授权8:数据统计8.1 用户分析数据接口8.2 图文分析数据接口8.3 消息分析数据接口8.4 接口分析数据接口附件:- 附带源代码示例- 附带案例演示文件法律名词及注释:1:公众平台:由腾讯公司开发和运营的一个公众号管理平台,提供了丰富的功能和接口,供开发者开发和管理公众号。
2:开发者权限:在公众平台注册开发者账号后,获取的一系列权限,包括菜单配置、消息处理、素材管理等。
3:自定义菜单:允许公众号开发者在中自定义菜单,方便用户交互和导航功能。
4:关注欢迎语:当用户关注公众号后,显示给用户的欢迎消息。
5:自定义回复消息:根据用户发送的消息自动回复相应的内容,提供个性化的用户体验。
微信订阅号开通自定义菜单流程大家都知道微信自定义菜单的好处,微信导航的功能极大的方便的各类营销活动。
而订阅号每天可以发送消息,也起到了很好的推广作用。
那么,订阅号如何获得自定义菜单功能呢?专业微信营销机构杰客科技指出,企业、政府、媒体、个体、个人、工作室、网站的订阅号均可帮忙开通自定义菜单接口,以下是详细流程。
∙订阅号菜单的形式可创建最多3个一级菜单,每个一级菜单下可创建最多5个二级菜单。
并且可设置订阅者点击菜单后,公众号做出的相应动作。
如发送信息、跳转到网页(商品购买页面)。
∙订阅号如何开通菜单企业、政府、媒体、个体、个人、工作室、网站的订阅号均开通自定义菜单接口,需要的资料为微信账号信息、身份证、手机、邮箱、联系地址等。
将以上资料整理好发给杰客科技在线客服人员,即可帮忙开通自定义菜单功能。
所需时间为3工作日左右,要求提供的照片清晰、信息准确。
∙自定义菜单设置方法自定义菜单能够帮助公众号丰富界面,让用户更好更快地理解公众号的功能。
开启自定义菜单后,公众号界面如图所示:目前自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。
一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“...”代替。
请注意,创建自定义菜单后,由于微信客户端缓存,需要24小时微信客户端才会展现出来。
建议测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果。
∙菜单功能按钮目前自定义菜单接口可实现两种类型按钮,如下:click:用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互;view:用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的url值(即网页链接),达到打开网页的目的,建议与网页授权获取用户基本信息接口结合,获得用户的登入个人信息。
公众平台开发教程公众平台开发教程一:概述1.1 什么是公众平台公众平台是一个提供给公众号运营者进行管理和开发的平台,通过该平台,运营者可以创建并管理自己的公众号,并通过开发接口和功能,实现更多的个性化服务。
1.2 公众号类型有订阅号、服务号、企业等不同类型的公众号,不同类型的公众号在功能和权限上有所区别。
1.3 开发准备工作在进行开发前,需要注册成为公众号的开发者,并获取开发者ID和密钥等信息。
二:公众平台接口2.1 服务器配置配置服务器,将接收消息和事件的URL地址与公众号进行绑定。
2.2 接收消息通过开发接口,接收用户发送的文本、图片、语音、视频等消息。
2.3 发送消息开发接口,实现向用户发送文本、图片、语音、视频等消息。
2.4 用户管理通过开发接口,获取用户的基本信息,实现对用户进行管理。
2.5 素材管理开发接口,用于、、删除公众号的图片、语音、视频等素材。
三:高级功能开发3.1 自定义菜单创建自定义菜单,实现公众号的个性化菜单设置。
3.2 模板消息开发接口,用于向用户发送模板消息,实现消息的定制化。
3.3 网页授权通过网页授权,获取用户的基本信息及访问权限,实现网页的个性化展示。
3.4 客服功能开发接口,实现与用户的实时对话功能,提供更好的客户服务。
3.5 数据统计获取公众号的用户、消息、菜单等统计数据,进行数据分析和优化。
四:开发工具推荐4.1 公众号开发文档介绍公众平台开发文档的使用方法和注意事项。
4.2 开发工具推荐一些常用的开发工具,如开发者工具、Postman等。
4.3 开发资源提供一些开发资源的,如常见问题、开发案例等。
4.4 其他参考资料给出一些其他有关公众平台开发的参考资料推荐。
附件:附件1:公众平台开发接口文档附件2:公众平台开发示例代码法律名词及注释:1. 公众号:平台上的一种类型账号,由个人、企业、机构等注册并管理,用于向用户提供信息和服务。
2. 开发者ID:公众平台开放给开发者的唯一标识,用于接口调用和认证。
微信⼩程序-⾃定义菜单导航(实现楼梯效果)设计初衷在开发页⾯时,往往需要实现,点击页⾯的导航菜单页⾯滚动到相应位置,滚动页⾯实现菜单选项的⾼亮。
在html开发中,我们可以⽤到a 标签锚点实现,jq的动画相结合实现类似效果。
在框架中vant UI框架也为我们实现了这⼀效果。
微信⼩程序该如何实现??效果展⽰1. 当菜单导航滚动到页⾯顶部时,菜单吸顶2. 当点击菜单按钮时,切换到对应区域(过渡到该区域,有动画效果)3. 当内容区滚动到某类区域时,对应区域的菜单按钮⾼亮设计思路1、吸顶效果的实现获取菜单导航距离页⾯顶部距离wx.createSelectorQuery()页⾯滚动监听滚动距离与菜单初始位置值⽐较1) 距离const query = wx.createSelectorQuery()query.select('.menu_nav').boundingClientRect(function(res) {let obj = {}if (res && res.top) {obj[item.attr] = parseInt(res.top)}}).exec()①wx.createSelectorQuery()返回⼀个 SelectorQuery 对象实例。
在⾃定义组件或包含⾃定义组件的页⾯中,应使⽤ this.createSelectorQuery() 来代替。
②SelectorQuery.select(string selector)在当前页⾯下选择第⼀个匹配选择器 selector 的节点。
返回⼀个 NodesRef 对象实例,可以⽤于获取节点信息。
selector 语法selector类似于 CSS 的选择器,但仅⽀持下列语法。
ID选择器:#the-idclass选择器(可以连续指定多个):.a-class.another-class⼦元素选择器:.the-parent > .the-child后代选择器:.the-ancestor .the-descendant跨⾃定义组件的后代选择器:.the-ancestor >>> .the-descendant多选择器的并集:#a-node, .some-other-nodes③NodesRef.boundingClientRect(function callback)添加节点的布局位置的查询请求。
微信⼩程序⾃定义select下拉选项框组件的实现代码知识点:组件,animation,获取当前点击元素的索引与内容微信⼩程序中没有select下拉选项框,所以只有⾃定义。
⾃定义的话,可以选择模板的⽅式,也可以选择组件的⽅式来创建。
这次我选择了组件,这样只需引⼊组件和添加数据,其它的不⽤管,就能实现多个地⽅重复使⽤了。
第⼀步:创建组件所需的⽂件我喜欢把共⽤的内容都放在和pages⽂件同级的地⽅,所以有了下⾯的⽬录结构(1)先创建⼀个⾃定义名字的⽂件夹,例如我上⾯的Componet(2)再创建⼀个select⽂件夹,然后:右键这个⽂件夹,新建下⾯的这个Component。
然后输⼊需要创建的名称,我这⾥为了⽅便就取了select的名字。
然后就会⾃动创建4个⽂件,js、json、wxml、wxss。
第⼆步:开始配置组件注意:如果通过第⼀步创建的可直接跳过第⼆步。
(1)通过第⼀步创建的组件的⽂件夹中,已经⾃动配置好了。
只需在引⼊组件的时候,在引⼊组件的页⾯的json⽂件中配置组件的名称和组件的位置。
(2)如果⾃⼰⼿动创建组件的js、json、wxml、wxss这个⽂件,那么需要在json⽂件中填⼊ "component": true 表⽰⾃定义组件声明。
js⽂件中也需要写成这种格式:Component({properties: {// 这⾥定义了innerText属性,属性值可以在组件使⽤时指定innerText: {type: String,value: 'default value',}},data: {// 这⾥是⼀些组件内部数据someData: {}},methods: {// 这⾥是⼀个⾃定义⽅法customMethod: function(){}}})第三步:⾃定义组件样式及js。
注意:这⾥可以在 app.json 的 pages 中把组件所在的页⾯放到第⼀位,这样就能在组件的页⾯编写代码了,⽐如我上⾯的⽬录结构:就需要写成 "Componet/select/select", 后⾯再是其它的页⾯。
个人微信公众号开发教程个人微信公众号的开发教程是一项很有意义的任务。
随着微信的普及,越来越多的个人或者企业都希望能够有一个自己的微信公众号来进行品牌推广、信息发布以及用户互动等活动。
首先,我们需要在微信开放平台上注册一个开发者账号,并创建自己的公众号。
注册完成后,我们可以进入公众号的管理后台,进行基本的设置,比如选择账号类型、填写基本信息等。
接下来,我们需要进行开发者的认证。
这是为了确保我们能够获取到一些高级接口的权限,比如自定义菜单、模板消息等。
完成认证后,我们就可以开始进行公众号的开发了。
开发个人微信公众号主要有两种方式,一种是使用微信提供的开放接口来开发,另一种是使用开发框架来进行开发。
如果选择使用微信提供的开放接口,我们可以通过调用API来实现各种功能,比如获取用户信息、发送消息等。
这种方式相对来说比较灵活,可以根据自己的需求来进行开发,但需要具备一定的编程能力和对微信开放接口的了解。
另外一种方式是使用开发框架,比如使用Python的Flask框架来进行开发。
Flask框架有一些成熟的插件可以供我们使用,比如微信开发工具包,能够简化开发过程,提高开发效率。
同时,Flask框架也相对容易上手,适合新手学习和使用。
在开发过程中,我们需要根据公众号的功能需求进行相应的开发,比如创建自定义菜单、接收用户消息、回复消息等。
可以根据需要来选择合适的接口进行调用,实现相应的功能。
最后,我们需要进行测试和发布。
在开发过程中,可以使用微信提供的测试工具进行调试,确保功能的正确性和稳定性。
当测试通过后,我们就可以将公众号发布上线,供用户使用了。
总的来说,个人微信公众号的开发教程虽然需要一定的技术基础,但是只要按照步骤进行,灵活运用开发工具和框架,就可以顺利完成个人微信公众号的开发,并为自己的个人或企业品牌推广搭建一个强有力的平台。
微信公众号自定义菜单申请与使用问题解答 1、为什么有些订阅号他们有自定义菜单呢?刘子骏回复:有些账号在微信分服务号和订阅号之前就有自定义菜单了,只是微信把他们的自定义菜单功能保留下来而已。
2、我是为了自定义菜单才升级到服务号的,请问有办法突破群发限制吗?刘子骏回复:不可能突破群发限制的。
3、服务号可以降级为订阅号吗?刘子骏回复:不行的。
4、我看到别人的自定义菜单有在线预约、图文投票、在线抽奖等功能,请问如何在官方后台调用这些功能呢?刘子骏回复:他们是通过开发模式接入第三方系统来实现这些功能的,微信官方后台是没有的。
5、自定义菜单可以直接跳转到我指定的网址吗?刘子骏回复:可以的,下面教程有说明的。
6、我如何判断是否需要自定义菜单呢?如何选择服务号和订阅号?刘子骏回复:首先我们了解一下两种帐号的区别,服务号拥有自定义菜单,但是每月只能群发一次。
订阅号没有自定义菜单,但是每日都可以群发一次。
服务号简单来说就是提供客户自助服务的帐号,例如像招商银行、高德地图以提供自助查询功能服务为主的帐号就适合使用服务号。
如果你的帐号是资讯、销售为主的帐号就适合订阅号,例如你是媒体、实体店商家、淘宝店等等就适合使用订阅号。
特别是商家,他们需要经常推送折扣信息和活动信息给客户,如果使用服务号每月只能群发一次,对他们的运营是十分不利的。
上面就是目前大家问得最多的问题,以后我会不断收集更多问题补充进去的,务求让大家可以更深入了解自定义菜单。
下面正式进入教程。
现在在你申请微信公众账号的时候,系统就会提示你选择服务号还是订阅号,只要你选择服务号默认就会开通自定义菜单的。
如果你之前已经开通了微信公众账号,你的账号默认就是订阅号,当然也可以把订阅号升级到服务号来开通自定义菜单的。
具体步骤如下:首先登陆后台后,你会看到右边的系统公告上有一条是“将公众号升级成服务号”的连接,点击进入到以下页面。
选择左边的服务号,然后点击确认按钮。
这时系统就会提示你,如果升级到服务号,每个月只能群发一次,不能每日群发一次了,而且不能改回订阅号。
微信开发——测试号申请,接⼝配置,JS接⼝安全域名,⾃定义菜单1、申请测试账号:先申请公众号后,点击进⼊公从号的管理页⾯;找到“开发者⼯具”,找到“公众平台测试账号”,点击“进⼊”。
2、接⼝配置信息设置必须要外⽹哦,也就是微信服务器要能访问到你填写到url。
Url到内容有讲究,这⾥已tp5为例,页⾯填写的Token要跟控制器的Token⼀致。
设置失败的⼀个重要原因:url的请求相应没有返回echostr这个参数。
<?phpnamespace app\index\controller;define("TOKEN", "mytest");//声明tokenclass Jssdkceshi{public function valid(){//接⼝配置信息修改的时候需要正式上线不需要//$echoStr = $_GET["echostr"];if($this->checkSignature()){//echo $echoStr;exit;}}public function index(){$this->valid();$this->responseMsg();$this->createCaidan();}public function responseMsg(){$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];if (!empty($postStr)){$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);$fromUsername = $postObj->FromUserName;$toUsername = $postObj->ToUserName;$ev = $postObj->Event;//获取事件类型$keyword = trim($postObj->Content);$time = time();$textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content><FuncFlag>0</FuncFlag></xml>";if($ev == "subscribe"){//⽤户第⼀次关注时,⾃动回复消息设置$msgType = "text";$contentStr = "欢迎关注我是微信!";$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);echo$resultStr;}if(!empty( $keyword )){$msgType = "text";$contentStr = "Welcome to wechat world!";$contentStr = "Welcome to wechat world!";$erer=$keyword;$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $erer);echo$resultStr;}else{echo "Input something...";}}else {echo '';exit;}}private function checkSignature(){$signature = $_GET["signature"];$timestamp = $_GET["timestamp"];$nonce = $_GET["nonce"];$token = TOKEN;$tmpArr = array($token, $timestamp, $nonce);sort($tmpArr);$tmpStr = implode( $tmpArr );$tmpStr = sha1( $tmpStr );if( $tmpStr == $signature ){return true;}else{return false;}}public function gettoken(){$appid='wxa0cb62458ce0a153';$secret='21fffd4676ee9abf9fcb0b6f6539fab0';$getTokenUrl="https:///cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$secret;$accessTokenJson=file_get_contents($getTokenUrl);$accessTokenArr=json_decode($accessTokenJson,true);$accessToken=$accessTokenArr['access_token'];return$accessToken;}public function createCaidan(){$access_token=$this->gettoken();$url="https:///cgi-bin/menu/create?access_token=".$access_token;$caidan= ' {"button":[{"type":"click","name":"乐曲欣赏",//⼀级菜单"key":"V1001_TODAY_MUSIC"},{"type":"click","name":"歌⼿简介",//⼀级菜单"key":"V1001_TODAY_SINGER"},{"name":"菜单列表","sub_button":[{"type":"view","name":"搜索",//⼆级菜单"url":"/"},{"type":"view","name":"视频","url":"/"},{"type":"view","name":"友情链接","url":"/"}]}]}';$result = $this->https_request($url,$caidan);print_r($result);}//封装⼀个函数,使⽤curl实现post⽅式的请求//封装⼀个函数,使⽤curl实现post⽅式的请求function https_request($url,$data = null){$curl = curl_init();curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);if (!empty($data)){curl_setopt($curl, CURLOPT_POST, 1);curl_setopt($curl, CURLOPT_POSTFIELDS, $data);}curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);$output = curl_exec($curl);curl_close($curl);return$output;}}>弄好后,在页⾯填写url跟token点击“提交”会有提⽰配置成功。
自定义菜单开发模式详解
一、如何获取凭证(token)
话说微信的接口指南一直做得不咋地,这边鼓励大家都转服务号,这边给的说明文档除了码农真没几个能看明白的,一点也不考虑大量的小白运营者,干脆叫指北算了。
牢骚完毕先说下开发自定义菜单第一步要做的就是获取凭证,即access_token,这步非常重要,微信接下来会开放更多的开发接口,开发者要操作接口都要通过这个access_token,而这个凭证是需要通过接口来生成的,并且是有失效时间的。
生成凭证需要两个第三方的固定ID和秘钥,进入开发模式的页面,已经获取到自定义菜单接口权限的朋友会看到下图:
除了原来接口通讯url和自己设置的token多了两个新字段即Appid和AppSecret,也就是第三方的固定ID和秘钥,有了这个就能通过接口程序获取到临时的凭证。
将这两个id放到代码如下图位置:
这段代码主要是初始化了memcache和curl类,分别是缓存和抓取用的,同时将ID和秘钥也赋值了。
接下来就是通过接口获取token,代码如下图:
这是一个获取接口的函数,函数运行时首先是监测缓存中是否已经有token,如果有则直接从缓存中取,要知道官方限制每天只能获取100次token,所以做个
缓存很有必要。
如果缓存中没有token或者缓存时间过期,那么就使用curl这个类发送Appid 和AppSecret到接口获取token,curl_setopt是定义抓取属性的,curl_exec是运行抓取,想了解相关的可以百度一下。
获取的到是一个json格式数据,使用json_decode转化为数组,然后判断是否获取到,如果没有则输出错误信息,获取成功则将该token保存到缓存中,同时函数返回token退出。
这样我们就很方便的拿到了凭证。
二、自定义菜单创建、查询和删除
拿到access_token以后我们就可以开始进行自定义菜单操作了,首先是创建自定义菜单,官方说明很简单“通过POST一个特定结构体,实现在微信客户端创建自定义菜单。
”然后有一个特定结构体的示例,如下图:
还有一些关于这个特定结构体字段的说明:
参数是否必须说明
button 是按钮数组,按钮个数应为2~3个
sub_button 否子按钮数组,按钮个数应为2~5个
type 是按钮类型,目前有click类型
name 是按钮描述,既按钮名字,不超过16个字节,子菜单不超过40个字节key 类型为click必须按钮KEY值,用于消息接口(event类型)推送,不超过128字节
我估计有不少朋友会看的头晕,一是这个特定结构体传输过去时应该赋值给那个
变量?二是这个结构体如何生成?首先传输过去不需要任何变量参数,其次这就
是一个json格式数据,我们可以用数组来转换生成。
创建菜单的函数非常简单,如下图:
在这里curl抓取页面的方式不是get而是post,所以属性会有所不同,但是主
要是接口地址和发送的特定结构体,这里的特定结构体是外面传递进来的值,变
量名为$menu。
主要来看下我做的简易版的菜单生成器,直接在浏览器里打开make_menu.php
就可以看到如下图(注意修改下代码里的Appid和AppSecret):
本来想做些JS效果的,但是这个菜单结构本来就很简单,就不多事了,上图三个区块分别对应三个底栏的主菜单,每个区块都有主菜单名、关键字和子菜单。
在说上面的菜单前先讲下自定义菜单的规则,无论是主菜单还是子菜单目前都是由最多三个属性组成的,即名称、关键字、类型(目前只有click,进行点击操作时会将关键字发送给微信后台),其中主菜单如果有子菜单的话,属性就两个,即名称、子菜单(点击操作时显示子菜单)。
如上所述我设计的这个简易版生成器忽略了类型选择,如果主菜单有子菜单时主菜单关键字其实是不记录的,子菜单没什么可变化的就两个属性名称和关键字,类型默认为click。
当然未来会有新的菜单类型出来,比如地理位置,在这个基础改动下也非常方便就能使用。
下面详细说下这个菜单的输入框要填写什么。
主菜单名称:底栏显示的名字,建议4-5个中文字或者8-10个英文字符,否则会名称显示会出现省略号;
主菜单关键字:主菜单向后台发送的关键字,如果该菜单有子菜单则关键字失效。
子菜单:子菜单我使用了textarea,每个子菜单格式为“菜单名,关键字”,用换行来区分多个子菜单项。
表单提交后程序将进行处理,如图:
进行三次循环,每次都会读取一个区块的菜单,如果该区块主菜单名称不为空,
则判断是否有子菜单,没有子菜单则直接生成主菜单,否则读取子菜单,同时判断子菜单是否超过5个。
这里使用urlencode是因为中文在数组转json时会被编码为unicode,微信接口无法识别,所以得在json_encode前先来个编码,等转换后再用urldecode转回来,这样传输给接口的就是正常的中文了。
另外特定结构体的数组结构其实是[button]-》[main_menu]-》[sub_menu],所以三个主菜单最后是赋值给button这个数组的一个元素。
当特定结构体生成后分别执行新建make_menu类,删除旧菜单,创建新菜单,即:
$mk_menu=new make_menu();
$mk_menu->del_menu();
$mk_menu->create_new_menu($menu);
查询、删除菜单的代码非常简单大家可以自己看,分别是get_menu()和del_menu()两个函数。
三、接收自定义菜单关键字
自定义菜单生成后最重要的还是要和用户互动,那么如何进行互动呢?首先要理解自定义菜单到底是个什么玩意,其实点击菜单跟向微信公众平台发送一个文字是一样的,也就是用户输入文字公众平台自动回复可以做的事情理论上自定义菜单都可以完成!
但是有一点不同的是,用户输入文字时我们接收的消息类型是文字消息,但是自定义菜单的消息是事件推送,也就是它的类型是event,如果有看过我之前教程的朋友应该知道,可以通过这个类型的两个事件subscribe和unsubscribe来统计关注和取消关注的人数,菜单点击则是第三个类型“CLICK”。
也就是当后台捕捉到“CLICK”这个操作时就表示这是用户点击了自定义菜单,然后可以获取到EventKey(事件关键字),就是在创建菜单时设置的菜单关键字,后面的就不用我再详细说了吧。
以下是一些代码截图,可供参考:
先获取消息类型为事件推送,然后监测到事件类型是自定义菜单点击,然后获取该菜单关键字。
回复文字消息
回复音乐消息
回复图文消息。