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

微信公众号开发-自定义菜单

时间:2023-11-16 02:37:55

相关推荐

微信公众号开发-自定义菜单

微信公众号开发-自定义菜单

下案例仅供参考,但保证有效可用!!!

文章目录

微信公众号开发-自定义菜单一、应用场景二、功能实现1.服务器配置2.access_token 获取3.代码实现1.javaBean创建2.创建菜单总结

一、应用场景

1.在启用token验证后,无法通过公众平台编辑菜单,需要通过API编辑菜单2.想要在自己的系统中进行相关菜单编辑,而不通过登录公众号进行编辑

二、功能实现

以下示例以点击菜单跳转网页为例,其它菜单功能请参考官网自定义菜单。

1.服务器配置

微信公众号-服务器配置(token验证)已开通的请忽略

2.access_token 获取

可参考 微信公众号消息推送开发(模板消息):开发实现(二)获取access_token

3.代码实现

1.javaBean创建

1.分别创建SubMenu.java和ParentMenu.java实体类用于封装请求体(不创建实体类的话直接封装josn字符串也可以)

SubMenu.java

package com.lvyq.wechat.menu;/*** @author lvyq* @version 1.0* @description: 二级菜单数组,个数应为1~5个* @date /7/12 11:00*/public class SubMenu {/*** 菜单标题,不超过16个字节,子菜单不超过60个字节*//*** 菜单的响应动作类型,view表示网页类型,click表示点击类型,miniprogram表示小程序类型*/private String type;private String name;/*** 菜单KEY值,用于消息接口推送,不超过128字节 click等点击类型必须*/private String key;/***网页 链接,用户点击菜单可打开链接,不超过1024字节。* type为miniprogram时,不支持小程序的老版本客户端将打开本url。* view、miniprogram类型必须*/private String url;/*** miniprogram类型必须小程序的appid(仅认证公众号可配置)*/private String appid;/*** miniprogram类型必须* 小程序的页面路径*/private String pagepath;/*** article_id类型和article_view_limited类型必须* 发布后获得的合法 article_id*/private String article_id;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 String getKey() {return key;}public void setKey(String key) {this.key = key;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public String getAppid() {return appid;}public void setAppid(String appid) {this.appid = appid;}public String getPagepath() {return pagepath;}public void setPagepath(String pagepath) {this.pagepath = pagepath;}public String getArticle_id() {return article_id;}public void setArticle_id(String article_id) {this.article_id = article_id;}}

ParentMenu.java

import java.util.List;/*** @author lvyq* @version 1.0 按钮 一级菜单数组,个数应为1~3个* @description: TODO* @date /7/12 10:49*/public class ParentMenu extends SubMenu {/*** 二级菜单数组,个数应为1~5个*/private List<SubMenu> sub_button;public List<SubMenu> getSub_button() {return sub_button;}public void setSub_button(List<SubMenu> sub_button) {this.sub_button = sub_button;}}

2.创建菜单

根据以下demo修改即可,access_token的获取方式,上文已经给了传送门

创建MenuCreate.java

package com.lvyq.wechat.menu;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import java.io.*;import .URL;import .URLConnection;import java.util.ArrayList;import java.util.List;/*** @author lvyq* @version 1.0* @description: TODO* @date /7/11 16:08*/public class MenuCreate {public static final String ACCESS_TOKEN ="xxxx";public static String MENU_CREATE="https://api./cgi-bin/menu/create?access_token=ACCESS_TOKEN";public static void main(String[] args) {List<ParentMenu> button = new ArrayList<>();ParentMenu parentMenu = new ParentMenu();parentMenu.setName("百度CSDN");List<SubMenu> subButtons = new ArrayList<>();SubMenu subButton = new SubMenu();subButton.setType("view");subButton.setName("百度一下");subButton.setUrl("/");subButtons.add(subButton);SubMenu subButton2 = new SubMenu();subButton2.setType("view");subButton2.setName("CSDN");subButton2.setUrl("/");subButtons.add(subButton2);parentMenu.setSub_button(subButtons);button.add(parentMenu);JSONObject mav = new JSONObject();mav.put("button",JSON.toJSON(button));MENU_CREATE=MENU_CREATE.replace("ACCESS_TOKEN",ACCESS_TOKEN);sendPost(MENU_CREATE, mav.toJSONString());}public static String sendPost(String url, String param) {PrintWriter out = null;BufferedReader in = null;String result = "";try {URL realUrl = new URL(url);URLConnection conn = realUrl.openConnection();conn.setRequestProperty("accept", "*/*");conn.setRequestProperty("connection", "Keep-Alive");conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");conn.setDoOutput(true);conn.setDoInput(true);out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "UTF-8"));out.print(param);out.flush();String line;for(in = new BufferedReader(new InputStreamReader(conn.getInputStream())); (line = in.readLine()) != null; result = result + line) {}} catch (Exception var16) {System.out.println("发送 POST 请求出现异常!" + var16);var16.printStackTrace();} finally {try {if (out != null) {out.close();}if (in != null) {in.close();}} catch (IOException var15) {var15.printStackTrace();}}return result;}}

效果图:

总结

每次创建新的菜单时会直接覆盖,查询菜单和删除菜单就不说了,不常用

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