- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
微信自定义单开发教程
自定义菜单开发模式详解
一、如何获取凭证(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是因为中文
文档评论(0)