2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 微信公众号——自定义菜单的创建

微信公众号——自定义菜单的创建

时间:2021-12-23 16:10:05

相关推荐

微信公众号——自定义菜单的创建

自定义菜单创建微信公众号官方文档

1、自定义菜单能够帮助公众号丰富界面,让用户更好更快地理解公众号的功能。

开启自定义菜单后,公众号界面如图所示:

注意:

自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“...”代替。创建自定义菜单后,菜单的刷新策略是,在用户进入公众号会话页或公众号profile页时,如果发现上一次拉取菜单的请求在5分钟以前,就会拉取一下菜单,如果菜单有更新,就会刷新客户端的菜单。测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果。​

自定义菜单的按钮类型有很多,比如click、view、scancode_push、scancode_waitmsg等

click:点击推事件用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互;view:跳转URL用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的网页URL,可与网页授权获取用户基本信息接口结合,获得用户基本信息。scancode_push:扫码推事件用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后显示扫描结果(如果是URL,将进入URL),且会将扫码的结果传给开发者,开发者可以下发消息。scancode_waitmsg:扫码推事件且弹出“消息接收中”提示框用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后,将扫码的结果传给开发者,同时收起扫一扫工具,然后弹出“消息接收中”提示框,随后可能会收到开发者下发的消息。pic_sysphoto:弹出系统拍照发图用户点击按钮后,微信客户端将调起系统相机,完成拍照操作后,会将拍摄的相片发送给开发者,并推送事件给开发者,同时收起系统相机,随后可能会收到开发者下发的消息。pic_photo_or_album:弹出拍照或者相册发图用户点击按钮后,微信客户端将弹出选择器供用户选择“拍照”或者“从手机相册选择”。用户选择后即走其他两种流程。pic_weixin:弹出微信相册发图器用户点击按钮后,微信客户端将调起微信相册,完成选择操作后,将选择的相片发送给开发者的服务器,并推送事件给开发者,同时收起相册,随后可能会收到开发者下发的消息。location_select:弹出地理位置选择器用户点击按钮后,微信客户端将调起地理位置选择工具,完成选择操作后,将选择的地理位置发送给开发者的服务器,同时收起位置选择工具,随后可能会收到开发者下发的消息。media_id:下发消息(除文本消息)用户点击media_id类型按钮后,微信服务器会将开发者填写的永久素材id对应的素材下发给用户,永久素材类型可以是图片、音频、视频、图文消息。请注意:永久素材id必须是在“素材管理/新增永久素材”接口上传后获得的合法id。view_limited:跳转图文消息URL用户点击view_limited类型按钮后,微信客户端将打开开发者在按钮中填写的永久素材id对应的图文消息URL,永久素材类型只支持图文消息。请注意:永久素材id必须是在“素材管理/新增永久素材”接口上传后获得的合法id。​

请注意,3到8的所有事件,仅支持微信iPhone5.4.1以上版本,和Android5.4以上版本的微信用户,旧版本微信用户点击后将没有回应,开发者也不能正常接收到事件推送。9和10,是专门给第三方平台旗下未微信认证(具体而言,是资质认证未通过)的订阅号准备的事件类型,它们是没有事件推送的,能力相对受限,其他类型的公众号不必使用。

接口调用请求说明

http请求方式:POST(请使用https协议)

https://api./cgi-bin/menu/create?access_token=ACCESS_TOKEN

菜单的创建以click、view两种进行示例,其他按钮方式所传入的json数据格式参考自定义菜单创建微信公众号官方文档

2、json字符串所对应的对象封装

click和view的请求示例:

{"button":[{"type":"click","name":"今日歌曲","key":"V1001_TODAY_MUSIC"},{"name":"菜单","sub_button":[{"type":"view","name":"搜索","url":"/"},{"type":"miniprogram","name":"wxa","url":"http://mp.","appid":"wx286b93c14bbf93aa","pagepath":"pages/lunar/index"},{"type":"click","name":"赞一下我们","key":"V1001_GOOD"}]}]}

通过这段示例可以看出创建按钮需传入一段json字符串,而且一个button键对应按钮所形成的数组(一级菜单),在按钮数组中还存在sub_button键所对应的子按钮数组(二级菜单);所以最外层可以创建为WxButton类,在类中只有一个属性,属性名为button,类型为List。观察发现每个按钮都有name字段,所以创建一个BaseButton抽象类,再类中只提供一个属性,属性名为name,类型为String。每个不同类型的按钮都继承自BaseButton类去构建不同类型的pojo类;如果菜单中包含二级菜单,就创建类继承自BaseButton并提供一个名为sub_button的List<BaseButton>类型的属性,来代表一级菜单并包含子菜单这种情形。

参数说明

3、Java示例

3.1、创建抽象类BaseButton

public class BaseButton {/*** 菜单名字*/private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public BaseButton(String name) {this.name = name;}}

3.2、创建类型为Click的ClickButton类,并继承自BaseButton

