日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

微信公众帐号开发教程第15篇-自定义菜单的view类型(访问网页)

發(fā)布時間:2025/3/16 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微信公众帐号开发教程第15篇-自定义菜单的view类型(访问网页) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

引言及內(nèi)容概要

? ? 距離寫上一篇文章《自定義菜單的創(chuàng)建及菜單事件響應(yīng)》整整過了兩個月的時間,那時公眾平臺還沒有開放view類型的菜單。在不久前,微信公眾平臺悄悄開放了view類型的菜單,卻沒有在首頁發(fā)布任何通知,貌似微信團(tuán)隊很喜歡這么干。一個偶然的機(jī)會,我留意到API文檔的自定義菜單接口發(fā)生了變化,增加了對菜單view類型的說明:

? view(訪問網(wǎng)頁):

用戶點(diǎn)擊view類型按鈕后,會直接跳轉(zhuǎn)到開發(fā)者指定的url中。

? ? 于是我在第一時間更新了小q機(jī)器人(微信號:xiaoqrobot)的菜單,在一級菜單“更多”下增加了二級菜單“使用幫助”,點(diǎn)擊該菜單項會直接跳轉(zhuǎn)到網(wǎng)頁,如下圖所示。



? ? 本篇文章就為大家介紹下view類型的自定義菜單該如何創(chuàng)建。


自定義菜單的兩種類型(click和view)

? ? 公眾平臺API文檔中給出了自定義菜單的json結(jié)構(gòu)示例,我從中截取兩個菜單項的json代碼,一個是click類型,另一個是view類型,如下所示。

[html]?view plaincopy
  • {?????
  • ????"type":"click",??
  • ????"name":"今日歌曲",??
  • ????"key":"V1001_TODAY_MUSIC"??
  • },??
  • {??
  • ????"type":"view",??
  • ????"name":"歌手簡介",??
  • ????"url":"http://www.qq.com/"??
  • }??
  • ? ? 從上面可以看出,兩種類型的菜單除了type值不同之外,屬性也有差別。click類型的菜單有key屬性,而view類型的菜單沒有key屬性,與之對應(yīng)的是url屬性。通過上一篇的學(xué)習(xí)我們知道,key值是用于判斷用戶點(diǎn)擊了哪個click類型的菜單項。而 view類型的菜單沒有key屬性,目前無法在公眾賬號后臺判斷是否有用戶點(diǎn)擊了view類型的菜單項,也就沒辦法知道哪個用戶點(diǎn)擊了view類型的菜單項。


    建立view類型的菜單對象

    ? ? View類型的菜單有3個屬性:type、name和url。在上一篇文章中,我們創(chuàng)建了菜單項的基類Button,Button類只有一個屬性name。View類型的菜單對象也需要繼承Button類,代碼如下:

    [java]?view plaincopy
  • package?org.liufeng.weixin.pojo;??
  • ??
  • /**?
  • ?*?view類型的菜單?
  • ?*??
  • ?*?@author?liuyq?
  • ?*?@date?2013-04-10?
  • ?*/??
  • public?class?ViewButton?extends?Button?{??
  • ????private?String?type;??
  • ????private?String?url;??
  • ??
  • ????public?String?getType()?{??
  • ????????return?type;??
  • ????}??
  • ??
  • ????public?void?setType(String?type)?{??
  • ????????this.type?=?type;??
  • ????}??
  • ??
  • ????public?String?getUrl()?{??
  • ????????return?url;??
  • ????}??
  • ??
  • ????public?void?setUrl(String?url)?{??
  • ????????this.url?=?url;??
  • ????}??
  • }??

  • 創(chuàng)建帶view類型的菜單示例

    ? ? 我們對前一篇文章中給出的菜單創(chuàng)建代碼進(jìn)行調(diào)整,增加view類型的菜單項,完整的菜單創(chuàng)建代碼如下:

    [java]?view plaincopy
  • package?org.liufeng.weixin.main;??
  • ??
  • import?org.liufeng.weixin.pojo.AccessToken;??
  • import?org.liufeng.weixin.pojo.Button;??
  • import?org.liufeng.weixin.pojo.CommonButton;??
  • import?org.liufeng.weixin.pojo.ComplexButton;??
  • import?org.liufeng.weixin.pojo.Menu;??
  • import?org.liufeng.weixin.pojo.ViewButton;??
  • import?org.liufeng.weixin.util.WeixinUtil;??
  • import?org.slf4j.Logger;??
  • import?org.slf4j.LoggerFactory;??
  • ??
  • /**?
  • ?*?菜單管理器類?
  • ?*??
  • ?*?@author?liufeng?
  • ?*?@date?2013-08-08?
  • ?*/??
  • public?class?MenuManager?{??
  • ????private?static?Logger?log?=?LoggerFactory.getLogger(MenuManager.class);??
  • ??
  • ????public?static?void?main(String[]?args)?{??
  • ????????//?第三方用戶唯一憑證??
  • ????????String?appId?=?"000000000000000000";??
  • ????????//?第三方用戶唯一憑證密鑰??
  • ????????String?appSecret?=?"00000000000000000000000000000000";??
  • ??
  • ????????//?調(diào)用接口獲取access_token??
  • ????????AccessToken?at?=?WeixinUtil.getAccessToken(appId,?appSecret);??
  • ??
  • ????????if?(null?!=?at)?{??
  • ????????????//?調(diào)用接口創(chuàng)建菜單??
  • ????????????int?result?=?WeixinUtil.createMenu(getMenu(),?at.getToken());??
  • ??
  • ????????????//?判斷菜單創(chuàng)建結(jié)果??
  • ????????????if?(0?==?result)??
  • ????????????????log.info("菜單創(chuàng)建成功!");??
  • ????????????else??
  • ????????????????log.info("菜單創(chuàng)建失敗,錯誤碼:"?+?result);??
  • ????????}??
  • ????}??
  • ??
  • ????/**?
  • ?????*?組裝菜單數(shù)據(jù)?
  • ?????*??
  • ?????*?@return?
  • ?????*/??
  • ????private?static?Menu?getMenu()?{??
  • ????????CommonButton?btn11?=?new?CommonButton();??
  • ????????btn11.setName("天氣預(yù)報");??
  • ????????btn11.setType("click");??
  • ????????btn11.setKey("11");??
  • ??
  • ????????CommonButton?btn12?=?new?CommonButton();??
  • ????????btn12.setName("公交查詢");??
  • ????????btn12.setType("click");??
  • ????????btn12.setKey("12");??
  • ??
  • ????????CommonButton?btn13?=?new?CommonButton();??
  • ????????btn13.setName("周邊搜索");??
  • ????????btn13.setType("click");??
  • ????????btn13.setKey("13");??
  • ??
  • ????????CommonButton?btn14?=?new?CommonButton();??
  • ????????btn14.setName("歷史上的今天");??
  • ????????btn14.setType("click");??
  • ????????btn14.setKey("14");??
  • ??????????
  • ????????CommonButton?btn15?=?new?CommonButton();??
  • ????????btn15.setName("電影排行榜");??
  • ????????btn15.setType("click");??
  • ????????btn15.setKey("32");??
  • ??
  • ????????CommonButton?btn21?=?new?CommonButton();??
  • ????????btn21.setName("歌曲點(diǎn)播");??
  • ????????btn21.setType("click");??
  • ????????btn21.setKey("21");??
  • ??
  • ????????CommonButton?btn22?=?new?CommonButton();??
  • ????????btn22.setName("經(jīng)典游戲");??
  • ????????btn22.setType("click");??
  • ????????btn22.setKey("22");??
  • ??
  • ????????CommonButton?btn23?=?new?CommonButton();??
  • ????????btn23.setName("美女電臺");??
  • ????????btn23.setType("click");??
  • ????????btn23.setKey("23");??
  • ??
  • ????????CommonButton?btn24?=?new?CommonButton();??
  • ????????btn24.setName("人臉識別");??
  • ????????btn24.setType("click");??
  • ????????btn24.setKey("24");??
  • ??
  • ????????CommonButton?btn25?=?new?CommonButton();??
  • ????????btn25.setName("聊天嘮嗑");??
  • ????????btn25.setType("click");??
  • ????????btn25.setKey("25");??
  • ??
  • ????????CommonButton?btn31?=?new?CommonButton();??
  • ????????btn31.setName("Q友圈");??
  • ????????btn31.setType("click");??
  • ????????btn31.setKey("31");??
  • ??
  • ????????CommonButton?btn33?=?new?CommonButton();??
  • ????????btn33.setName("幽默笑話");??
  • ????????btn33.setType("click");??
  • ????????btn33.setKey("33");??
  • ??????????
  • ????????CommonButton?btn34?=?new?CommonButton();??
  • ????????btn34.setName("用戶反饋");??
  • ????????btn34.setType("click");??
  • ????????btn34.setKey("34");??
  • ??????????
  • ????????CommonButton?btn35?=?new?CommonButton();??
  • ????????btn35.setName("關(guān)于我們");??
  • ????????btn35.setType("click");??
  • ????????btn35.setKey("35");??
  • ??????????
  • ????????ViewButton?btn32?=?new?ViewButton();??
  • ????????btn32.setName("使用幫助");??
  • ????????btn32.setType("view");??
  • ????????btn32.setUrl("http://liufeng.gotoip2.com/xiaoqrobot/help.jsp");??
  • ??
  • ????????ComplexButton?mainBtn1?=?new?ComplexButton();??
  • ????????mainBtn1.setName("生活助手");??
  • ????????mainBtn1.setSub_button(new?Button[]?{?btn11,?btn12,?btn13,?btn14,?btn15?});??
  • ??
  • ????????ComplexButton?mainBtn2?=?new?ComplexButton();??
  • ????????mainBtn2.setName("休閑驛站");??
  • ????????mainBtn2.setSub_button(new?Button[]?{?btn21,?btn22,?btn23,?btn24,?btn25?});??
  • ??
  • ????????ComplexButton?mainBtn3?=?new?ComplexButton();??
  • ????????mainBtn3.setName("更多");??
  • ????????mainBtn3.setSub_button(new?Button[]?{?btn31,?btn33,?btn34,?btn35,?btn32?});??
  • ??
  • ????????/**?
  • ?????????*?這是公眾號xiaoqrobot目前的菜單結(jié)構(gòu),每個一級菜單都有二級菜單項<br>?
  • ?????????*??
  • ?????????*?在某個一級菜單下沒有二級菜單的情況,menu該如何定義呢?<br>?
  • ?????????*?比如,第三個一級菜單項不是“更多體驗”,而直接是“幽默笑話”,那么menu應(yīng)該這樣定義:<br>?
  • ?????????*?menu.setButton(new?Button[]?{?mainBtn1,?mainBtn2,?btn33?});?
  • ?????????*/??
  • ????????Menu?menu?=?new?Menu();??
  • ????????menu.setButton(new?Button[]?{?mainBtn1,?mainBtn2,?mainBtn3?});??
  • ??
  • ????????return?menu;??
  • ????}??
  • }??
  • 119~122行代碼就是用于創(chuàng)建view類型菜單項的。上面的菜單結(jié)構(gòu)也是小q機(jī)器人(微信號:xiaoqrobot)目前在使用的,讀者可以對照著理解。


    新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎!定制產(chǎn)品紅包拿不停!

    總結(jié)

    以上是生活随笔為你收集整理的微信公众帐号开发教程第15篇-自定义菜单的view类型(访问网页)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。