微信公众号开发-java版 腾讯课堂(自定义菜单 菜单点击事件)
接口调用请求说明
http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN
click和view的请求示例
{ "button":[ { "type":"click", "name":"今日歌曲", "key":"V1001_TODAY_MUSIC" }, { "name":"菜单", "sub_button":[ { "type":"view", "name":"搜索", "url":"http://www.soso.com/" }, { "type":"miniprogram", "name":"wxa", "url":"http://mp.weixin.qq.com", "appid":"wx286b93c14bbf93aa", "pagepath":"pages/lunar/index" }, { "type":"click", "name":"赞一下我们", "key":"V1001_GOOD" }] }] }
参数说明
参数 | 是否必须 | 说明 |
---|---|---|
button | 是 | 一级菜单数组,个数应为1~3个 |
sub_button | 否 | 二级菜单数组,个数应为1~5个 |
type | 是 | 菜单的响应动作类型,view表示网页类型,click表示点击类型,miniprogram表示小程序类型 |
name | 是 | 菜单标题,不超过16个字节,子菜单不超过60个字节 |
key | click等点击类型必须 | 菜单KEY值,用于消息接口推送,不超过128字节 |
url | view、miniprogram类型必须 | 网页 链接,用户点击菜单可打开链接,不超过1024字节。 type为miniprogram时,不支持小程序的老版本客户端将打开本url。 |
media_id | media_id类型和view_limited类型必须 | 调用新增永久素材接口返回的合法media_id |
appid | miniprogram类型必须 | 小程序的appid(仅认证公众号可配置) |
pagepath | miniprogram类型必须 | 小程序的页面路径 |
菜单构建比较简单主要是实体类的封装和https post json格式请求就会自已生成菜单
菜单事件 例如
click类型点击 返回一条xml解析成map格式 与发送消息差不多
{CreateTime=1552903454, EventKey=V1001_TODAY_MUSIC, Event=CLICK, ToUserName=gh_eb3a1258e5e0, FromUserName=orSqw0Wo12_jzKMLfW1VRu_WdiAM, MsgType=event}
这里的msgtype 为event EventKey=V1001_TODAY_MUSIC Event=CLICK
/** * 给用户发送消息 处理菜单事件 * @param map * @return */ public static String getResponse(Map<String, String> map) { BaseMessage msg = null; String msgType = map.get("MsgType"); switch (msgType) { case "text": msg = dealTextMessage(map); break; case "image": break; case "voice": break; case "video": break; case "shortvideo": break; case "location": break; case "link": break; case "event": msg = dealEventMessage(map); break; default: break; } if (msg != null) { //xml解析对象 XStream stream = new XStream(); //启用xml注释 stream.processAnnotations(TextMessage.class); stream.processAnnotations(NewsMessage.class); String s = stream.toXML(msg); return s; } return null; }
/** * 菜单事件 * @param map * @return */ private static BaseMessage dealEventMessage(Map<String, String> map) { String event = map.get("Event"); BaseMessage msg = null; switch (event) { case "CLICK": msg = switchClick(map); break; case "VIEW": break; } return msg; }
/** * 处理click事件 * @param map * @return */ private static BaseMessage switchClick(Map<String, String> map) { BaseMessage msg = null; switch (map.get("EventKey")) { case "V1001_TODAY_MUSIC": msg = new TextMessage(map, "<<七友>>\n已记不起我也有权利爱人\n" + "谁人曾照顾过我的感受\n" + "待我温柔吻过我伤口\n" + "能得到的安慰是失恋者得救后\n" + "很感激忠诚的狗\n" + "谁人曾介意我也不好受\n" + "为我出头碰过我的手"); break; case "V1001_GOOD": msg = new TextMessage(map, "感谢你的鼓励"); break; case "V1001_TODAY_ZIXUN": msg = new TextMessage(map, "还没有哦"); break; } return msg; }
还是由上一篇的给用户发送消息 延伸一下 视频中有整合提取图片文字功能,我没有做是第三方接口与聊天机器人 大同小异
效果图:
百度云源码:
链接:https://pan.baidu.com/s/1gH3dn1GptN-aWfDyOBgP4g
提取码:xdv4
复制这段内容后打开百度网盘手机App,操作更方便哦
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)