一、簡(jiǎn)介 微信公眾平臺(tái)服務(wù)號(hào)以及之前成功申請(qǐng)內(nèi)測(cè)資格的訂閱號(hào)都具有自定義菜單的功能。開(kāi)發(fā)者可利用該功能為公眾賬號(hào)的會(huì)話界面底部增加自定義菜單,用戶點(diǎn)擊菜單中的選項(xiàng),可以調(diào)出相應(yīng)的回復(fù)信息或網(wǎng)頁(yè)鏈接。自定義菜單接口將為公眾賬號(hào)的信息展示空間提供更多可能性。本文將針對(duì)自定義菜單做簡(jiǎn)單的開(kāi)發(fā)應(yīng)用,以供讀者參考。 二、官方說(shuō)明 開(kāi)發(fā)者獲取使用憑證后,可以使用該憑證對(duì)公眾賬號(hào)的自定義菜單進(jìn)行創(chuàng)建、查詢和刪除等操作。 自定義菜單接口可實(shí)現(xiàn)以下類型按鈕: click(點(diǎn)擊事件): 用戶點(diǎn)擊click類型按鈕后,微信服務(wù)器會(huì)通過(guò)消息接口(event類型)推送點(diǎn)擊事件給開(kāi)發(fā)者,并且?guī)习粹o中開(kāi)發(fā)者填寫的key值,開(kāi)發(fā)者可以通過(guò)自定義的key值進(jìn)行消息回復(fù)。 view(訪問(wèn)網(wǎng)頁(yè)): 用戶點(diǎn)擊view類型按鈕后,會(huì)直接跳轉(zhuǎn)到開(kāi)發(fā)者指定的url中。 創(chuàng)建自定義菜單后,由于微信客戶端緩存,需要24小時(shí)微信客戶端才會(huì)展現(xiàn)出來(lái)。建議測(cè)試時(shí)可以嘗試取消關(guān)注公眾賬號(hào)后,再次關(guān)注,則可以看到創(chuàng)建后的效果。 三、獲取使用憑證 3.1 獲取appid 和appsecret 在 微信公眾平臺(tái) > 高級(jí)功能 > 開(kāi)發(fā)模式中找到appid 和appsecret。
3.2 使用appid 和appsecret 向微信憑證獲取接口請(qǐng)求access_token 請(qǐng)求地址:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET 請(qǐng)求參數(shù)說(shuō)明: grant_type:獲取access_token填寫client_credential appid:第三方用戶唯一憑證 secret:第三方用戶唯一憑證密鑰,既appsecret 返回說(shuō)明: 正確的Json返回結(jié)果: {"access_token":"ACCESS_TOKEN","expires_in":7200} 返回參數(shù)說(shuō)明: access_token:獲取到的憑證 expires_in:憑證有效時(shí)間,單位:秒 3.3 具體實(shí)現(xiàn) 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); ?> 結(jié)果如下: 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對(duì)應(yīng)于公眾號(hào)是全局唯一的票據(jù),重復(fù)獲取將導(dǎo)致上次獲取的access_token失效。 四、創(chuàng)建菜單 方法:通過(guò)POST一個(gè)特定結(jié)構(gòu)體,實(shí)現(xiàn)在微信客戶端創(chuàng)建自定義菜單。 請(qǐng)求地址:https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN 請(qǐng)求示例: {
"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":"愛(ài)上蘇州",
"key":"loveSuzhou"
},
{
"type":"click",
"name":"蘇州景點(diǎn)",
"key":"suzhouScenic"
},
{
"type":"click",
"name":"蘇州美食",
"key":"suzhouFood"
},
{
"type":"click",
"name":"住在蘇州",
"key":"liveSuzhou"
}]
},
{
"type":"click",
"name":"聯(lián)系我們",
"key":"lianxiUs"
}]
} 示例說(shuō)明: 菜單結(jié)構(gòu)及說(shuō)明: {
"button":[ //button定義該結(jié)構(gòu)為一個(gè)菜單
{
"name":"分支主菜單名",
"sub_button":[ //sub_button定義子菜單
{
"type":"click", //按鈕類型
"name":"分支子菜單名1", //菜單名稱
"key":"loveSuzhou" //菜單key值
},
{
"type":"click",
"name":"分支子菜單名2",
"key":"liveSuzhou"
}]
}, //菜單之間用 , 分隔
{
"type":"click",
"name":"獨(dú)立菜單",
"key":"lianxiUs"
}]
} 返回說(shuō)明: 正確的Json返回結(jié)果: {"errcode":0,"errmsg":"ok"} 提交菜單: 通過(guò)curl 提交以上的菜單數(shù)據(jù),代碼如下: $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); 運(yùn)行結(jié)果: 測(cè)試結(jié)果: 菜單創(chuàng)建成功。 五、查詢菜單 查詢當(dāng)前使用的自定義菜單結(jié)構(gòu)。 請(qǐng)求地址: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; 運(yùn)行結(jié)果: 菜單查詢成功。 六、刪除菜單 取消當(dāng)前使用的自定義菜單。 請(qǐng)求地址:https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=ACCESS_TOKEN curl 代碼如下: $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 "菜單刪除失敗"; } 運(yùn)行結(jié)果: 測(cè)試結(jié)果: 菜單刪除成功。 |
|
來(lái)自: Be_The_Change > 《微信開(kāi)發(fā)》