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、同步菜单
@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>