一、前言
個人訂閱號開發模式不能自定義菜單,但是我們可以使用測試賬號來做。如果是認證過的企業訂閱號和服務號那就不用擔心不能自定義菜單的問題了。
最后再掃一下測試號管理里面的測試號二維碼。
二、自定義菜單詳解
創建自定義菜單需要三個步驟:
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拿到 接口在線調式工具 測試接口的正確性。
如同下面的這樣的數據:

