课程中心 问答&分享 读书 注册、登录 关闭菜单
《微信公众号开发权威教程》
目录
第一章 课程介绍及环境部署 课程介绍及环境部署 第二章 开发者模式接入及消息回复 2.1 开发者模式接入 2.2 接收客户消息及openId 2.3 回复文本消息 2.4 回复图文消息 2.5 封装slog函数记录接口信息 第三章 获取接口调用凭据 3.1 基础知识 - curl 3.2 获取access token 3.3 获取微信服务器IP地址 第四章 接收事件推送 4.1 关注/取消关注事件 4.2 上报地理位置事件 第五章 菜单创建及菜单点击事件 5.1 接口形式创建自定义菜单 5.2 自定义菜单点击事件的识别 第六章 微信网页开发 6.1 微信网页授权-微信登录 6.2 微信JS-SDK介绍 6.3 微信JS-SDK部署 6.4 分享接口的实现 6.5 图片接口 6.6 音频接口 第七章 素材管理 7.1 新增临时素材 7.2 获取临时素材 7.3 新增永久素材 7.4 获取素材列表及素材总数 7.5 删除永久素材 第八章 微信盖楼游戏 8.1 盖楼游戏原理 8.2 盖楼游戏源码 第九章 天气查询 9.1 百度免费天气API介绍 9.2 微信公众号天气查询开发
5.1 接口形式创建自定义菜单

自定义菜单能够帮助公众号丰富界面,让用户更好更快地理解公众号的功能。开启自定义菜单后,公众号界面如图所示:



请注意

1、自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。
2、一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“...”代替。
3、创建自定义菜单后,菜单的刷新策略是,在用户进入公众号会话页或公众号profile页时,
如果发现上一次拉取菜单的请求在5分钟以前,就会拉取一下菜单,如果菜单有更新,就会刷新客户端的菜单。
测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果。


自定义菜单接口可实现多种类型按钮,如下:

1、click:点击推事件用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event的结构给开发者(参考消息接口指南),
并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互;
2、view:跳转URL用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的网页URL,
可与网页授权获取用户基本信息接口结合,获得用户基本信息。
3、scancode_push:扫码推事件用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后显示扫描结果(如果是URL,将进入URL),
且会将扫码的结果传给开发者,开发者可以下发消息。
4、scancode_waitmsg:扫码推事件且弹出“消息接收中”提示框用户点击按钮后,微信客户端将调起扫一扫工具,
完成扫码操作后,将扫码的结果传给开发者,同时收起扫一扫工具,然后弹出“消息接收中”提示框,随后可能会收到开发者下发的消息。
5、pic_sysphoto:弹出系统拍照发图用户点击按钮后,微信客户端将调起系统相机,完成拍照操作后,
会将拍摄的相片发送给开发者,并推送事件给开发者,同时收起系统相机,随后可能会收到开发者下发的消息。
6、pic_photo_or_album:弹出拍照或者相册发图用户点击按钮后,微信客户端将弹出选择器供用户选择“拍照”或者“从手机相册选择”。用户选择后即走其他两种流程。
7、pic_weixin:弹出微信相册发图器用户点击按钮后,微信客户端将调起微信相册,完成选择操作后,
将选择的相片发送给开发者的服务器,并推送事件给开发者,同时收起相册,随后可能会收到开发者下发的消息。
8、location_select:弹出地理位置选择器用户点击按钮后,微信客户端将调起地理位置选择工具,完成选择操作后,
将选择的地理位置发送给开发者的服务器,同时收起位置选择工具,随后可能会收到开发者下发的消息。
9、media_id:下发消息(除文本消息)用户点击media_id类型按钮后,微信服务器会将开发者填写的永久素材id对应的素材下发给用户,
永久素材类型可以是图片、音频、视频、图文消息。请注意:永久素材id必须是在“素材管理/新增永久素材”接口上传后获得的合法id。
10、view_limited:跳转图文消息URL用户点击view_limited类型按钮后,微信客户端将打开开发者在按钮中填写的永久素材id对应的图文消息URL,
永久素材类型只支持图文消息。请注意:永久素材id必须是在“素材管理/新增永久素材”接口上传后获得的合法id。

