[c#]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個支付功能。

 

 

下面着重寫自定義菜單。

 

自定義菜單只需要創建一次,之后都會存在,每次更改需要等待幾分鍾才可看到,創建:

創建好之后:

 

 

我這里是全部添加好之后,點擊創建到微信,代碼:

 1 public void SetMenu()
 2         {
 3             
 4             dbHome=Factory.FContext.WeiXinDbContext();
 5             var listP = DAL.ListWhere<tb_PersonalMenu, int>(dbHome, a => a.ParentId == 0&& a.State==1, a => a.ID, 3);
 6             List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();   
 7             foreach (var row in listP)
 8             {
 9                 var listC = DAL.ListWhere<tb_PersonalMenu, int>(dbHome, a => a.ParentId == row.ID && a.State==1, a => a.ID, 5);
10                 List<Dictionary<string, object>> list2 = new List<Dictionary<string, object>>();
11                 Dictionary<string, object> dic2m = new Dictionary<string, object>();
12                 Dictionary<string, object> dic1 = new Dictionary<string, object>();
13                     
14                 if (listC.Count > 0)
15                 {
16                     foreach(var row2 in listC)
17                     {
18                     //2級菜單內容
19                     Dictionary<string, object> dic2c = new Dictionary<string, object>();
20 
21                     dic2c.Add("type", row2.Type.ToString().Replace("1", "click").Replace("2","view"));
22                     dic2c.Add("name", row2.Name);
23                     if(row2.Type==1)
24                         dic2c.Add("key", row2.ID);
25                     if (row2.Type ==2)
26                         dic2c.Add("url", row2.LinkUrl);
27 
28                     list2.Add(dic2c);
29                     }
30                     //--
31                     //2級菜單組裝
32                     dic2m.Add("name", row.Name);
33                     dic2m.Add("sub_button", JsonHelper.ListDicToJsonVals(list2));
34                     //------
35                     list.Add(dic2m);
36                 }
37                 else
38                 {
39                     //1級菜單
40                     dic1.Add("type", row.Type.ToString().Replace("1", "click").Replace("2", "view"));
41                     dic1.Add("name", row.Name);
42                     if (row.Type == 1)
43                         dic1.Add("key", row.ID);
44                     if (row.Type == 2)
45                         dic1.Add("url", row.LinkUrl);
46 
47 
48                     //----------
49                     list.Add(dic1);
50                 }
51                 //1級和2級裝成list 
52                 
53                 
54                 //-----------
55             
56             }
57             
58             
59             
60            
61 
62             
63 
64 
65             
66             string m=JsonHelper.ListDicToJsonVals(list);//將list轉成json的值 下面賦值給button
67 
68             //賦值給button
69             Dictionary<string, object> dicAll = new Dictionary<string, object>();
70             dicAll.Add("button", m);
71             //---------
72 
73             
74             string jsonResult = JsonHelper.GetJsonStr(dicAll);//將dic轉成json
75             //轉換出來的  [{},{}]也會被“”包圍,要去掉“”
76 
77             jsonResult = jsonResult.Replace("\"[", "[").Replace("]\"", "]");
78             string html = HttpHelper.HttpPost("https"+"://api.weixin.qq.com/cgi-bin/menu/create?access_token="+Common.Config.SystemConfig.access_token+"", jsonResult, Encoding.UTF8);
79 
80 
81             dbHome.Dispose();
82             Response.Write(JsonHelper.JsonToVal(html, "errmsg"));
83             Response.End();
84 
85         }
View Code

 

最終是如下格式的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"
            }]
       }]
 }

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

 

 

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

public void DoMenuClick(DbContext dbHome, RMenuClick mMenuClk)
{

}

現在完善下:

 1 //自定義菜單點擊
 2         public void DoMenuClick(DbContext dbHome, RMenuClick mMenuClk)
 3         {
 4             SText mStxtA = new SText();
 5             mStxtA.ToUserName = mMenuClk.FromUserName;
 6             mStxtA.FromUserName = mMenuClk.ToUserName;
 7             mStxtA.CreateTime = mMenuClk.CreateTime;
 8             int id = 0;
 9             mStxtA.Content = "歡迎使用,輸入任意關鍵字開始體驗";
10             if(int.TryParse(mMenuClk.EventKey,out id))
11             {
12                 var me = DALWei.InfoEntities<tb_PersonalMenu>(dbHome, a => a.ID == id);
13                 if(me!=null)
14                     mStxtA.Content = "歡迎使用【"+me.Name+"】,介紹、說明、鏈接等等; 也可以是圖文消息";
15             }
16             
17             Often.ResponseToEnd(DALWei.SendText(mStxtA));
18         }

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

效果:

 

我這里直接返回了一段文字, 實際應用中可以返回任何消息。

 

 asp.net開發微信公眾平台文章目錄  

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM