搜尋
首頁微信小程式微信開發asp.net開發微信公眾平台(8)微信9大高級接口,自訂選單

前7篇把最基礎的消息接收和回復全做完了,  也把高級接口的入口和分拆處理寫好了空方法,  此篇接著介紹微信的9大高級接口, 並著重講解其中的自訂選單。

微信9大介面為:

1.語音辨識介面

#2.客服介面

3.OAuth2.0 網頁授權介面

4.產生帶有參數的二維碼介面

5.取得用戶地理位置介面

6.取得使用者基本資訊介面

#7.取得追蹤者清單介面

#8.使用者分組介面

9.上傳下載多媒體檔案介面

##具體介紹:

1. 語音辨識 

功能描述:透過語音辨識接口,使用者傳送的語音,將同時給予語音辨識的文字內容。 

實用意義:第三者可以呼叫微信自主研發的語音辨識技術。意味著微信向第三方開放語音識別技術,直接調用語音識別接口,對語音識別結果進行互動或根據識別的內容進行自動答复。

 

2. 客服介面

功能描述:透過客服接口,公眾號可以在用戶發送過訊息的 12 小時內,回覆用戶訊息。 

實用意義:以前公眾帳號跟訂戶只能被動回應,例如用戶觸發了需求,例如發送關鍵字給公眾帳號,後者才可以與用戶對話。如今,如果訂戶跟公眾帳號對話過一次,公用帳號就可以在 12 個小時內持續傳送訊息給用戶。這提高了公眾帳號發送訊息的能力。

 

3. OAuth 2.0 網頁授權 

功能說明:透過網頁授權接口,公眾號碼可以請求使用者授權。

實用意義:這就像是微博、QQ的帳號授權功能。這意味著微信帳號正式成為帳號系統。

 

4. 產生帶參數二維碼 

功能描述:透過該接口,公眾號可以獲得一系列攜帶不同參數的二維碼,在用戶掃描關注公眾號後,公眾號可依參數分析各二維碼的效果。 

實用意義:舉例來說,以前放一個二維碼在網站或離線的廣告牌,效果都是一樣的:獲得關注用戶。現在可以分析訂戶來自哪裡。開發者可以在連結裡設定特殊訊息,做更多的數據分析。這項功能也可以用來做帳號綁定,

 

5. 取得使用者地理位置

功能描述:透過該介面,公有號能夠獲得使用者進入大眾號會話時的地理位置。 

實用意義:兩種情況可以獲得使用者地理位置:一是與公眾帳號“會話時”,二是在會話介面“每隔 5 秒”。在使用者同意下,這就可以做微信導航或地理圍籬方面的服務。

 

6. 取得使用者基本資訊 

功能描述:透過此接口,公眾號可根據加密後的使用者OpenID,取得使用者基礎資訊,包括頭像、名稱、性別、地區。

 

實用意義:以前這是一個非常高的權限。取得使用者基本資料後,可以做 CRM 管理後台,方便商家管理使用者。

 

7. 取得追蹤者清單 

功能描述:透過該接口,使用者可以取得所有追蹤者的OpenID 

##實務意義:以前不能知道有多少人關注你,是誰在關注你。如今你可以知道誰在關注你。

 

8. 使用者分組介面 

功能描述:透過分組接口,公眾號可在後台為使用者移動分組,或建立、修改分組。

實用意義:可以將使用者分組,例如樂思享組織一場“聽眾交流會”,現場來了1000 人,可以把它歸為一組,後續的活動花絮照片只發給這1000 人。這對商家來說,就是一個 VIP 會員管理,就是 CRM 管理平台。

 

9. 上傳下載多媒體檔案 

功能描述:透過此介面公眾號可在需要時在微信伺服器上傳下載多媒體檔案。

實用意義:可以下發圖片、影片。例如搞笑視頻,上傳到微信公眾帳號後台,可以向聽眾推送出來,相當於視頻網站的一個業務。

以上就是微信9大高階介面的介紹,   其實現在應該是10個了,還有1個支付功能。

 

下面著重寫自訂選單。

自訂選單只需要建立一次,之後都會存在,每次變更需要等待幾分鐘才可看到,建立:

asp.net開發微信公眾平台(8)微信9大高級接口,自訂選單已建立好之後:

asp.net開發微信公眾平台(8)微信9大高級接口,自訂選單

  

我這裡是全部新增好之後,點選建立到微信,程式碼:

