1. 程式人生 > >如何添加微信自定義菜單

如何添加微信自定義菜單

獲取值 div net 過期 停止 exp 微信公眾平臺 客戶端 p地址

登錄微信公眾平臺的管理界面,點擊左邊的菜單中的“自定義菜單”,可以進行自定義菜單的基本配置。

如果已啟用服務器配置的話,就不能在公眾平臺管理界面進行自定義菜單,而需要調用微信提供的接口進行自定義菜單的開發。

技術分享

開啟和停止服務器配置在左邊菜單中的開發→基本配置中可以找到。如果停止,用戶可以自定義菜單,且向客戶端推送消息,但不能接收客戶端的請求。如果啟用,必須由開發者調用API接口對自定義菜單進行開發,可以向客戶端推送消息,也可以接收客戶端的請求,對請求進行處理並相應(即被動回復消息)。

技術分享

自定義菜單的API是微信提供的高級接口,必須經過微信認證才可以調用。個人訂閱號無法進行微信認證,只有企業/組織訂閱號才可以進行微信認證。微信認證需每年向騰訊繳納300元費用。

自定義菜單實質上是一個JSON字符串,如下所示

 {
     "button":[
     {	
          "type":"click",
          "name":"今日歌曲",
          "key":"V1001_TODAY_MUSIC"
      },
      {
           "name":"菜單",
           "sub_button":[
           {	
               "type":"view",
               "name":"搜索",
               "url":"http://www.soso.com/"
            },
            {
                 "type":"miniprogram",
                 "name":"wxa",
                 "url":"http://mp.weixin.qq.com",
                 "appid":"wx286b93c14bbf93aa",
                 "pagepath":"pages/lunar/index"
             },
            {
               "type":"click",
               "name":"贊一下我們",
               "key":"V1001_GOOD"
            }]
       }]
 }

  

其中的type指的是按鈕的類型,有多種類型的按鈕,此例中為click和view。更多類型按鈕的說明請查看開發文檔。

接口調用使用POST方式,https協議:

https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN

ACCESS_TOKEN獲取方法如下:

1、在基本配置中查看開發者ID(AppID)和開發者密碼(AppSecret)。其中AppSecret具有極高的安全性,需要使用管理員賬號(而非第三方授權用戶)登錄,點擊重置後可看到AppSecret。

技術分享

2、得到AppID和AppSecret後,還需要設置白名單,即可以獲取ACCESS_TOKEN值的IP地址,本機IP以微信提供的網站http://ip.qq.com/為準。

3、點擊開發→開發者工具,接口類型選擇基礎支持,接口列表選擇獲取access_token接口/token。輸入剛才獲取到的appid和secret。

技術分享

4、點擊“檢查問題”,可以得到access_token的值,expires_in是過期時間

技術分享

得到ACCESS_TOKEN後,訪問以下網址創建自定義菜單:

https://api.weixin.qq.com/cgibin/menu/create?access_token=zPTPP7eGoXtDQTYNlXsCODQhEgvJSDTFKfic7EJfdA_kNevPlW1lwcZXtfXXkonCzW0xagkD7jJ6qGAf7rBwGONw05-d17rso3QSlbmQS6yNBVbcgL1iaKnsMkBvbGgkJZWbAGAEUR

5、ACCESS_TOKEN存在有效期,expire_in為7200秒即2個小時,如果超過2小時將失效。因此如果想實現在網頁上點擊按鈕生成自定義菜單,應該通過代碼獲取ACCESS_TOKEN。

首先定義全局變量AppID和AppSecret

    const string appid = "xxxxxxxxxxxxxxxxxx";
    const string secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

獲取代碼如下:

    /// <summary>
    /// 獲取access_token
    /// </summary>
    /// <param name="grant_type">填寫client_credential</param>
    /// <param name="appid">第三方用戶唯一憑證</param>
    /// <param name="secret">第三方用戶唯一憑證密鑰,即appsecret</param>
    /// <returns>access_token</returns>
    public string GetAccessToken(string grant_type,string appid , string secret)  
    {
        string access_token = string.Empty;
        //接口格式:協議為https,請求方式為GET,需指定3個參數grant_type,appid和secret
        string tokenUrl = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type={0}&appid={1}&secret={2}", grant_type, appid, secret);  
        WebClient wc = new WebClient();  
        string download_string = wc.DownloadString(tokenUrl); //獲取以上接口url調用的結果字符串,即包含access_token的JSON數據
        //註意:由於.net 2.0不支持使用JavaScriptSerializer類反序列化,只能使用Newtonsoft.Json進行反序列化
        object obj = JsonConvert.DeserializeObject(download_string);  //使用Newtonsoft.Json反序列化JSON數據
        /*
            正確時的返回JSON數據包如下:
            {  
                 "access_token": "access_token的值",
                 "expires_in": 7200  
            }  
            錯誤時返回的JSON數據包如下:
            {
              "errcode":錯誤代碼,
              "errmsg":"錯誤信息"
             }
         */
        Newtonsoft.Json.Linq.JObject js = obj as Newtonsoft.Json.Linq.JObject; //獲得JObject
        //Newtonsoft.Json.Linq.JToken jt; //根據鍵獲取值
        if (js["access_token"] != null)  access_token = js["access_token"].ToString(); //如果正確返回,獲取access_token
        else access_token = js["errcode"].ToString() + ":" + js["errmsg"].ToString() ; //如果發生錯誤,獲取錯誤代碼及錯誤消息
        /*
            返回碼說明:
            -1:系統繁忙,此時請開發者稍候再試
            0:請求成功
            40001:AppSecret錯誤或者AppSecret不屬於這個公眾號,請開發者確認AppSecret的正確性
            40002:請確保grant_type字段值為client_credential
            40164:調用接口的IP地址不在白名單中,請在接口IP白名單中進行設置
         */
        return access_token;
    }

調用代碼:

GetAccessToken("client_credential", appid, secret);

如何添加微信自定義菜單