1. 程式人生 > >微信菜單詳解

微信菜單詳解

urn 手機 pos 並且 搜索 拍攝 rms color api

目前自定義菜單接口可實現以下幾種類型按鈕,如下:
  1、click:點擊推事件
  用戶點擊click類型按鈕後,微信服務器會通過消息接口推送消息類型為event 的結構給開發者(參考消息接口指南),並且帶上按鈕中開發者填寫的key值,開發者可以通過自定義的key值與用戶進行交互;
  2、view:跳轉URL
  用戶點擊view類型按鈕後,微信客戶端將會打開開發者在按鈕中填寫的網頁URL,可與網頁授權獲取用戶基本信息接口結合,獲得用戶基本信息。
  3、scancode_push:掃碼推事件
  用戶點擊按鈕後,微信客戶端將調起掃一掃工具,完成掃碼操作後顯示掃描結果(如果是URL,將進入URL),且會將掃碼的結果傳給開發者,開發者可以下發消息。
  4、scancode_waitmsg:掃碼推事件且彈出“消息接收中”提示框
  用戶點擊按鈕後,微信客戶端將調起掃一掃工具,完成掃碼操作後,將掃碼的結果傳給開發者,同時收起掃一掃工具,然後彈出“消息接收中”提示框,隨後可能會收到開發者下發的消息。
  5、pic_sysphoto:彈出系統拍照發圖
  用戶點擊按鈕後,微信客戶端將調起系統相機,完成拍照操作後,會將拍攝的相片發送給開發者,並推送事件給開發者,同時收起系統相機,隨後可能會收到開發者下發的消息。
  6、pic_photo_or_album:彈出拍照或者相冊發圖
  用戶點擊按鈕後,微信客戶端將彈出選擇器供用戶選擇“拍照”或者“從手機相冊選擇”。用戶選擇後即走其他兩種流程。
  7、pic_weixin:彈出微信相冊發圖器
  用戶點擊按鈕後,微信客戶端將調起微信相冊,完成選擇操作後,將選擇的相片發送給開發者的服務器,並推送事件給開發者,同時收起相冊,隨後可能會收到開發者下發的消息。
  8、location_select:彈出地理位置選擇器
  用戶點擊按鈕後,微信客戶端將調起地理位置選擇工具,完成選擇操作後,將選擇的地理位置發送給開發者的服務器,同時收起位置選擇工具,隨後可能會收到開發者下發的消息。

1.創建菜單

  創建菜單的接口如下所示:
https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN

   創建菜單時,需要將菜單內容組織成如下結構,以POST的方式向微信服務器提交。

{
    "button": [
        {
            "name": "掃碼", 
            "sub_button": [
                {
                    "type": "scancode_waitmsg", 
                    "name": "掃碼帶提示", 
                    "key": "rselfmenu_0_0"
                }
, { "type": "scancode_push", "name": "掃碼推事件", "key": "rselfmenu_0_1" } ] }, { "name": "發圖", "sub_button": [ { "type": "pic_sysphoto", "name": "系統拍照發圖", "key": "rselfmenu_1_0" }
, { "type": "pic_photo_or_album", "name": "拍照或者相冊發圖", "key": "rselfmenu_1_1" }, { "type": "pic_weixin", "name": "微信相冊發圖", "key": "rselfmenu_1_2" } ] }, { "name": "其他", "sub_button": [ { "name": "發送位置", "type": "location_select", "key": "rselfmenu_2_0" }, { "type": "click", "name": "今日歌曲", "key": "V1001_TODAY_MUSIC" }, { "type": "view", "name": "搜索", "url": "http://www.soso.com/" } ] } ] }

自定義菜單內容的參數說明如表5-3所示:
技術分享

給微信公眾賬號創建自定義菜單的代碼實現如下所示:

$jsonmenu = ‘{
    "button": [
        {
            "name": "掃碼", 
            "sub_button": [
                {
                    "type": "scancode_waitmsg", 
                    "name": "掃碼帶提示", 
                    "key": "rselfmenu_0_0"
                }, 
                {
                    "type": "scancode_push", 
                    "name": "掃碼推事件", 
                    "key": "rselfmenu_0_1"
                }
            ]
        }, 
        {
            "name": "發圖", 
            "sub_button": [
                {
                    "type": "pic_sysphoto", 
                    "name": "系統拍照發圖", 
                    "key": "rselfmenu_1_0"
                }, 
                {
                    "type": "pic_photo_or_album", 
                    "name": "拍照或者相冊發圖", 
                    "key": "rselfmenu_1_1"
                }, 
                {
                    "type": "pic_weixin", 
                    "name": "微信相冊發圖", 
                    "key": "rselfmenu_1_2"
                }
            ]
        }, 
        {
            "name": "其他", 
            "sub_button": [
                {
                    "name": "發送位置", 
                    "type": "location_select", 
                    "key": "rselfmenu_2_0"
                }, 
                {
                    "type": "click", 
                    "name": "今日歌曲", 
                    "key": "V1001_TODAY_MUSIC"
                }, 
                {
                    "type": "view", 
                    "name": "搜索", 
                    "url": "http://www.soso.com/"
                }
            ]
        }
    ]
}
;

$url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$access_token;
$result = https_request($url, $jsonmenu);
var_dump($result);

function https_request($url,$data = null)
{
$curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
if (!empty($data)){
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    }
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($curl);
    curl_close($curl);
return $output;
}

正確時的返回JSON數據包如下:
{"errcode":0,"errmsg":"ok"}

錯誤時的返回JSON數據包如下(示例為無效菜單名長度):
{"errcode":40018,"errmsg":"invalid button name size"}

errcode為全局返回碼。

微信菜單詳解