java版微信公众号开发之自定义菜单的创建

废话(不过还是必须得看):
在微信公众号启动开发者模式之后,微信公众号后台的自定义菜单便无法再使用!需要自己在服务器上进行自定义菜单的开发。自定义菜单接口地址: https://api.weixin.qq.com/cgi-bin/menu/create?access_token=accessToken"其中的accessToken的
获取在上面已经说过便不再多加赘述,自定义菜单创建的接口目前每日访问上限为1000次,菜单创建的时候最多只能有三个一级菜单,每个一级菜单最多有五个二级菜单。

注意:
值得注意的是呢,微信自定义菜单创建成功之后是有生效时间的,在官方的介绍上说的时间是24小时之内,一般会在5-6小时之内生效,但是我们平常肯定是不愿意去等待的,多无聊......有一个办法就是在项目启动并在微信后台启动开发者模式之后直接在浏览器路径中请求你自己写的创建菜单的路径,这样子的话你重新关注公众号之后你的自定义菜单就会生效,百试不爽......我曾经等的痛不欲生


逻辑:
在创建自定义菜单的时候必须将菜单数据整合成JSON类型的数据发送到微信服务器,拼接起来比较麻烦就没有使用这种方式,另外在网上又找的方式。另外就是自定义菜单有十种类型,我只用到过两种(CLICK和VIEW),其他的几种不做说明


1、首先创建几个Entity表示菜单
1)Button.java --表示菜单类的基类,一级菜单和二级菜单的Entity都继承此Entity
private String name;

2)ComplexButton.java --表示一级菜单
private String name; //菜单名称
private Button[] sub_button; //子级菜单,因为一个一级菜单可以有多个二级菜单,所以这儿使用二级 菜单类型的集合

3)CommonButton.java --表示二级菜单(CLICK类型)
private String type; //菜单类型
private String key; //key值

4)ViewButton.java --表示二级菜单(VIEW类型)
private String type; //菜单类型
private String url; //view路径值

4)Menu.java --表示要创建的菜单
private ComplexButton[] button;


至于上面的三个Entity为什么有这几个属性自己参考微信公众号的开发者文档,上面有具体说明

2、创建菜单的Util
public class MenuUtil {
/**
* 封装菜单数据
* */
public static Menu getMenu(){
//首先创建二级菜单
CommonButton cb_1 = new CommonButton();
cb_1.setKey("key1");
cb_1.setName("子菜单1");
cb_1.setType("click");


CommonButton cb_2 = new CommonButton();
cb_2.setKey("key2");
cb_2.setName("子菜单2");
cb_2.setType("click");

//创建第一个一级菜单
ComplexButton cx_1 = new ComplexButton();
cx_1.setName("一级菜单");
cx_1.setSub_button(new Button[]{cb_1,cb_2});


//继续创建二级菜单
CommonButton cb_3 = new CommonButton();
cb_3.setKey("key3");
cb_3.setName("子菜单3");
cb_3.setType("click");


ViewButton cb_4 = new ViewButton();
cb_4.setName("访问网页");
cb_4.setType("view");
//需要使用网页授权获取微信用户的信息
cb_4.setUrl("https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=要访问的网页                                         &response_type=code&scope=snsapi_base&state=xxx");

//创建第二个一级菜单
ComplexButton cx_2 = new ComplexButton();
cx_2.setName("一级菜单");
cx_2.setSub_button(new Button[]{cb_3,cb_4});

//封装菜单数据
Menu menu=new Menu();
menu.setButton(new ComplexButton[]{cx_1,cx_2});

return menu;
}


/**
* 创建自定义菜单(每天限制1000次)
* */
public static int createMenu(Menu menu){
String jsonMenu=JSONObject.fromObject(menu).toString();

int status=0;

System.out.println("菜单:"+jsonMenu);
String path="https://api.weixin.qq.com/cgi-bin/menu/create?access_token="+TokenThread.access_token.getAccess_token();
try {
URL url=new URL(path);
HttpURLConnection http = (HttpURLConnection)url.openConnection();
http.setDoOutput(true);
http.setDoInput(true);
http.setRequestMethod("POST");
http.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
http.connect();
OutputStream os = http.getOutputStream();
os.write(jsonMenu.getBytes("UTF-8"));
os.close();

InputStream is = http.getInputStream();
int size = is.available();
byte[] bt = new byte[size];
is.read(bt);
String message=new String(bt,"UTF-8");
JSONObject jsonMsg = JSONObject.fromObject(message);
status = Integer.parseInt(jsonMsg.getString("errcode"));
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return status;
}
}


3、创建菜单的Controller
/**
* 创建菜单
* */
@RequestMapping("/createMenu")
public void createMenu(){
//调用UTI执行创建菜单的动作
int status = MenuUtil.createMenu(MenuUtil.getMenu());
if(status==0){
System.out.println("菜单创建成功!");
}else{
System.out.println("菜单创建失败!");
}
}




要想创建的菜单立即生效必须在项目启动之后手动请求一下创建的Controller再重新关注微信公众号方可生效,否则的话,你就慢慢等吧.......


源码下载地址:

http://download.csdn.net/detail/qq_16071145/9516014

  • 17
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 是一种流行的前端框架,可以用于构建用户界面。为了实现仿写微信公众号自定义菜单,我们可以按照以下步骤进行: 1. 安装 Vue:首先,我们需要在项目中安装 Vue。可以使用 npm 或者 yarn 进行安装,运行命令 `npm install vue` 或者 `yarn add vue` 完成安装。 2. 创建 Vue 组件:通过 Vue 的组件化特性,我们可以创建一个专门用于自定义菜单的组件。可以在组件中定义菜单的结构和样式,并提供相应的交互逻辑。 3. 使用 Vue Router:Vue Router 是 Vue 官方的路由管理器,可以用于实现页面间的跳转。通过配置路由,在不同的路径下展示不同的页面内容,使用户可以在不同菜单之间进行切换。 4. 获取菜单数据:在组件中,我们可以通过调用后端的接口获取微信公众号自定义菜单数据。可以使用 Vue 的生命周期钩子函数,在组件挂载之前获取数据,并将数据保存在组件的 data 中。 5. 渲染数据:将获取到的菜单数据渲染到页面中。可以使用 v-for 指令遍历菜单项,并使用 v-bind 将数据绑定到相应的元素上。这样就可以根据菜单数据动态渲染出自定义菜单。 6. 实现菜单交互功能:通过为菜单元素添加点击事件,可以实现菜单的交互功能。例如,当用户点击菜单项时,可以触发相应的事件,如跳转到对应的页面或展开子菜单。 7. 样式设计:通过调整样式,使菜单界面与微信公众号的样式一致。可以使用 CSS 进行样式设计,并使用 Vue 的样式绑定功能将样式应用到菜单组件上。 通过以上步骤,我们可以使用 Vue 实现仿写微信公众号自定义菜单。这样用户就可以在仿真的菜单界面上进行操作,实现类似微信公众号自定义菜单功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值