公众号自定义菜单开发
发表时间:2026-9-9
发布人:葵宇科技
浏览次数:1
自定义菜单开发?
本章将介绍微信公众号自定义菜单的创建、管理和高级应用,帮助您为用户提供更便捷的操作体验。
自定义菜单简介?
自定义菜单是微信公众号的重要功能,它位于公众号聊天窗口的底部,用户可以通过点击菜单快速访问公众号的核心功能。合理设计的自定义菜单可以大幅提升用户体验和公众号的使用率。
菜单类型?
微信公众号支持以下几种菜单类型:
- 点击菜单(click):用户点击后,微信服务器会通过事件推送消息给开发者
- 跳转网页菜单(view):用户点击后,会跳转到指定的网页URL
- 扫码菜单(scancode_push/scancode_waitmsg):用户点击后,微信客户端将调起扫一扫工具
- 系统拍照菜单(pic_sysphoto):用户点击后,微信客户端将调起系统相机
- 相册选择菜单(pic_photo_or_album):用户点击后,微信客户端将调起系统相机或相册
- 微信相册菜单(pic_weixin):用户点击后,微信客户端将调起微信相册
- 地理位置菜单(location_select):用户点击后,微信客户端将调起地理位置选择工具
- 小程序菜单(miniprogram):用户点击后,将打开指定的小程序(仅服务号可用)
菜单限制?
自定义菜单有以下限制:
- 最多3个一级菜单
- 每个一级菜单下最多5个二级菜单
- 一级菜单最多4个汉字,二级菜单最多7个汉字
- 菜单创建后,24小时内生效
- 未认证的订阅号只能使用click和view类型的菜单
- 认证后的服务号可以使用全部类型的菜单
创建自定义菜单?
通过微信公众平台创建?
最简单的方式是通过微信公众平台的图形界面创建:
- 登录微信公众平台
- 进入"自定义菜单"
- 点击"+"添加菜单
- 设置菜单名称和响应动作
- 点击"保存并发布"
通过API创建?
对于需要动态管理菜单的场景,可以使用API接口创建自定义菜单。
创建菜单(PHP示例)?
php
<?php function createMenu($accessToken, $menuData) { $url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token={$accessToken}"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($menuData, JSON_UNESCAPED_UNICODE)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); $result = curl_exec($ch); curl_close($ch); return json_decode($result, true); } // 使用示例 $accessToken = 'your_access_token'; $menuData = array( 'button' => array( array( 'name' => '公司介绍', 'sub_button' => array( array( 'type' => 'view', 'name' => '关于我们', 'url' => 'https://www.example.com/about' ), array( 'type' => 'view', 'name' => '联系我们', 'url' => 'https://www.example.com/contact' ) ) ), array( 'name' => '产品服务', 'sub_button' => array( array( 'type' => 'view', 'name' => '产品介绍', 'url' => 'https://www.example.com/products' ), array( 'type' => 'click', 'name' => '最新优惠', 'key' => 'MENU_PROMOTION' ) ) ), array( 'type' => 'click', 'name' => '每日签到', 'key' => 'MENU_DAILY_CHECKIN' ) ) ); $result = createMenu($accessToken, $menuData); print_r($result); // 返回结果示例: // Array ( // [errcode] => 0 // [errmsg] => ok // )创建菜单(Node.js示例)?
javascript
const axios = require('axios'); async function createMenu(accessToken, menuData) { const url = `https://api.weixin.qq.com/cgi-bin/menu/create?access_token=${accessToken}`; try { const response = await axios.post(url, menuData); return response.data; } catch (error) { console.error('创建菜单出错:', error); return { errcode: -1, errmsg: error.message }; } } // 使用示例 const accessToken = 'your_access_token'; const menuData = { button: [ { name: '公司介绍', sub_button: [ { type: 'view', name: '关于我们', url: 'https://www.example.com/about' }, { type: 'view', name: '联系我们', url: 'https://www.example.com/contact' } ] }, { name: '产品服务', sub_button: [ { type: 'view', name: '产品介绍', url: 'https://www.example.com/products' }, { type: 'click', name: '最新优惠', key: 'MENU_PROMOTION' } ] }, { type: 'click', name: '每日签到', key: 'MENU_DAILY_CHECKIN' } ] 







