微信公眾號(hào)測(cè)試賬號(hào)自定義菜單的實(shí)例代碼
自定義菜單接口可實(shí)現(xiàn)多種類型按鈕,如下:
1、click:點(diǎn)擊推事件
用戶點(diǎn)擊click類型按鈕后,微信服務(wù)器會(huì)通過(guò)消息接口推送消息類型為event 的結(jié)構(gòu)給開(kāi)發(fā)者(參考消息接口指南),并且?guī)习粹o中開(kāi)發(fā)者填寫的key值,開(kāi)發(fā)者可以通過(guò)自定義的key值與用戶進(jìn)行交互;
2、view:跳轉(zhuǎn)URL
用戶點(diǎn)擊view類型按鈕后,微信客戶端將會(huì)打開(kāi)開(kāi)發(fā)者在按鈕中填寫的網(wǎng)頁(yè)URL,可與網(wǎng)頁(yè)授權(quán)獲取用戶基本信息接口結(jié)合,獲得用戶基本信息。
3、scancode_push:掃碼推事件
用戶點(diǎn)擊按鈕后,微信客戶端將調(diào)起掃一掃工具,完成掃碼操作后顯示掃描結(jié)果(如果是URL,將進(jìn)入U(xiǎn)RL),且會(huì)將掃碼的結(jié)果傳給開(kāi)發(fā)者,開(kāi)發(fā)者可以下發(fā)消息。
4、scancode_waitmsg:掃碼推事件且彈出“消息接收中”提示框
用戶點(diǎn)擊按鈕后,微信客戶端將調(diào)起掃一掃工具,完成掃碼操作后,將掃碼的結(jié)果傳給開(kāi)發(fā)者,同時(shí)收起掃一掃工具,然后彈出“消息接收中”提示框,隨后可能會(huì)收到開(kāi)發(fā)者下發(fā)的消息。
5、pic_sysphoto:彈出系統(tǒng)拍照發(fā)圖
用戶點(diǎn)擊按鈕后,微信客戶端將調(diào)起系統(tǒng)相機(jī),完成拍照操作后,會(huì)將拍攝的相片發(fā)送給開(kāi)發(fā)者,并推送事件給開(kāi)發(fā)者,同時(shí)收起系統(tǒng)相機(jī),隨后可能會(huì)收到開(kāi)發(fā)者下發(fā)的消息。
6、pic_photo_or_album:彈出拍照或者相冊(cè)發(fā)圖
用戶點(diǎn)擊按鈕后,微信客戶端將彈出選擇器供用戶選擇“拍照”或者“從手機(jī)相冊(cè)選擇”。用戶選擇后即走其他兩種流程。
7、pic_weixin:彈出微信相冊(cè)發(fā)圖器
用戶點(diǎn)擊按鈕后,微信客戶端將調(diào)起微信相冊(cè),完成選擇操作后,將選擇的相片發(fā)送給開(kāi)發(fā)者的服務(wù)器,并推送事件給開(kāi)發(fā)者,同時(shí)收起相冊(cè),隨后可能會(huì)收到開(kāi)發(fā)者下發(fā)的消息。
8、location_select:彈出地理位置選擇器
用戶點(diǎn)擊按鈕后,微信客戶端將調(diào)起地理位置選擇工具,完成選擇操作后,將選擇的地理位置發(fā)送給開(kāi)發(fā)者的服務(wù)器,同時(shí)收起位置選擇工具,隨后可能會(huì)收到開(kāi)發(fā)者下發(fā)的消息。
9、media_id:下發(fā)消息(除文本消息)
用戶點(diǎn)擊media_id類型按鈕后,微信服務(wù)器會(huì)將開(kāi)發(fā)者填寫的永久素材id對(duì)應(yīng)的素材下發(fā)給用戶,永久素材類型可以是圖片、音頻、視頻、圖文消息。請(qǐng)注意:永久素材id必須是在“素材管理/新增永久素材”接口上傳后獲得的合法id。
10、view_limited:跳轉(zhuǎn)圖文消息URL
用戶點(diǎn)擊view_limited類型按鈕后,微信客戶端將打開(kāi)開(kāi)發(fā)者在按鈕中填寫的永久素材id對(duì)應(yīng)的圖文消息URL,永久素材類型只支持圖文消息。請(qǐng)注意:永久素材id必須是在“素材管理/新增永久素材”接口上傳后獲得的合法id。
請(qǐng)注意,3到8的所有事件,僅支持微信iPhone5.4.1以上版本,和Android5.4以上版本的微信用戶,舊版本微信用戶點(diǎn)擊后將沒(méi)有回應(yīng),開(kāi)發(fā)者也不能正常接收到事件推送。9和10,是專門給第三方平臺(tái)旗下未微信認(rèn)證(具體而言,是資質(zhì)認(rèn)證未通過(guò))的訂閱號(hào)準(zhǔn)備的事件類型,它們是沒(méi)有事件推送的,能力相對(duì)受限,其他類型的公眾號(hào)不必使用。
接口調(diào)用請(qǐng)求說(shuō)明
http請(qǐng)求方式:POST(請(qǐng)使用https協(xié)議) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN
click和view的請(qǐng)求示例
{
“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”
}]
}]
}
其他新增按鈕類型的請(qǐng)求示例
{
“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”: “拍照或者相冊(cè)發(fā)圖”,
“key”: “rselfmenu_1_1”,
“sub_button”: [ ]
},
{
“type”: “pic_weixin”,
“name”: “微信相冊(cè)發(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ù)說(shuō)明
參數(shù) 是否必須 說(shuō)明
button 是 一級(jí)菜單數(shù)組,個(gè)數(shù)應(yīng)為1~3個(gè)
sub_button 否 二級(jí)菜單數(shù)組,個(gè)數(shù)應(yīng)為1~5個(gè)
type 是 菜單的響應(yīng)動(dòng)作類型
name 是 菜單標(biāo)題,不超過(guò)16個(gè)字節(jié),子菜單不超過(guò)40個(gè)字節(jié)
key click等點(diǎn)擊類型必須 菜單KEY值,用于消息接口推送,不超過(guò)128字節(jié)
url view類型必須 網(wǎng)頁(yè)鏈接,用戶點(diǎn)擊菜單可打開(kāi)鏈接,不超過(guò)1024字節(jié)
media_id media_id類型和view_limited類型必須 調(diào)用新增永久素材接口返回的合法media_id
返回結(jié)果
正確時(shí)的返回JSON數(shù)據(jù)包如下:
{“errcode”:0,”errmsg”:”ok”}
錯(cuò)誤時(shí)的返回JSON數(shù)據(jù)包如下(示例為無(wú)效菜單名長(zhǎng)度):
{“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);
}
}
}
以上所述是小編給大家介紹的微信公眾號(hào)測(cè)試賬號(hào)自定義菜單的實(shí)例代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
System.getProperty(user.dir)定位問(wèn)題解析
System.getProperty(user.dir) 獲取的是啟動(dòng)項(xiàng)目的容器位置,用IDEA是項(xiàng)目的根目錄,部署在tomcat上是tomcat的啟動(dòng)路徑,即tomcat/bin的位置,這篇文章主要介紹了System.getProperty(user.dir)定位問(wèn)題,需要的朋友可以參考下2023-05-05
詳解一個(gè)簡(jiǎn)單的Servlet容器的設(shè)計(jì)與實(shí)現(xiàn)
Servlet算是Java Web開(kāi)發(fā)請(qǐng)求鏈路調(diào)用棧中底層的一個(gè)技術(shù),而了解一個(gè)Servlet容器的實(shí)現(xiàn)有助于更好的理解JavaWeb開(kāi)發(fā),所以下面就來(lái)看看如何設(shè)計(jì)與實(shí)現(xiàn)一個(gè)簡(jiǎn)單的Servlet容器吧2023-07-07
淺析JAVA常用JDBC連接數(shù)據(jù)庫(kù)的方法總結(jié)
本篇文章是對(duì)在JAVA中常用JDBC連接數(shù)據(jù)庫(kù)的方法進(jìn)行了詳細(xì)的總結(jié)分析,需要的朋友參考下2013-07-07
Spring Boot中使用LDAP來(lái)統(tǒng)一管理用戶信息的示例
本篇文章主要介紹了Spring Boot中使用LDAP來(lái)統(tǒng)一管理用戶信息的示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
Jenkins Pipeline 部署 SpringBoot 應(yīng)用的教程詳解
這篇文章主要介紹了Jenkins Pipeline 部署 SpringBoot 應(yīng)用的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07

