JFinal Weixin 学习笔记(8)-- 微信自定义菜单


自定义菜单接口

/**
 * 查询菜单
 */
MenuApi.getMenu();

/**
 * 创建菜单
 */
MenuApi.createMenu(String jsonStr);

/**
 * 自定义菜单删除接口
 */
MenuApi.deleteMenu();

WeinxinApiController.java

createMenu(String jsonStr) 接受 json 格式的字符串,我们根据微信技术文档拼接自定义菜单字符串:

/**
 * 创建菜单
 */
public void createMenu() {
    String path = Constants.HOST;
    String jsonstr = "{" +
            "   \"button\": [" +
            "       {" +
            "           \"name\": \"一级菜单1\"," +
            "           \"sub_button\": [" +
            "               {\"name\": \"二级菜单11\",\"type\": \"view\",\"url\": \"" + path + "/api\"}," +
            "               {\"name\": \"二级菜单12\",\"type\": \"view\",\"url\": \"" + path + "/api\"}," +
            "               {\"name\": \"二级菜单13\",\"type\": \"view\",\"url\": \"" + path + "/api\"}," +
            "               {\"name\": \"二级菜单14\",\"type\": \"view\",\"url\": \"" + path + "/api\"}," +
            "               {\"name\": \"二级菜单15\",\"type\": \"view\",\"url\": \"" + path + "/api\"}]" +
            "       }," +
            "       {" +
            "           \"name\": \"一级菜单2\"," +
            "           \"sub_button\": [" +
            "               {\"name\": \"测  试\",\"type\": \"view\",\"url\": \"" + path + "/api/index\"}," +
            "               {\"name\": \"click\",\"type\": \"click\",\"key\": \"22\"}," +
            "               {\"name\": \"二级菜单23\",\"type\": \"view\",\"url\": \"" + path + "/api\"}," +
            "               {\"name\": \"百度\",\"type\": \"view\",\"url\": \"http://www.baidu.com\"}," +
            "               {\"name\": \"二级菜单25\",\"type\": \"view\",\"url\": \"" + path + "/api\"}]" +
            "       }," +
            "       {" +
            "           \"name\": \"一级菜单3\"," +
            "           \"sub_button\": ["+
            "               {\"name\": \"二级菜单31\",\"type\": \"view\",\"url\": \"" + path + "/api\"}," +
            "               {\"name\": \"二级菜单32\",\"type\": \"view\",\"url\": \"" + path + "/api\"}," +
            "               {\"name\": \"二级菜单33\",\"type\": \"view\",\"url\": \"" + path + "/api\"}," +
            "               {\"name\": \"二级菜单34\",\"type\": \"view\",\"url\": \"" + path + "/api\"}," +
            "               {\"name\": \"二级菜单35\",\"type\": \"view\",\"url\": \"" + path + "/api\"}]" +
            "       }" +
            "   ]" +
            "}";
    ApiResult apiResult = MenuApi.createMenu(jsonstr);
    renderText(apiResult.getJson());
}

自定义菜单接口可实现多种类型按钮,详见:微信公众平台技术文档。
这里使用了两种:
1、click:点击推事件用户点击 click 类型按钮后,微信服务器会通过消息接口推送消息类型为 event 的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的 key 值,开发者可以通过自定义的 key 值与用户进行交互;
2、view:跳转 URL 用户点击 view 类型按钮后,微信客户端将会打开开发者在按钮中填写的网页 URL,可与网页授权获取用户基本信息接口结合,获得用户基本信息。

getMenu() 方法,查询自定义菜单:

/**
 * 查询菜单
 */
public void getMenu() {
    ApiResult apiResult = MenuApi.getMenu();
    renderText(apiResult.getJson());
}

WeixinMsgController.java

processInMenuEvent(InMenuEvent inMenuEvent) 方法接受菜单中 click 类型按钮的点击事件

// 自定义菜单事件
@Override
protected void processInMenuEvent(InMenuEvent inMenuEvent) {
    OutTextMsg outMsg = new OutTextMsg(inMenuEvent);
    outMsg.setContent("processInMenuEvent() 方法测试成功");
    render(outMsg);
}

index.html

自定义菜单

点击【创建自定义菜单】
点击【获取自定义菜单】

运行

点击创建菜单,微信客户端不会立马刷新。想立马看到效果,可以取消关注再关注。
微信菜单:


JFinal Weixin 学习笔记(8)-- 微信自定义菜单_第1张图片
一级菜单
JFinal Weixin 学习笔记(8)-- 微信自定义菜单_第2张图片
二级菜单
JFinal Weixin 学习笔记(8)-- 微信自定义菜单_第3张图片
三级菜单

点击 click22

Paste_Image.png

新增了“测试”按钮,可以直接跳转主页面:

JFinal Weixin 学习笔记(8)-- 微信自定义菜单_第4张图片
测试页面

点击“获取自定义菜单”
得到 json 格式的菜单数据:

JFinal Weixin 学习笔记(8)-- 微信自定义菜单_第5张图片
菜单数据

源码地址
JFinal Weixin 学习笔记(9)-- 微信账号二维码
JFinal Weixin 学习笔记(1)-- 目录

参考文章

微信公众号开发之自定义菜单
jfinal-weixin-wiki 自定义菜单接口

你可能感兴趣的:(JFinal Weixin 学习笔记(8)-- 微信自定义菜单)