LaneWeChat

PHP微信开发框架,高效开发微信公众号应用。简洁而又轻量

GitHub下载 查看手册

自定义菜单

Visits: 25530 Date: 2014-08-20 17:30:08 Power By 李轩Lane

    

1、类简介:添加自定义菜单。最多可以有三个一级菜单,每个一级菜单最多可以有五个菜单。一级菜单最多4个汉字,二级菜单最多7个汉字。创建自定义菜单后,由于微信客户端缓存,需要24小时微信客户端才会展现出来。建议测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果。


        警告:设置菜单Menu::setMenu($menuList)参数结构和返回值重写,自1.4版本起不向下兼容。


        注意:所有新增的菜单类型(除了click类型和view类型),仅支持微信iPhone5.4.1以上版本,和Android5.4以上版本的微信用户,旧版本微信用户点击后将没有回应,开发者也不能正常接收到事件推送。


        摘自微信官方网站:目前自定义菜单接口可实现两种类型按钮,如下:


            click:

                用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event的结构给开发者,并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互;


            view:

                用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的url值(即网页链接),达到打开网页的目的,建议与网页授权获取用户基本信息接口结合,获得用户的登入个人信息。


            总结一下哦,就是微信的菜单分两种,一种是view型,就是你设置一个网址,点了这个菜单之后就跳到你设置的网址去了。另一种就是click型,你设置一个key,然后用户点击的时候会通过本框架唯一入口wechat.php发送一个消息类型为event的请求,在wechatrequest.lib.php文件下的eventClick方法中可以使用。


            1、新增“scancode_push:扫码推事件”类型菜单

                用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后显示扫描结果(如果是URL,将进入URL),且会将扫码的结果传给开发者,开发者可以下发消息。


            2、新增“scancode_waitmsg:扫码推事件且弹出‘消息接收中’提示框”类型菜单

                用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后,将扫码的结果传给开发者,同时收起扫一扫工具,然后弹出“消息接收中”提示框,随后可能会收到开发者下发的消息。


            3、新增“pic_sysphoto:弹出系统拍照发图”类型菜单

                用户点击按钮后,微信客户端将调起系统相机,完成拍照操作后,会将拍摄的相片发送给开发者,并推送事件给开发者,同时收起系统相机,随后可能会收到开发者下发的消息。


            4、新增“pic_photo_or_album:弹出拍照或者相册发图”类型菜单

                用户点击按钮后,微信客户端将弹出选择器供用户选择“拍照”或者“从手机相册选择”。用户选择后即走其他两种流程。


            5、新增“pic_weixin:弹出微信相册发图器”类型菜单

                用户点击按钮后,微信客户端将调起微信相册,完成选择操作后,将选择的相片发送给开发者的服务器,并推送事件给开发者,同时收起相册,随后可能会收到开发者下发的消息。


            6、新增“location_select:弹出地理位置选择器”类型菜单

                用户点击按钮后,微信客户端将调起地理位置选择工具,完成选择操作后,将选择的地理位置发送给开发者的服务器,同时收起位置选择工具,随后可能会收到开发者下发的消息。


            7、新增了以上6种菜单类型、view(点击跳转链接)的菜单类型的被动响应的支持。默认讲点击菜单的事件推送数据发送文本消息返回给用户。开发者请自行修改。


        2、使用命名空间:use LaneWeChat\Core\Menu;


        3、设置菜单:是所有的菜单数据全部发送一次,可不是每新增一个只发一个菜单。

            Menu::setMenu($menuList);

            $menuLis 是菜单列表,结构如下:

            $menuList = array(

                array('id'=>'1', 'pid'=>'0', 'name'=>'顶级分类一', 'type'=>'', 'code'=>''),

                array('id'=>'2', 'pid'=>'1', 'name'=>'分类一子分类一', 'type'=>'click', 'code'=>'lane_wechat_menu_1_1'),

                array('id'=>'3', 'pid'=>'1', 'name'=>'分类一子分类二', 'type'=>'1', 'code'=>'http://www.lanecn.com'),

                array('id'=>'4', 'pid'=>'0', 'name'=>'顶级分类二', 'type'=>'1', 'code'=>'http://www.php.net/'),

                array('id'=>'5', 'pid'=>'0', 'name'=>'顶级分类三', 'type'=>'2', 'code'=>'lane_wechat_menu_3'),

            );

            'id'是您的系统中对分类的唯一编号;

            'pid'是该分类的上级分类,顶级分类则填写0;

            'name'是分类名称;

            'type'是菜单类型,如果该分类下有子分类请务必留空;

                'type'的值从以下类型中选择:click、view、scancode_push、scancode_waitmsg、pic_sysphoto、pic_photo_or_album、pic_weixin、location_select。

            'code'是view类型的URL或者其他类型的自定义key,如果该分类下有子分类请务必留空。


        4、获取微信菜单:获取到的是已经设置过的菜单列表,格式为Json,是微信服务器返回的原始数据。

            Menu::getMenu();


        5、删除微信菜单:将会删除设置过的所有菜单(一键清空)。

            Menu::delMenu();


