微信公众平台自定义菜单
最近微信公众平台挺火的,肯定好多公司像我们公司一样,要开发微信公众平台,在此记录一下在制作 自定义菜单时遇到的问题,
希望能给某些人点思路,或少走点弯路.
为了动态修改自定义菜单,把菜单项存入数据库中 $arr是从数据库查询出来的经过处理后的数组格式为:
array(1) { ["button"] => array(3) { [0] => array(3) { ["type"] => string(4) "view" ["name"] => string(12) "公司新闻" ["url"] => string(24) "http://www.google.com.tw" } [1] => array(3) { ["type"] => string(4) "view" ["name"] => string(12) "公司案例" ["url"] => string(20) "http://www.baidu.com" } [2] => array(2) { ["name"] => string(12) "智能家居" ["sub_button"] => array(5) { [0] => array(3) { ["type"] => string(5) "click" ["name"] => string(12) "功能描述" ["key"] => string(10) "smart_desc" } [1] => array(3) { ["type"] => string(5) "click" ["name"] => string(12) "每日一点" ["key"] => string(9) "day_click" } [2] => array(3) { ["type"] => string(5) "click" ["name"] => string(12) "一天一点" ["key"] => string(13) "eve_day_click" } [3] => array(3) { ["type"] => string(5) "click" ["name"] => string(12) "休闲时刻" ["key"] => string(11) "xiuxian_day" } [4] => array(3) { ["type"] => string(5) "click" ["name"] => string(12) "做人好难" ["key"] => string(3) "nan" } } } } }
在添加菜单的时候发现直接json_encode($arr);会提示40016错误:不合法的按钮个数
在调用了json_encode函数之后所有中文被转换成 "\u8fd9" 这种形式,
为了使用json_encode处理后的结构而不改变中文可以使用如下函数(来源于互联网):
/************************************************************** * * 使用特定function对数组中所有元素做处理 * @param string &$array 要处理的字符串 * @param string $function 要执行的函数 * @return boolean $apply_to_keys_also 是否也应用到key上 * @access public * *************************************************************/ function arrayRecursive(&$array, $function, $apply_to_keys_also = false) { static $recursive_counter = 0; if (++$recursive_counter > 1000) { die('possible deep recursion attack'); } foreach ($array as $key => $value) { if (is_array($value)) { self::arrayRecursive($array[$key], $function, $apply_to_keys_also); } else { $array[$key] = $function($value); } if ($apply_to_keys_also && is_string($key)) { $new_key = $function($key); if ($new_key != $key) { $array[$new_key] = $array[$key]; unset($array[$key]); } } } $recursive_counter--; } /************************************************************** * * 将数组转换为JSON字符串(兼容中文) * @param array $array 要转换的数组 * @return string 转换得到的json字符串 * @access public * *************************************************************/ function JSON($array) { self::arrayRecursive($array, 'urlencode', true); $json = json_encode($array); return urldecode($json); }
执行添加:
function apply(){ $token_str = self::get_access_token(); $del_url = "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token={$token_str}"; file_get_contents($del_url); $apply_url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token={$token_str}"; $data = self::JSON(self::get_menu());//json化中文不变 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $apply_url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_AUTOREFERER, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); curl_close($ch); $result = json_decode($result,true); $this->redirect("Menu/index",array( 'msg'=>($result['errcode']==0?'操作成功':'操作失败'), 'state'=>$result['errcode']==0 ? 0 : 1 )); }
OK添加成功 ^_^ ,仅供参考
当然代码过多发到首页肯定是过不了的,不过为了让更多人看到还是厚着脸色发布到首页(不知道能在首页呆几分钟~

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



This article provides a detailed guide to safe download of Ouyi OKX App in China. Due to restrictions on domestic app stores, users are advised to download the App through the official website of Ouyi OKX, or use the QR code provided by the official website to scan and download. During the download process, be sure to verify the official website address, check the application permissions, perform a security scan after installation, and enable two-factor verification. During use, please abide by local laws and regulations, use a safe network environment, protect account security, be vigilant against fraud, and invest rationally. This article is for reference only and does not constitute investment advice. Digital asset transactions are at your own risk.

H5. The main difference between mini programs and APP is: technical architecture: H5 is based on web technology, and mini programs and APP are independent applications. Experience and functions: H5 is light and easy to use, with limited functions; mini programs are lightweight and have good interactiveness; APPs are powerful and have smooth experience. Compatibility: H5 is cross-platform compatible, applets and APPs are restricted by the platform. Development cost: H5 has low development cost, medium mini programs, and highest APP. Applicable scenarios: H5 is suitable for information display, applets are suitable for lightweight applications, and APPs are suitable for complex functions.

Gateio Exchange app download channels for old versions, covering official, third-party application markets, forum communities and other channels. It also provides download precautions to help you easily obtain old versions and solve the problems of discomfort in using new versions or device compatibility.

Compatibility issues and troubleshooting methods for company security software and application. Many companies will install security software in order to ensure intranet security. However, security software sometimes...

The choice of H5 and applet depends on the requirements. For applications with cross-platform, rapid development and high scalability, choose H5; for applications with native experience, rich functions and platform dependencies, choose applets.

H5 is more flexible and customizable, but requires skilled technology; mini programs are quick to get started and easy to maintain, but are limited by the WeChat framework.

This article provides a brief guide to buying and selling of Binance virtual currency updated in 2025, and explains in detail the operation steps of virtual currency transactions on the Binance platform. The guide covers fiat currency purchase USDT, currency transaction purchase of other currencies (such as BTC), and selling operations, including market trading and limit trading. In addition, the guide also specifically reminds key risks such as payment security and network selection for fiat currency transactions, helping users to conduct Binance transactions safely and efficiently. Through this article, you can quickly master the skills of buying and selling virtual currencies on the Binance platform and reduce transaction risks.

Lianyungang Huaguoshan Scenic Area joins hands with Tencent Cloud to launch the first "dual-core brain" Digital Homo sapiens in the cultural and tourism industry - Monkey King! On March 1, the scenic spot officially connected the Monkey King to the DeepSeek platform, so that it has the two AI model capabilities of Tencent Hunyuan and DeepSeek, bringing tourists a smarter and more considerate service experience. Huaguoshan Scenic Area has previously launched the Monkey King of the Digital Homo sapiens based on Tencent Hunyuan model. This time, Tencent Cloud further utilizes technologies such as the big model knowledge engine to connect it to DeepSeek to achieve a "dual-core" upgrade. This makes the Monkey King's interactive ability to a higher level, faster response speed, stronger understanding ability, and more warmth. Monkey King has strong natural language processing capabilities and can understand various ways of asking questions from tourists.