请注意,3到8的所有事件,仅支持微信iPhone5.4.1以上版本,和Android5.4以上版本的微信用户,旧版本微信用户点击后将没有回应,开发者也不能正常接收到事件推送。9和10,是专门给第三方平台旗下未微信认证(具体而言,是资质认证未通过)的订阅号准备的事件类型,它们是没有事件推送的,能力相对受限,其他类型的公众号不必使用。


接口调用请求

http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN


click和view的请求示例

{
     "button":[
     {	
          "type":"click",
          "name":"今日歌曲",
          "key":"V1001_TODAY_MUSIC"
      },
      {
           "name":"菜单",
           "sub_button":[
           {	
               "type":"view",
               "name":"搜索",
               "url":"http://www.soso.com/"
            },
            {
               "type":"view",
               "name":"视频",
               "url":"http://v.qq.com/"
            },
            {
               "type":"click",
               "name":"赞一下我们",
               "key":"V1001_GOOD"
            }]
       }]
 }

其他新增按钮类型的请求示例

{
    "button": [
        {
            "name": "扫码", 
            "sub_button": [
                {
                    "type": "scancode_waitmsg", 
                    "name": "扫码带提示", 
                    "key": "rselfmenu_0_0", 
                    "sub_button": [ ]
                }, 
                {
                    "type": "scancode_push", 
                    "name": "扫码推事件", 
                    "key": "rselfmenu_0_1", 
                    "sub_button": [ ]
                }
            ]
        }, 
        {
            "name": "发图", 
            "sub_button": [
                {
                    "type": "pic_sysphoto", 
                    "name": "系统拍照发图", 
                    "key": "rselfmenu_1_0", 
                   "sub_button": [ ]
                 }, 
                {
                    "type": "pic_photo_or_album", 
                    "name": "拍照或者相册发图", 
                    "key": "rselfmenu_1_1", 
                    "sub_button": [ ]
                }, 
                {
                    "type": "pic_weixin", 
                    "name": "微信相册发图", 
                    "key": "rselfmenu_1_2", 
                    "sub_button": [ ]
                }
            ]
        }, 
        {
            "name": "发送位置", 
            "type": "location_select", 
            "key": "rselfmenu_2_0"
        },
        {
           "type": "media_id", 
           "name": "图片", 
           "media_id": "MEDIA_ID1"
        }, 
        {
           "type": "view_limited", 
           "name": "图文消息", 
           "media_id": "MEDIA_ID2"
        }
    ]
}



返回结果

正确时的返回JSON数据包如下:{"errcode":0,"errmsg":"ok"}
错误时的返回JSON数据包如下(示例为无效菜单名长度):{"errcode":40018,"errmsg":"invalid button name size"}


函数封装

public function createMenus(){
    $this->getAccessToken();
    $url = 'https://api.weixin.qq.com/cgi-bin/menu/create?access_token='.$this->accessToken;
    $menuDate = file_get_contents('menu.txt');
    $res = $this->curlPost($url, $menuDate);
    echo $res;
}

说明:

1、获取accessToken

2、组合url

3、创建一个 'menu.txt'(格式参考 菜单结构)

{
	"button":
	[
		{	
			"type":"click",
			"name":"php",
			"key":"KEY01"
		},
		{
			"name":"html",
			"sub_button":
			[
				{	
	               "type":"view",
	               "name":"网易",
	               "url":"http://www.163.com/"
				},
	            {
	               "type":"view",
	               "name":"腾讯",
	               "url":"http://www.qq.com/"
	            }
            ]
       },
       {
       		"type":"view",
			"name":"关于",
			"url":"http://www.hcoder.net/"
       }
	]
 }

4、使用curl post 方式 和微信服务器进行交互。

5、成功后返回 {"errcode":0,"errmsg":"ok"}


调用函数

<?php
$wechatObj = new weChat();
if(isset($_GET['cm'])){$wechatObj->createMenus();}

浏览器中访问 http://yourhost/wx.php?cm=1即可执行。

CopyRight © 2011 - 2016 Hcoder.net 陕ICP备14004669号-2
客服QQ : 1265928288