微信公众号菜单管理接口开发

本文介绍了如何在微信小程序中创建数据表wx_menu,包括字段定义,以及使用Java编写的方法同步菜单,包括获取AccessToken和调用微信API创建自定义菜单的过程。同时提及了Vue页面中如何调用接口来同步菜单。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、创建数据表

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for wx_menu
-- ----------------------------
DROP TABLE IF EXISTS `wx_menu`;
CREATE TABLE `wx_menu`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `appid` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '小程序的appid',
  `article_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'article_id',
  `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  `menutype` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '菜单类型',
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '名称',
  `need_check_regisit` int(11) NULL DEFAULT NULL COMMENT '需要与否',
  `pagepath` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '页码路径',
  `pid` bigint(20) NULL DEFAULT NULL COMMENT 'p_id',
  `sort` int(11) NULL DEFAULT NULL COMMENT '种类',
  `status` int(11) NULL DEFAULT NULL COMMENT '状态',
  `type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '类型',
  `url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '路径',
  `wxkey` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'wechat_key',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 15 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of wx_menu
-- ----------------------------

INSERT INTO `wx_menu` VALUES (13, 'wx123456789', NULL, '2024-04-28 10:07:36', 'sub_button', '员工登录', 0, 'sub_button', 4, 0, 0, 'view', 'https://baidu.com/', NULL);

SET FOREIGN_KEY_CHECKS = 1;

2、同步菜单

2.1获取 Access tokenhttps://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html

2.2同步https://developers.weixin.qq.com/doc/offiaccount/Custom_Menus/Creating_Custom-Defined_Menu.html

@RequestMapping(value = "/syncMenu")
public String syncMenu(){
	String getAccessTokenUrl="https://api.weixin.qq.com/cgi-bin/token";
	String grant_type = "client_credential";
	String params = "appid=" + appId + "&secret=" + secret + "&grant_type=" + grant_type;

	String result= HttpRequest.sendGet(getAccessTokenUrl, params);
	JSONObject resultObject=JSONObject.parseObject(result);
	String access_token=resultObject.getString("access_token");
	if(access_token != null) {
		String url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=";
		url += access_token;
		JSONObject newMenu = new JSONObject();
		JSONArray newButton = new JSONArray();
		newMenu.put("button", newButton);
		WxMenu wxMenu = new WxMenu();
		List<WxMenu> list = wxMenuService.selectAllList(WxMenu);
		for (WxMenu wxAppMenu : list) {
			if ("menu".equalsIgnoreCase(wxAppMenu.getMenutype())) {
				JSONObject menu = new JSONObject();
				newButton.add(menu);
				menu.put("name", wxAppMenu.getName());
				JSONArray sub_button = new JSONArray();
				menu.put("sub_button", sub_button);
				for (WxMenu subWxAppMenu : list) {
					if ("sub_button".equalsIgnoreCase(subWxAppMenu.getMenutype())) {
						if (subWxAppMenu.getPid() == wxAppMenu.getId()) {
							JSONObject sub_button_item = new JSONObject();
							sub_button_item.put("type", subWxAppMenu.getType());
							sub_button_item.put("name", subWxAppMenu.getName());
							if ("click".equalsIgnoreCase(subWxAppMenu.getType())) {
								sub_button_item.put("key", subWxAppMenu.getWxkey());
							} else if ("view".equalsIgnoreCase(subWxAppMenu.getType())) {
								sub_button_item.put("url", subWxAppMenu.getUrl());
							} else {
								sub_button_item.put("url", subWxAppMenu.getUrl());
								sub_button_item.put("appid", subWxAppMenu.getAppid());
								sub_button_item.put("pagepath", subWxAppMenu.getPagepath());
							}
							logger.info("sub_button_item.toString()=" + sub_button_item.toString());
							sub_button.add(sub_button_item);
						}
					}
				}
				logger.info("sub_button.toString()=" + sub_button.toString());
			} else if ("button".equalsIgnoreCase(wxAppMenu.getMenutype())) {
				JSONObject button = new JSONObject();
				newButton.add(button);
				button.put("type", wxAppMenu.getType());
				button.put("name", wxAppMenu.getName());
				if ("click".equalsIgnoreCase(wxAppMenu.getType())) {
					button.put("key", wxAppMenu.getWxkey());
				} else if ("view".equalsIgnoreCase(wxAppMenu.getType())) {
					button.put("url", wxAppMenu.getUrl());
				} else {
					button.put("url", wxAppMenu.getUrl());
					button.put("appid", wxAppMenu.getAppid());
					button.put("pagepath", wxAppMenu.getPagepath());
				}
			} else {
				//sub_button在menu里面处理过了
			}
		}
		logger.info("newMenu.toString()="+newMenu.toString());
		String result1 = HttpRequest.sendPostBody(url, newMenu.toString());
		logger.info("result1="+result1);
		return result1;
	}
	return null;
}

3、vue页面自定义按钮,调用接口

<el-button
  type="info"
  plain
  icon="el-icon-refresh"
  size="mini"
  @click="handleSync"
>同步菜单</el-button>

4、参考文章链接https://blog.51cto.com/u_15961549/6054260

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值