一、前言
个人订阅号开发模式不能自定义菜单,但是我们可以使用测试账号来做。如果是认证过的企业订阅号和服务号那就不用担心不能自定义菜单的问题了。
最后再扫一下测试号管理里面的测试号二维码。
二、自定义菜单详解
创建自定义菜单需要三个步骤:
1、需要access_token的值(access_token是调用接口的一个凭据,或者说是一把钥匙)
2、设置好菜单数组
3、请求https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN接口来设置菜单(post请求方式)
(利用cUrl来请求接口)
自定义菜单代码实现:
<?php $test = new Test(); $test->definedItems(); class Test { //php中进行get和post请求 function http_curl($url, $type='get', $res='json',$arr='') { //初始化curl $ch = curl_init(); //设置curl参数 下面的方式是get请求 curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在 //post请求 if ($type == 'post') { curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $arr); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在 } //采集curl $output = curl_exec($ch); //关闭 curl_close($ch); if($res='json') { //请求失败返回错误信息 if(curl_errno($ch)) { return curl_error($ch); }//返回成功 else { //加上参数true 将json对象转化成数组而不仅仅是object类型 return json_decode($output,true); } } var_dump($output); } //返回access_token public function getAccessToken() { //access_token存在session中则返回 //if($_SESSION['access_token'] && $_SESSION[ 'expire_time'] > time()) // { // return $_SESSION['access_token']; //} //access_token不存在session中则重新获取 //else { $appid = 'wx6615a1d7a0...';//你的appid $secret= '2d8bfa2c72f6ae8f58f090c';//你的secret $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$secret; $res = $this->http_curl($url, 'get', 'json'); $access_token = $res['access_token']; $_SESSION['access_token'] = $access_token; $_SESSION['expire_time'] = time()+7000; return $access_token; // } } //自定义菜单 function definedItems() { header('content-type:text/html;charset=utf-8'); echo $access_token = $this->getAccessToken(); echo "<br />"; $url = " https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$access_token; $postArr = array( 'button' => array( array(//第一个一级菜单 'type'=>'click', 'name'=>"menu1", 'key' => 'item1' ), array(//第二个一级菜单 'name'=>'menu2', 'sub_button'=> array(//第一个二级菜单 array( 'type'=>'click', 'name'=>'menu2', 'key' => 'item22' ), ) ), array(//第三个一级菜单 'type'=>'click', 'name'=> 'menu3', 'key' => 'item3' ), ) ); echo $postJson = json_encode($postArr); $res = $this->http_curl($url,'post','json',$postJson); var_dump($res); } } ?>
配置了php运行环境,可以直接运行上面的代码,将返回的json格式的菜单数据和access_token拿到 接口在线调式工具 测试接口的正确性。
如同下面的这样的数据: