微信公眾號測試賬號自定義菜單的實例代碼
自定義菜單接口可實現(xiàn)多種類型按鈕,如下:
1、click:點擊推事件
用戶點擊click類型按鈕后,微信服務器會通過消息接口推送消息類型為event 的結(jié)構(gòu)給開發(fā)者(參考消息接口指南),并且?guī)习粹o中開發(fā)者填寫的key值,開發(fā)者可以通過自定義的key值與用戶進行交互;
2、view:跳轉(zhuǎn)URL
用戶點擊view類型按鈕后,微信客戶端將會打開開發(fā)者在按鈕中填寫的網(wǎng)頁URL,可與網(wǎng)頁授權(quán)獲取用戶基本信息接口結(jié)合,獲得用戶基本信息。
3、scancode_push:掃碼推事件
用戶點擊按鈕后,微信客戶端將調(diào)起掃一掃工具,完成掃碼操作后顯示掃描結(jié)果(如果是URL,將進入URL),且會將掃碼的結(jié)果傳給開發(fā)者,開發(fā)者可以下發(fā)消息。
4、scancode_waitmsg:掃碼推事件且彈出“消息接收中”提示框
用戶點擊按鈕后,微信客戶端將調(diào)起掃一掃工具,完成掃碼操作后,將掃碼的結(jié)果傳給開發(fā)者,同時收起掃一掃工具,然后彈出“消息接收中”提示框,隨后可能會收到開發(fā)者下發(fā)的消息。
5、pic_sysphoto:彈出系統(tǒng)拍照發(fā)圖
用戶點擊按鈕后,微信客戶端將調(diào)起系統(tǒng)相機,完成拍照操作后,會將拍攝的相片發(fā)送給開發(fā)者,并推送事件給開發(fā)者,同時收起系統(tǒng)相機,隨后可能會收到開發(fā)者下發(fā)的消息。
6、pic_photo_or_album:彈出拍照或者相冊發(fā)圖
用戶點擊按鈕后,微信客戶端將彈出選擇器供用戶選擇“拍照”或者“從手機相冊選擇”。用戶選擇后即走其他兩種流程。
7、pic_weixin:彈出微信相冊發(fā)圖器
用戶點擊按鈕后,微信客戶端將調(diào)起微信相冊,完成選擇操作后,將選擇的相片發(fā)送給開發(fā)者的服務器,并推送事件給開發(fā)者,同時收起相冊,隨后可能會收到開發(fā)者下發(fā)的消息。
8、location_select:彈出地理位置選擇器
用戶點擊按鈕后,微信客戶端將調(diào)起地理位置選擇工具,完成選擇操作后,將選擇的地理位置發(fā)送給開發(fā)者的服務器,同時收起位置選擇工具,隨后可能會收到開發(fā)者下發(fā)的消息。
9、media_id:下發(fā)消息(除文本消息)
用戶點擊media_id類型按鈕后,微信服務器會將開發(fā)者填寫的永久素材id對應的素材下發(fā)給用戶,永久素材類型可以是圖片、音頻、視頻、圖文消息。請注意:永久素材id必須是在“素材管理/新增永久素材”接口上傳后獲得的合法id。
10、view_limited:跳轉(zhuǎn)圖文消息URL
用戶點擊view_limited類型按鈕后,微信客戶端將打開開發(fā)者在按鈕中填寫的永久素材id對應的圖文消息URL,永久素材類型只支持圖文消息。請注意:永久素材id必須是在“素材管理/新增永久素材”接口上傳后獲得的合法id。
請注意,3到8的所有事件,僅支持微信iPhone5.4.1以上版本,和Android5.4以上版本的微信用戶,舊版本微信用戶點擊后將沒有回應,開發(fā)者也不能正常接收到事件推送。9和10,是專門給第三方平臺旗下未微信認證(具體而言,是資質(zhì)認證未通過)的訂閱號準備的事件類型,它們是沒有事件推送的,能力相對受限,其他類型的公眾號不必使用。
接口調(diào)用請求說明
http請求方式:POST(請使用https協(xié)議) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN
click和view的請求示例
{ “button”:[ { “type”:”click”, “name”:”今日歌曲”, “key”:”V1001_TODAY_MUSIC” }, { “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” }] }] }
其他新增按鈕類型的請求示例
{ “button”: [ { “name”: “掃碼”, “sub_button”: [ { “type”: “scancode_waitmsg”, “name”: “掃碼帶提示”, “key”: “rselfmenu_0_0”, “sub_button”: [ ] }, { “type”: “scancode_push”, “name”: “掃碼推事件”, “key”: “rselfmenu_0_1”, “sub_button”: [ ] } ] }, { “name”: “發(fā)圖”, “sub_button”: [ { “type”: “pic_sysphoto”, “name”: “系統(tǒng)拍照發(fā)圖”, “key”: “rselfmenu_1_0”, “sub_button”: [ ] }, { “type”: “pic_photo_or_album”, “name”: “拍照或者相冊發(fā)圖”, “key”: “rselfmenu_1_1”, “sub_button”: [ ] }, { “type”: “pic_weixin”, “name”: “微信相冊發(fā)圖”, “key”: “rselfmenu_1_2”, “sub_button”: [ ] } ] }, { “name”: “發(fā)送位置”, “type”: “l(fā)ocation_select”, “key”: “rselfmenu_2_0” }, { “type”: “media_id”, “name”: “圖片”, “media_id”: “MEDIA_ID1” }, { “type”: “view_limited”, “name”: “圖文消息”, “media_id”: “MEDIA_ID2” } ] }
參數(shù)說明
參數(shù) 是否必須 說明
button 是 一級菜單數(shù)組,個數(shù)應為1~3個
sub_button 否 二級菜單數(shù)組,個數(shù)應為1~5個
type 是 菜單的響應動作類型
name 是 菜單標題,不超過16個字節(jié),子菜單不超過40個字節(jié)
key click等點擊類型必須 菜單KEY值,用于消息接口推送,不超過128字節(jié)
url view類型必須 網(wǎng)頁鏈接,用戶點擊菜單可打開鏈接,不超過1024字節(jié)
media_id media_id類型和view_limited類型必須 調(diào)用新增永久素材接口返回的合法media_id
返回結(jié)果
正確時的返回JSON數(shù)據(jù)包如下:
{“errcode”:0,”errmsg”:”ok”}
錯誤時的返回JSON數(shù)據(jù)包如下(示例為無效菜單名長度):
{“errcode”:40018,”errmsg”:”invalid button name size”}
以下的bean根據(jù)json格式拼接而成。。。
package org.ssm.maven.test1.menu; public class Button { private String type; private String name; private Button[] sub_button; public String getType() { return type; } public void setType(String type) { this.type = type; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Button[] getSub_button() { return sub_button; } public void setSub_button(Button[] sub_button) { this.sub_button = sub_button; } }
package org.ssm.maven.test1.menu; public class ClickButton extends Button { private String key; public String getKey() { return key; } public void setKey(String key) { this.key = key; } } package org.ssm.maven.test1.menu; public class ViewButton extends Button { private String url; public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } }
根據(jù)菜單
package org.ssm.maven.test1.menu; public class Menu { private Button[] button; public Button[] getButton() { return button; } public void setButton(Button[] button) { this.button = button; } }
初始化菜單
public static Menu initMenu(){ Menu menu = new Menu(); ClickButton clickButton = new ClickButton(); clickButton.setKey("clickButton"); clickButton.setType("click"); clickButton.setName("clickMenu"); ViewButton viewButton = new ViewButton(); viewButton.setName("viewButton"); viewButton.setType("view"); viewButton.setUrl("http://www.baidu.com"); ClickButton clickButton1 = new ClickButton(); clickButton1.setKey("scanButton"); clickButton1.setType("scancode_push"); clickButton1.setName("scanButton"); ClickButton clickButton2 = new ClickButton(); clickButton2.setKey("locationButton"); clickButton2.setType("location_select"); clickButton2.setName("locationButton"); Button button = new Button(); button.setName("Menu"); button.setSub_button(new Button[]{clickButton1,clickButton2}); menu.setButton(new Button[]{clickButton,viewButton,button}); return menu; } //創(chuàng)建菜單的url拼接 public static int createMenu(String menu, String token){ String url = CREATE_MENU_URL.replace("ACCESS_TOKEN", token); int result = 0; JSONObject jsonObject = doPostStr(url, menu); if(jsonObject != null){ result = jsonObject.getInt("errcode"); } return result; } //查詢菜單的url的拼接 public static JSONObject queryMenu(String token){ String url = QUERY_MENU_URL.replace("ACCESS_TOKEN", token); JSONObject jsonObject = doGetUrl(url); return jsonObject; }
package org.ssm.maven.test1; import java.sql.Timestamp; import org.ssm.maven.test1.model.AccessToken; import org.ssm.maven.test1.util.WechatUtil; import org.ssm.maven.trans.util.TransUtil; import net.sf.json.JSONObject; public class WechatUtilTest { public static void main(String[] args) { AccessToken accessToken = WechatUtil.getAccessToken(); System.out.println("accessToken=>" + accessToken.getToken()); System.out.println("expiresIn=>" + accessToken.getExpiresIn()); JSONObject fromObject = JSONObject.fromObject(WechatUtil.initMenu()); int result = WechatUtil.createMenu(fromObject.toString(), accessToken.getToken()); if (result == 0) { System.out.println("create menu success"); } else { System.out.println("error code : " + result); } } }
以上所述是小編給大家介紹的微信公眾號測試賬號自定義菜單的實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
System.getProperty(user.dir)定位問題解析
System.getProperty(user.dir) 獲取的是啟動項目的容器位置,用IDEA是項目的根目錄,部署在tomcat上是tomcat的啟動路徑,即tomcat/bin的位置,這篇文章主要介紹了System.getProperty(user.dir)定位問題,需要的朋友可以參考下2023-05-05淺析JAVA常用JDBC連接數(shù)據(jù)庫的方法總結(jié)
本篇文章是對在JAVA中常用JDBC連接數(shù)據(jù)庫的方法進行了詳細的總結(jié)分析,需要的朋友參考下2013-07-07Spring Boot中使用LDAP來統(tǒng)一管理用戶信息的示例
本篇文章主要介紹了Spring Boot中使用LDAP來統(tǒng)一管理用戶信息的示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01Jenkins Pipeline 部署 SpringBoot 應用的教程詳解
這篇文章主要介紹了Jenkins Pipeline 部署 SpringBoot 應用的詳細教程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07