前7篇把最基礎的消息接收和回覆全作完了, 也把高級接口的入口和分拆處理寫好了空方法, 此篇接着介紹微信的9大高級接口, 並着重講解其中的自定義菜單。html
微信9大接口爲:json
1.語音識別接口api
2.客服接口服務器
3.OAuth2.0 網頁受權接口微信
4.生成帶參數的二維碼接口微信公衆平臺
5.獲取用戶地理位置接口asp.net
6.獲取用戶基本信息接口ide
7.獲取關注者列表接口post
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 }
最終是以下格式的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類型則不會跳轉依舊執行點擊事件;
效果:
我這裏直接返回了一段文字, 實際應用中能夠返回任何消息。