前7篇把最基礎(chǔ)的消息接收和回復(fù)全做完了, ?也把高級接口的入口和分拆處理寫好了空方法, ?此篇接著介紹微信的9大高級接口, 并著重講解其中的自定義菜單。
微信9大接口為:
1.語音識別接口
2.客服接口
3.OAuth2.0 網(wǎng)頁授權(quán)接口
4.生成帶參數(shù)的二維碼接口
5.獲取用戶地理位置接口
6.獲取用戶基本信息接口
7.獲取關(guān)注者列表接口
8.用戶分組接口
9.上傳下載多媒體文件接口
?
具體介紹:
1. 語音識別?
功能描述:通過語音識別接口,用戶發(fā)送的語音,將同時給出語音識別出的文本內(nèi)容。?
實用意義:第三方可以調(diào)用微信自主研發(fā)的語音識別技術(shù)。意味著微信向第三方開放語音識別技術(shù),直接調(diào)用語音識別接口,對語音識別結(jié)果進(jìn)行互動或根據(jù)識別的內(nèi)容進(jìn)行自動答復(fù)。
?
2. 客服接口
功能描述:通過客服接口,公眾號可以在用戶發(fā)送過消息的 12 小時內(nèi),向用戶回復(fù)消息。?
實用意義:以前公眾帳號跟訂戶只能被動響應(yīng),比如用戶觸發(fā)了需求,如發(fā)送關(guān)鍵字給公眾帳號,后者才可以與用戶對話。如今,如果訂戶跟公眾帳號對話過一次,公眾帳號就可以在 12 個小時內(nèi)持續(xù)給用戶下發(fā)消息。這提高了公眾帳號發(fā)送消息的能力。
?
3. OAuth 2.0 網(wǎng)頁授權(quán)?
功能描述:通過網(wǎng)頁授權(quán)接口,公眾號可以請求用戶授權(quán)。
實用意義:這就像微博、QQ的帳號授權(quán)功能。這意味著微信帳號正式成為一個帳號系統(tǒng)。
?
4. 生成帶參數(shù)二維碼?
功能描述:通過該接口,公眾號可以獲得一系列攜帶不同參數(shù)的二維碼,在用戶掃描關(guān)注公眾號后,公眾號可以根據(jù)參數(shù)分析各二維碼的效果。?
實用意義:舉例來說,以前放一個二維碼在網(wǎng)站或者線下的廣告牌,效果都是一樣的:獲得關(guān)注用戶?,F(xiàn)在可以分析訂戶來自哪里。開發(fā)者可以在鏈接里設(shè)置特殊信息,做更多的數(shù)據(jù)分析。這一功能也可以用來做帳號綁定,
?
5. 獲取用戶地理位置
功能描述:通過該接口,公眾號能夠獲得用戶進(jìn)入公眾號會話時的地理位置。?
實用意義:兩種情況可以獲得用戶地理位置:一是與公眾帳號“會話時”,二是在會話界面“每隔 5 秒”。在用戶同意下,這就可以做微信導(dǎo)航或地理圍欄方面的服務(wù)。
?
6. 獲取用戶基本信息?
功能描述:通過該接口,公眾號可以根據(jù)加密后的用戶 OpenID,獲取用戶基礎(chǔ)信息,包括頭像、名稱、性別、地區(qū)。
?
實用意義:以前這是一個非常高的權(quán)限。獲得用戶基本信息后,可以做 CRM 管理后臺,方便商家管理用戶。
?
7. 獲取關(guān)注者列表?
功能描述:通過該接口,用戶可以獲取所有關(guān)注者的 OpenID?
實用意義:以前不能知道有多少人關(guān)注你,是誰在關(guān)注你。如今你可以知道誰在關(guān)注你。
?
8. 用戶分組接口?
功能描述:通過分組接口,公眾號可以在后臺為用戶移動分組,或創(chuàng)建、修改分組。
實用意義:可以對用戶進(jìn)行分組,比如樂思享組織一場“聽眾交流會”,現(xiàn)場來了 1000 人,可以把它歸為一組,后續(xù)的活動花絮照片只發(fā)給這 1000 人。這對于商家來說,就是一個 VIP 會員管理,是 CRM 管理平臺。
?
9. 上傳下載多媒體文件?
功能描述:通過該接口公眾號可以在需要時在微信服務(wù)器上傳下載多媒體文件。
實用意義:可以下發(fā)圖片、視頻。比如搞笑視頻,上傳到微信公眾賬號后臺,可以向聽眾推送出來,相當(dāng)于視頻網(wǎng)站的一個業(yè)務(wù)。
以上就是微信9大高級接口的介紹, ? 其實現(xiàn)在應(yīng)該是10個了,還有1個支付功能。
?
下面著重寫自定義菜單。
自定義菜單只需要創(chuàng)建一次,之后都會存在,每次更改需要等待幾分鐘才可看到,創(chuàng)建:
創(chuàng)建好之后:
??
我這里是全部添加好之后,點擊創(chuàng)建到微信,代碼:
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級菜單內(nèi)容 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轉(zhuǎn)成json的值 下面賦值給button //賦值給button Dictionary<string, object> dicAll = new Dictionary<string, object>(); dicAll.Add("button", m); //--------- string jsonResult = JsonHelper.GetJsonStr(dicAll);//將dic轉(zhuǎn)成json //轉(zhuǎn)換出來的 [{},{}]也會被“”包圍,要去掉“” 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數(shù)據(jù)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" }] }] }
這樣就可以在微信中看到結(jié)果:
以上是屬于后臺管理中的創(chuàng)建菜單, 創(chuàng)建之后我們公號服務(wù)入口處對應(yīng)的方法也完善下, 之前已經(jīng)寫好了一個空方法
public void DoMenuClick(DbContext dbHome, RMenuClick mMenuClk)
{
}
現(xiàn)在完善下:
//自定義菜單點擊 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 = "歡迎使用,輸入任意關(guān)鍵字開始體驗"; 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類型的菜單點擊就會直接跳轉(zhuǎn)你所寫的鏈接去, ?1級菜單如果設(shè)置成view類型則不會跳轉(zhuǎn)依舊執(zhí)行點擊事件;
效果:
?
我這里直接返回了一段文字, 實際應(yīng)用中可以返回任何消息。
更多asp.net開發(fā)微信公眾平臺(8)微信9大高級接口,自定義菜單相關(guān)文章請關(guān)注PHP中文網(wǎng)!
?
?

熱AI工具

Undress AI Tool
免費脫衣服圖片

Undresser.AI Undress
人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover
用于從照片中去除衣服的在線人工智能工具。

Clothoff.io
AI脫衣機

Video Face Swap
使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的代碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級代碼編輯軟件(SublimeText3)