一、簡介
微信公衆平台服務号以及之前成功申請内測資格的訂閱号都具有自定義菜單的功能。開發者可利用該功能為公衆賬号的會話界面底部增加自定義菜單,使用者點選菜單中的選項,可以調出相應的回複資訊或網頁連結。自定義菜單接口将為公衆賬号的資訊展示空間提供更多可能性。本文将針對自定義菜單做簡單的開發應用,以供讀者參考。
二、官方說明
開發者擷取使用憑證後,可以使用該憑證對公衆賬号的自定義菜單進行建立、查詢和删除等操作。 自定義菜單接口可實作以下類型按鈕:
click(點選事件):
使用者點選click類型按鈕後,微信伺服器會通過消息接口(event類型)推送點選事件給開發者,并且帶上按鈕中開發者填寫的key值,開發者可以通過自定義的key值進行消息回複。
view(通路網頁):
使用者點選view類型按鈕後,會直接跳轉到開發者指定的url中。
建立自定義菜單後,由于微信用戶端緩存,需要24小時微信用戶端才會展現出來。建議測試時可以嘗試取消關注公衆賬号後,再次關注,則可以看到建立後的效果。
文檔位址:http://mp.weixin.qq.com/wiki/index.php?title=%E8%87%AA%E5%AE%9A%E4%B9%89%E8%8F%9C%E5%8D%95%E6%8E%A5%E5%8F%A3
三、擷取使用憑證
3.1 擷取appid 和appsecret
在 微信公衆平台 > 進階功能 > 開發模式中找到appid 和appsecret。

3.2 使用appid 和appsecret 向微信憑證擷取接口請求access_token
請求位址:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
請求參數說明:
grant_type:擷取access_token填寫client_credential
appid:第三方使用者唯一憑證
secret:第三方使用者唯一憑證密鑰,既appsecret
傳回說明:
正确的Json傳回結果:
{"access_token":"ACCESS_TOKEN","expires_in":7200}
傳回參數說明:
access_token:擷取到的憑證
expires_in:憑證有效時間,機關:秒
3.3 具體實作
a. 列印出格式
<?php
$APPID="wxdxxxxxxxxxxxxxxx";
$APPSECRET="96xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
$TOKEN_URL="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$APPID."&secret=".$APPSECRET;
$json=file_get_contents($TOKEN_URL);
$result=json_decode($json,true);
print_r($result);
?>
結果如下:
b. 擷取access_token
<?php
$APPID="wxdxxxxxxxxxxxxxxx";
$APPSECRET="96xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
$TOKEN_URL="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$APPID."&secret=".$APPSECRET;
$json=file_get_contents($TOKEN_URL);
$result=json_decode($json,true);
$ACC_TOKEN=$result['access_token'];
echo $ACC_TOKEN;
?>
注:access_token對應于公衆号是全局唯一的票據,重複擷取将導緻上次擷取的access_token失效。
四、建立菜單
方法:通過POST一個特定結構體,實作在微信用戶端建立自定義菜單。
請求位址:https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN
請求示例:
{
"button":[
{
"name":"公共查詢",
"sub_button":[
{
"type":"click",
"name":"天氣查詢",
"key":"tianQi"
},
{
"type":"click",
"name":"公交查詢",
"key":"gongJiao"
},
{
"type":"click",
"name":"翻譯",
"key":"fanYi"
}]
},
{
"name":"蘇州本地",
"sub_button":[
{
"type":"click",
"name":"愛上蘇州",
"key":"loveSuzhou"
},
{
"type":"click",
"name":"蘇州景點",
"key":"suzhouScenic"
},
{
"type":"click",
"name":"蘇州美食",
"key":"suzhouFood"
},
{
"type":"click",
"name":"住在蘇州",
"key":"liveSuzhou"
}]
},
{
"type":"click",
"name":"聯系我們",
"key":"lianxiUs"
}]
}
示例說明:
菜單結構及說明:
{
"button":[ //button定義該結構為一個菜單
{
"name":"分支主菜單名",
"sub_button":[ //sub_button定義子菜單
{
"type":"click", //按鈕類型
"name":"分支子菜單名1", //菜單名稱
"key":"loveSuzhou" //菜單key值
},
{
"type":"click",
"name":"分支子菜單名2",
"key":"liveSuzhou"
}]
}, //菜單之間用 , 分隔
{
"type":"click",
"name":"獨立菜單",
"key":"lianxiUs"
}]
}
{"errcode":0,"errmsg":"ok"}
送出菜單:
通過curl 送出以上的菜單資料,代碼如下:
$MENU_URL="https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$ACC_TOKEN;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $MENU_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);
$info = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Errno'.curl_error($ch);
}
curl_close($ch);
var_dump($info);
生成菜單:
建立菜單的代碼送出到伺服器後,并不是自動就出來了,需要通過執行該代碼檔案才能生成,是以,打開浏覽器,在位址欄裡輸入完整的菜單代碼URL,運作結果如下:
測試結果:
菜單建立成功。
五、查詢菜單
查詢目前使用的自定義菜單結構。
請求位址:https://api.weixin.qq.com/cgi-bin/menu/get?access_token=ACCESS_TOKEN
curl 代碼如下:
$MENU_URL="https://api.weixin.qq.com/cgi-bin/menu/get?access_token=".$ACC_TOKEN;
$cu = curl_init();
curl_setopt($cu, CURLOPT_URL, $MENU_URL);
curl_setopt($cu, CURLOPT_RETURNTRANSFER, 1);
$menu_json = curl_exec($cu);
$menu = json_decode($menu_json);
curl_close($cu);
echo $menu_json;
運作結果:
菜單查詢成功。
六、删除菜單
取消目前使用的自定義菜單。
請求位址:https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=ACCESS_TOKEN
$MENU_URL="https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=".$ACC_TOKEN;
$cu = curl_init();
curl_setopt($cu, CURLOPT_URL, $MENU_URL);
curl_setopt($cu, CURLOPT_RETURNTRANSFER, 1);
$info = curl_exec($cu);
$res = json_decode($info);
curl_close($cu);
if($res->errcode == "0"){
echo "菜單删除成功";
}else{
echo "菜單删除失敗";
}
菜單删除成功。
七、完整代碼擷取
請通路 樂思樂享 官方網盤
URL:http://pan.baidu.com/s/1c0s3Jby
八、關注
請關注 卓錦蘇州 微信公衆帳号,卓錦蘇州 基于BAE 平台開發,針對于主流的微信功能進行開發測試。
您可以關注 卓錦蘇州 公衆帳号進行功能測試,以及擷取新的應用開發。
1. 登入微信用戶端,通訊錄 -> 添加朋友 -> 查找公衆号 -> zhuojinsz,查找并關注。
2. 掃描二維碼:
卓錦蘇州 菜單功能:
David Camp
我們永遠相信,分享是一種美德 | We Believe, Great People Share Knowledge...