public void SetMenu()
        {
            
            dbHome=Factory.FContext.WeiXinDbContext();
            var listP = DAL.ListWhere<tb_PersonalMenu, int>(dbHome, a => a.ParentId == 0&& a.State==1, a => a.ID, 3);
            List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();   
            foreach (var row in listP)
            {
                var listC = DAL.ListWhere<tb_PersonalMenu, int>(dbHome, a => a.ParentId == row.ID && a.State==1, a => a.ID, 5);
                List<Dictionary<string, object>> list2 = new List<Dictionary<string, object>>();
                Dictionary<string, object> dic2m = new Dictionary<string, object>();
                Dictionary<string, object> dic1 = new Dictionary<string, object>();
                    
                if (listC.Count > 0)
                {
                    foreach(var row2 in listC)
                    {
                    //2级菜单内容
                    Dictionary<string, object> dic2c = new Dictionary<string, object>();

                    dic2c.Add("type", row2.Type.ToString().Replace("1", "click").Replace("2","view"));
                    dic2c.Add("name", row2.Name);
                    if(row2.Type==1)
                        dic2c.Add("key", row2.ID);
                    if (row2.Type ==2)
                        dic2c.Add("url", row2.LinkUrl);

                    list2.Add(dic2c);
                    }
                    //--
                    //2级菜单组装
                    dic2m.Add("name", row.Name);
                    dic2m.Add("sub_button", JsonHelper.ListDicToJsonVals(list2));
                    //------
                    list.Add(dic2m);
                }
                else
                {
                    //1级菜单
                    dic1.Add("type", row.Type.ToString().Replace("1", "click").Replace("2", "view"));
                    dic1.Add("name", row.Name);
                    if (row.Type == 1)
                        dic1.Add("key", row.ID);
                    if (row.Type == 2)
                        dic1.Add("url", row.LinkUrl);


                    //----------
                    list.Add(dic1);
                }
                //1级和2级装成list 
                
                
                //-----------
            
            }
            
            
            
           

            


            
            string m=JsonHelper.ListDicToJsonVals(list);//将list转成json的值 下面赋值给button

            //赋值给button
            Dictionary<string, object> dicAll = new Dictionary<string, object>();
            dicAll.Add("button", m);
            //---------

            
            string jsonResult = JsonHelper.GetJsonStr(dicAll);//将dic转成json
            //转换出来的  [{},{}]也会被“”包围,要去掉“”

            jsonResult = jsonResult.Replace("\"[", "[").Replace("]\"", "]");
            string html = HttpHelper.HttpPost("https"+"://api.weixin.qq.com/cgi-bin/menu/create?access_token="+Common.Config.SystemConfig.access_token+"", jsonResult, Encoding.UTF8);


            dbHome.Dispose();
            Response.Write(JsonHelper.JsonToVal(html, "errmsg"));
            Response.End();

        }

 

最終是如下格式的json資料post到微信:

{
     "button":[
     {	
          "type":"click",
          "name":"今日歌曲",
          "key":"V1001_TODAY_MUSIC"
      },
      {
           "type":"click",
           "name":"歌手简介",
           "key":"V1001_TODAY_SINGER"
      },
      {
           "name":"菜单",
           "sub_button":[
           {	
               "type":"view",
               "name":"搜索",
               "url":"http://www.soso.com/"
            },
            {
               "type":"view",
               "name":"视频",
               "url":"http://v.qq.com/"
            },
            {
               "type":"click",
               "name":"赞一下我们",
               "key":"V1001_GOOD"
            }]
       }]
 }

這樣就可以在微信中看到結果:

asp.net開發微信公眾平台(8)微信9大高級接口,自訂選單

 

 

#以上是屬於後台管理中的建立選單,  建立之後我們公號服務入口處對應的方法也完善下, 之前已經寫好了一個空方法

public void DoMenuClick(DbContext dbHome, RMenuClick mMenuClk)
       {

}

現在完善下:

//自定义菜单点击
        public void DoMenuClick(DbContext dbHome, RMenuClick mMenuClk)
        {
            SText mStxtA = new SText();
            mStxtA.ToUserName = mMenuClk.FromUserName;
            mStxtA.FromUserName = mMenuClk.ToUserName;
            mStxtA.CreateTime = mMenuClk.CreateTime;
            int id = 0;
            mStxtA.Content = "欢迎使用,输入任意关键字开始体验";
            if(int.TryParse(mMenuClk.EventKey,out id))
            {
                var me = DALWei.InfoEntities<tb_PersonalMenu>(dbHome, a => a.ID == id);
                if(me!=null)
                    mStxtA.Content = "欢迎使用【"+me.Name+"】,介绍、说明、链接等等; 也可以是图文消息";
            }
            
            Often.ResponseToEnd(DALWei.SendText(mStxtA));
        }

這個是點選類型的選單處理,  需要說明的是,view類型的選單點擊就會直接跳轉你所寫的連結去,  1級選單如果設定成view類型則不會跳轉依舊執行點擊事件;

效果:

 

asp.net開發微信公眾平台(8)微信9大高級接口,自訂選單

我這裡直接回傳了一段文字, 實際應用中可以回傳任何訊息。

更多asp.net開發微信公眾平台(8)微信9大高級接口,自訂選單相關文章請關注PHP中文網!

 

 

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具