微信自定义菜单需用PHP数组严格按三级结构构造:一级菜单以button为键,含name及type/key或sub_button;二级菜单置于sub_button下,类型包括click、view、miniprogram;中文须UTF-8编码并使用JSON_UNESCAPED_UNICODE选项。

如果您正在使用 PHP 为微信公众号配置自定义菜单,需通过 HTTP POST 请求向微信服务器提交符合规范的 JSON 格式数据,而该 JSON 数据通常由 PHP 数组构造并编码生成。以下是构建合法微信菜单数组的具体方式与关键结构说明:
微信自定义菜单分为一级菜单(最多3个)、二级菜单(每个一级菜单下最多5个)和按钮类型(如 click、view、miniprogram 等)。PHP 数组必须严格对应微信官方要求的字段层级与命名,否则调用接口将返回 invalid button type 或 missing required field 错误。
1、一级菜单使用 button 键作为根级数组键名,其值为包含多个子数组的索引数组。
2、每个一级菜单子数组必须包含 name 字段(菜单显示名称,UTF-8 编码,长度不超过16字)。
立即学习“PHP免费学习笔记(深入)”;
3、若该一级菜单下无二级菜单,则需包含 type 和 key(或 url)字段;若有二级菜单,则必须使用 sub_button 键,其值为二维索引数组。
适用于用户点击后触发事件推送(如接收 event 类型消息),需绑定有效的自定义菜单 key 值,该 key 将在微信服务器推送时原样返回。
1、定义顶层数组,键名为 button,值为包含三个一级菜单的索引数组。
2、第一个一级菜单子数组设置 name 为 "最新动态",type 为 "click",key 为 "V1001_TODAY_MUSIC"。
3、第二个一级菜单子数组设置 name 为 "产品中心",type 为 "click",key 为 "V1001_PRODUCTS"。
4、第三个一级菜单子数组设置 name 为 "联系我们",type 为 "click",key 为 "V1001_CONTACT"。
当某一级菜单需展开子项时,必须使用 sub_button 键替代 type 和 key,且其子项不允许再嵌套 sub_button,即最多两级。
1、第一个一级菜单子数组设置 name 为 "服务支持",不设 type,改设 sub_button 键。
2、sub_button 的值为索引数组,其中第一项设置 type 为 "click",name 为 "常见问题",key 为 "FAQ"。
3、第二项设置 type 为 "view",name 为 "在线客服",url 为 "https://example.com/chat"。
4、第三项设置 type 为 "miniprogram",name 为 "小程序入口",url 为 "https://example.com/mp",appid 为 "wx1234567890abcdef",pagepath 为 "pages/index/index"。
PHP 数组转 JSON 时默认对 Unicode 字符进行转义(如 \u6700\u65b0),而微信服务器接受原始 UTF-8 字节流,因此必须禁用 JSON_UNESCAPED_UNICODE 选项以避免乱码或解析失败。
1、使用 json_encode($menuArray, JSON_UNESCAPED_UNICODE) 对菜单数组编码,确保中文名称正常传输。
2、检查数组中所有字符串值是否为 UTF-8 编码,非 UTF-8 字符串(如 GBK)需先经 mb_convert_encoding($str, 'UTF-8', 'GBK') 转换。
3、确认数组中不存在空值、null 或未定义键,微信接口会拒绝包含 null 的字段。
在发送请求前,可通过本地打印或日志输出 json_encode 后的字符串,并对照微信官方文档中的 JSON 示例逐字段比对,重点校验键名拼写、嵌套层级及必填字段是否存在。
1、使用 var_dump($menuArray) 查看 PHP 数组实际结构,确认 button 是顶层键且为索引数组。
2、执行 echo json_encode($menuArray, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) 输出格式化 JSON,人工核对 name、type、key、url、sub_button 是否位置正确。
3、将输出的 JSON 字符串粘贴至在线 JSON 校验工具(如 jsonlint.com),确认语法有效且无多余逗号或引号错误。
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号