public class ClickButton extends BaseButton{/*** 菜单类型*/private String type = "click";/*** 唯一键*/private String key;public String getType() {return type;}public void setType(String type) {this.type = type;}public String getKey() {return key;}public void setKey(String key) {this.key = key;}public ClickButton(String name, String key) {super(name);this.key = key;}}

3.3、创建按钮类型为View的ViewButton类,并继承自BaseButton

public class ViewButton extends BaseButton {/*** 菜单类型*/private String type = "view";/*** 跳转地址*/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;}public ViewButton(String name, String url) {super(name);this.url = url;}}

3.4、创建有子菜单的菜单,类名为SubButton,继承自BaseButton

public class SubButton extends BaseButton{private List<BaseButton> sub_button = new ArrayList<>();public List<BaseButton> getSub_button() {return sub_button;}public void setSub_button(List<BaseButton> sub_button) {this.sub_button = sub_button;}public SubButton(String name) {super(name);}}

3.5、创建名为WxButton的类用于生成最终json字符串的类

public class WxButton {private List<BaseButton> button = new ArrayList<>();public List<BaseButton> getButton() {return button;}public void setButton(List<BaseButton> button) {this.button = button;}}

4、利用封装的pojo创建自定义菜单

常见名为CreatButtonUtil,在main方法中调用creatWxButton私有类方法进行菜单的创建

4.1、 将所需要用到的文字定义为静态常量

private static final String CREAT_MENU_URL = "https://api./cgi-bin/menu/create?access_token=ACCESS_TOKEN";private static final String ONE_MENU_TITLE = "查找路线";public static final String ONE_MENU_TITLEKEY = "查找路线KEY";private static final String TWO_MENU_TITLE = "产品服务";private static final String TWO_MENU_SUBTITLE_ONE = "服务范围";private static final String TWO_MENU_SUBTITLE_ONEURL = "/fangan/";private static final String TWO_MENU_SUBOTITLE_TWO = "服务项目";private static final String TWO_MENU_SUBTITLE_TWOURL = "/a/youxuechanpin/";private static final String TWO_MENU_SUBTITLE_THREE = "新闻资讯";private static final String TWO_MENU_SUBTITLE_THREEURL = "/zixun/";private static final String THREE_MENU_TITLE = "艾派格";private static final String THREE_SUBTITLE_ONE = "私人订制";private static final String THREE_SUBTITLE_ONEKEY = "私人订制KEY";private static final String THREE_SUBTITLE_TWO = "关于我们";private static final String THREE_MENU_SUBTITLE_THREEURL = "/index.html";

4.2、创建creatWxButton私有类方法,在方法中创建菜单对象,并将对象转为json字符串, 调用NetManagerUtil所提供的post方法请求网络,传入所需要的参数,创建菜单

private static void creatWxButton() {//第一个菜单ClickButton oneButton = new ClickButton(ONE_MENU_TITLE,ONE_MENU_TITLEKEY);//第二个菜单SubButton twoButton = new SubButton(TWO_MENU_TITLE);//第二个菜单的子菜单ViewButton oneSubButton = new ViewButton(TWO_MENU_SUBTITLE_ONE,TWO_MENU_SUBTITLE_ONEURL);ViewButton twoSubButton = new ViewButton(TWO_MENU_SUBOTITLE_TWO,TWO_MENU_SUBTITLE_TWOURL);ViewButton threeSubButton = new ViewButton(TWO_MENU_SUBTITLE_THREE,TWO_MENU_SUBTITLE_THREEURL);twoButton.getSub_button().add(threeSubButton);twoButton.getSub_button().add(twoSubButton);twoButton.getSub_button().add(oneSubButton);//第三个菜单SubButton threeButton = new SubButton(THREE_MENU_TITLE);//第三个菜单的子菜单ClickButton subButtonOne = new ClickButton(THREE_SUBTITLE_ONE,THREE_SUBTITLE_ONEKEY);ViewButton subButtonTwo = new ViewButton(THREE_SUBTITLE_TWO,THREE_MENU_SUBTITLE_THREEURL);threeButton.getSub_button().add(subButtonOne);threeButton.getSub_button().add(subButtonTwo);//添加到button对象中WxButton wxButton = new WxButton();wxButton.getButton().add(oneButton);wxButton.getButton().add(twoButton);wxButton.getButton().add(threeButton);//转jsonString jsonStr = JSONObject.toJSONString(wxButton);//替换tokenString url = CREAT_MENU_URL.replace("ACCESS_TOKEN", GetWxAccessTokenUtil.getAccessToken2());//调用网络请求NetManagerUtil.post(url,jsonStr);}

4.3、在类中编写main方法进行测试:

public static void main(String[] args) {creatWxButton();}

返回结果

正确时的返回JSON数据包如下:

{"errcode":0,"errmsg":"ok"}

错误时的返回JSON数据包如下(示例为无效菜单名长度):

{"errcode":40018,"errmsg":"invalid button name size"}

当然还可以在 微信公众平台接口调试工具里面手动添加,修改。后续再更新手动添加的文章。。。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。