Reply: xiong On 2015-05-17 21:22:47

eventView方法无效,eventClick正常

回复

Reply: Lane On 2015-06-16 10:09:52

View是填写url。点击跳转的。实例:http://lanewechat.lanecn.com/doc/main/aid-25

回复

Reply: 李道元 On 2016-02-27 11:01:09

我设置菜单,设置了一个url地址,能够跳转过去,但是 点击菜单跳转链接时的事件推送,一直进不去呢,还望楼主不吝赐教!

回复

Reply: bbs On 2015-06-07 21:40:41

请问一下,如何在微信上面显示菜单?我在项目目录下建立一个index.php文件,代码如下: include 'wechatapi/lanewechat.php'; $menuList = array( array('id'=>'1', 'pid'=>'0', 'name'=>'菜单1', 'type'=>'', 'code'=>''), array('id'=>'2', 'pid'=>'0', 'name'=>'菜单2', 'type'=>'', 'code'=>''), ); $result = \LaneWeChat\Core\Menu::setMenu($menuList); echo $result; 为什么微信上面不显示菜单呢?好像执行不到我这个index.php文件一样。

回复

Reply: Lane On 2015-06-16 10:35:57

你要手动去执行啊。微信肯定不会主动过来跑你这个文件

回复

Reply: arvinzhao On 2015-06-15 17:31:27

怎么自定义菜单啊,,是在唯一入口文件中调用menu类吗,,config为何要有一个include

回复

Reply: Lane On 2015-06-16 10:34:38

你把http://lanewechat.lanecn.com/doc/main/aid-25这里面代码复制过去,试试就明白了

回复

Reply: luis On 2015-09-23 15:25:21

是不是把创建菜单写在唯一的入口文件中啊?

回复

Reply: aaron On 2015-09-19 23:05:38

hi,我想问下点击自定义菜单回复文本消息和图文消息分别怎么写,我不太懂,麻烦赐教

回复

Reply: jianhua On 2015-11-06 16:59:49

菜单里面写中文的话微信接口会报错,如果将所有中文换成原文的话,工作正常。 下面是仅仅显示一个中文的报错,发现是"常规" 最后post的时候没有变成 %34%78之类。 是我这边的配置问题么? 谢谢指导。 string(612) "{"button":[{"name":"常规","sub_button":[{"name":"BB","type":"click","key":"key_2"},{"name":"CC","type":"view","url":"http://www.lanecn.com"},{"name":"MM","type":"location_select","key":"key_11","sub_button":[]}]},{"name":"DD","sub_button":[{"name":"EE","type":"scancode_waitmsg","key":"key_5","sub_button":[]},{"name":"FF","type":"scancode_push","key":"key_6","sub_button":[]}]},{"name":"GG","sub_button":[{"name":"HH","type":"pic_sysphoto","key":"key_8","sub_button":[]},{"name":"JJ","type":"pic_photo_or_album","key":"key_9","sub_button":[]},{"name":"KK","type":"pic_weixin","key":"key_10","sub_button":[]}]}]}" ---------------------- array(2) { ["errcode"]=> int(-1) ["errmsg"]=> string(35) "system error hint: [8KIxia0143vr19]" }

回复

Add Comment
©2014~time() lanewechat.lanecn.com , All rights reserved. Power By LaneWeChat 微信PHP开发框架.  京ICP备14005030号-1