不多说,上代码。有几个要注意的(这段代码是我从我的系统里剥出来的。写了很久了,只是最近有人一直在问,我想,这也不是什么特别的代码,还是开源吧。)
1、请求微信菜单需要token,所以要事先生成。这个token其实可以用不少时间的,看官方接口(token调用生成,每天是有次数的,所以节约着用,能存本地就存本地吧,记录下过期时间即可)
2、子菜单的数组顺序就是微信的子菜单:从上至下的顺序 。这个不要搞错
3、子菜单是有数量限制的
4、主菜单是有字数限制的。不能超过4个中文字。
上代码吧:
PHP代码
- <?php
- /**
- * @category menu.php
- * @author gouki <gouki.xiao@gmail.com>
- * @created 2013-10-16 15:14
- * @since
- */
- $menudata = array(
- 'button' => array(
- array(
- 'name' => '菜单一',
- 'sub_button' => array(
- array(
- 'type' => 'click',
- 'name' => '最上方子菜单1',
- 'key' => 'R:4:1',
- ),
- array(
- 'type' => 'click',
- 'name' => '下方菜单',
- 'key' => 'R:3:1',
- ),
- )
- ),
- array(
- 'name' => '菜单2',
- 'sub_button' => array(
- array(
- 'type' => 'click',
- 'name' => '第一个',
- 'key' => 'R:2:1',
- ),
- array(
- 'type' => 'click',
- 'name' => '第二个',
- 'key' => 'R:8:1',
- ),
- array(
- 'type' => 'click',
- 'name' => '第三个',
- 'key' => 'R:9:1',
- ),
- array(
- 'type' => 'click',
- 'name' => '第四个',
- 'key' => 'R:10:1',
- ),
- )
- ),
- array(
- 'type' => 'click',
- 'name' => '菜单3',
- 'key' => 'M:7',
- ),
- )
- );
- $menujson = json_encode($menudata, JSON_UNESCAPED_UNICODE);
- define('APPKEY', ''); //这里是APPKEY
- define('SECRET', ''); //SECRET ....
- $getTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s";
- $getTokenUrl = sprintf($getTokenUrl, APPKEY, SECRET);
- $result = json_decode(file_get_contents($getTokenUrl), true);
- $token = '';
- if (isset($result['access_token'])) {
- $token = $result['access_token'];
- }
- if (!$token) {
- throw new Exception('token can not empty');
- }
- $createMenuUrl = 'https://api.weixin.qq.com/cgi-bin/menu/create?access_token=' . $token;
- $opts = array(
- 'http' => array(
- 'method' => 'POST',
- 'header' => "Content-type: application/x-www-form-urlencodedContent-Length: " . strlen($menujson) . "" . "Connection: keep-alive" . "Keep-Alive: " . 300 . "",
- 'content' => $menujson,
- 'timeout' => 120,
- ),
- );
- $context = stream_context_create($opts);
- $response = json_decode(file_get_contents($createMenuUrl, false, $context),true);
- if(!$response['errcode'] ){
- echo "success";
- }else{
- echo $response['errmsg'];
- }
- echo "<pre>";
- print_r($response);
- echo "</pre>";
否则,你要等24小时左右 才能看到效果。
顺便,我也可以承接微信开发(请不要咨询我微信开发怎么做,网上教程很多。。。)