前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java微信公众平台开发(九)--微信自定义菜单的创建实现 (一)使用网页调试工具生成菜单(二)采用代码实现菜单的生成

Java微信公众平台开发(九)--微信自定义菜单的创建实现 (一)使用网页调试工具生成菜单(二)采用代码实现菜单的生成

作者头像
用户2417870
发布于 2019-09-18 03:33:10
发布于 2019-09-18 03:33:10
94000
代码可运行
举报
文章被收录于专栏:g歌德ag歌德a
运行总次数:0
代码可运行

  自定义菜单这个功能在我们普通的编辑模式下是可以直接在后台编辑的,但是一旦我们进入开发模式之后我们的自定义菜单就需要自己用代码实现,所以对于刚开始接触的人来说可能存在一定的疑惑,这里我说下平时我们在开发模式下常用的两种自定义菜单的实现方式:①不用写实现代码,直接用网页测试工具Post json字符串生成菜单;②就是在我们的开发中用代码实现菜单生成!(参考文档:http://mp.weixin.qq.com/wiki/10/0234e39a2025342c17a7d23595c6b40a.html )在自定义菜单中菜单的类型分为两种,一种为view的视图菜单,点击之后直接跳转到url页面;还有一种是click类型的点击型,后端通过点击事件类型给与不同的相应;后面新增了各种特色功能的菜单其本质都还是Click类型的菜单,所以生成的规则都是一样的,其生成菜单的方式都是向微信服务器post json字符串生成菜单,下面讲述菜单生成的方法和规则!(参考文档:http://mp.weixin.qq.com/wiki/10/0234e39a2025342c17a7d23595c6b40a.html )在自定义菜单中菜单的类型分为两种,一种为view的视图菜单,点击之后直接跳转到url页面;还有一种是click类型的点击型,后端通过点击事件类型给与不同的相应;后面新增了各种特色功能的菜单其本质都还是Click类型的菜单,所以生成的规则都是一样的,其生成菜单的方式都是向微信服务器post json字符串生成菜单,下面讲述菜单生成的方法和规则!

(一)使用网页调试工具生成菜单

我们通过连接(https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=%E8%87%AA%E5%AE%9A%E4%B9%89%E8%8F%9C%E5%8D%95&form=%E8%87%AA%E5%AE%9A%E4%B9%89%E8%8F%9C%E5%8D%95%E5%88%9B%E5%BB%BA%E6%8E%A5%E5%8F%A3%20/menu/create )进入到网页调试工具,如下图:

在这里我们生成菜单的时候只需要我们账号的有效token和json字符串即可,这里的json字符串可以参照文档中的案例做出修改得到,我这里给出的一个案例如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 {
 2     "button": [
 3         {
 4             "name": "博客", 
 5             "type": "view", 
 6             "url": "https://www.cnblogs.com/gede"
 7         }, 
 8         {
 9             "name": "菜单", 
10             "sub_button": [
11                 {
12                     "key": "text", 
13                     "name": "回复图文", 
14                     "type": "click"
15                 }, 
16                 {
17                     "name": "博客", 
18                     "type": "view", 
19                     "url": "https://www.cnblogs.com/gede"
20                 }
21             ]
22         }, 
23         {
24             "key": "text", 
25             "name": "回复图文", 
26             "type": "click"
27         }
28     ]
29 }

我们填入响应的token,点击检查问题如果返回结果Ok就可以了。到这里我们采用web测试工具生成菜单的方式就完成了,下面接着介绍用代码生成菜单!

(二)采用代码实现菜单的生成

前面我们有说道在菜单中有view和click两种类型的事件,这里我们首先在代码中建立两种类型对应的java实体,view类型建立实体ViewButton.java如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 package com.gede.wechat.menu;
 2 /**
 3 * @author gede
 4 * @version date:2019年5月28日 下午7:02:43
 5 * @description :
 6 */
 7 public class ViewButton {
 8     private String type;
 9     private String name;
10     private String url;
11  
12     public String getType() {
13         return type;
14     }
15  
16     public void setType(String type) {
17         this.type = type;
18     }
19  
20     public String getName() {
21         return name;
22     }
23  
24     public void setName(String name) {
25         this.name = name;
26     }
27  
28     public String getUrl() {
29         return url;
30     }
31  
32     public void setUrl(String url) {
33         this.url = url;
34     }
35  
36 }

同样的建立click的实体ClickButton.java如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 package com.gede.wechat.menu;
 2 /**
 3 * @author gede
 4 * @version date:2019年5月28日 下午7:03:02
 5 * @description :
 6 */
 7 public class ClickButton {
 8     private String type;
 9     private String name;
10     private String key;
11  
12     public String getType() {
13         return type;
14     }
15  
16     public void setType(String type) {
17         this.type = type;
18     }
19  
20     public String getName() {
21         return name;
22     }
23  
24     public void setName(String name) {
25         this.name = name;
26     }
27  
28     public String getKey() {
29         return key;
30     }
31  
32     public void setKey(String key) {
33         this.key = key;
34     }
35  
36 }

这里创建两个实体也是为了方便我们在自定义菜单中对json的封装,在这里我用代码的形式封装了上面给出的同样的json格式,并调用生成自定义菜单的接口发送到微信服务器,简单代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 package com.gede.wechat.menu;
 2 import org.springframework.stereotype.Component;
 3 
 4 import com.alibaba.fastjson.JSONObject;
 5 import net.sf.json.JSONArray;
 6 
 7 import com.gede.web.util.GlobalConstants;
 8 import com.gede.wechat.util.HttpUtils;
 9 
10 /**
11 * @author gede
12 * @version date:2019年5月28日 下午7:03:24
13 * @description :
14 */
15 @Component
16 public class MenuMain {
17     
18     public void createMenu(){
19          ClickButton cbt=new ClickButton();
20             cbt.setKey("image");
21             cbt.setName("回复图片");
22             cbt.setType("click");
23              
24              
25             ViewButton vbt=new ViewButton();
26             vbt.setUrl("https://www.cnblogs.com/gede");
27             vbt.setName("博客");
28             vbt.setType("view");
29              
30             JSONArray sub_button=new JSONArray();
31             sub_button.add(cbt);
32             sub_button.add(vbt);
33              
34              
35             JSONObject buttonOne=new JSONObject();
36             buttonOne.put("name", "菜单");
37             buttonOne.put("sub_button", sub_button);
38              
39             JSONArray button=new JSONArray();
40             button.add(vbt);
41             button.add(buttonOne);
42             button.add(cbt);
43              
44             JSONObject menujson=new JSONObject();
45             menujson.put("button", button);
46             System.out.println(menujson);
47             
48             //这里为请求接口的url   +号后面的是token,这里就不做过多对token获取的方法解释
49             String url="https://api.weixin.qq.com/cgi-bin/menu/create?access_token="+GlobalConstants.getInterfaceUrl("access_token");
50              
51             try{
52                 String rs=HttpUtils.sendPostBuffer(url, menujson.toJSONString());
53                 System.out.println(rs);
54             }catch(Exception e){
55                 System.out.println("请求错误!");
56             }
57     }
58 }

这里面加了@Component组件,可以被扫为spring 的一个bean自动装配。我们在写一个简单的jsp实现响应这里的createMenue方法。

添加了Component组件扫描后,我们在applicationContext.xml中添加组件扫描包 :<context:component-scan base-package="com.gede.wechat.menu"></context:component-scan>

如果配置文件提示报错,我们添加content上下文:点开NameSpaces 如下图:

写到这里,我们就差控制器来调用我们的createMenue方法了。我们创建MenueController类,简单代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 package com.gede.wechat.controller;
 2 
 3 import static org.springframework.web.bind.annotation.RequestMethod.GET;
 4 
 5 import java.io.PrintWriter;
 6 
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 
10 import org.springframework.beans.factory.annotation.Autowired;
11 import org.springframework.stereotype.Controller;
12 import org.springframework.web.bind.annotation.RequestMapping;
13 import org.springframework.web.bind.annotation.RequestMethod;
14 import org.springframework.web.bind.annotation.RequestParam;
15 
16 import com.gede.wechat.menu.MenuMain;
17 import com.gede.wechat.util.SignUtil;
18 
19 /**
20 * @author gede
21 * @version date:2019年5月28日 下午7:20:08
22 * @description :
23 */
24 @Controller
25 @RequestMapping("/menue")
26 public class MenueController {
27     
28     private MenuMain menue;
29     @Autowired
30     public MenueController(MenuMain menue) {
31         super();
32         this.menue = menue;
33     }
34 
35     @RequestMapping(value="/",method=GET)
36     public String home(){
37         menue.createMenu();
3839     }
40  
41 }

现在运行我们的项目,项目跑起来后,在浏览器地址栏输入:.自己的服务器地址./mychat/menue/create/ 。返回控制台,查看,效果如下:

再来看微信端的效果:

关于文中涉及到的Spring相关知识,大家可以去看我关于Spring的博客。有不懂的也可以留言。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java微信公众平台开发_04_自定义菜单
自定义菜单中请求包的数据是Json字符串格式的,请参见:  Java_数据交换_fastJSON_01_用法入门
shirayner
2018/08/10
5900
微信公众号开发-自定义菜单接口
本文是 微信开发-素材/消息管理接口 的后续,主要介绍微信公众平台的自定义菜单接口开发。由于个人的订阅号是没有大多数接口的权限的,所以我们需要使用微信官方提供的测试号来进行开发。测试号的申请可参考下文:
端碗吹水
2020/09/23
2.7K0
微信公众号开发-自定义菜单接口
微信公众号开发之自定义菜单
在Jfinal-weixin中有封装菜单的创建、查询、删除、以及个性化菜单的创建、查询、删除、测试个性化菜单匹配结果
Javen
2018/08/21
1.7K0
微信公众号开发之自定义菜单
手把手教你如何微信公众号开发「建议收藏」
最近的话,发现微信开发其实也有很多挺有意思的地方,比如最近很火的一款游戏“跳一跳”,也让我如此着迷。。但是,今天我所要讲的并不是对于小程序的开发,而是要说一下,关于微信开发的另外一个内容,那就是微信公众号。。
全栈程序员站长
2022/09/25
3.6K0
手把手教你如何微信公众号开发「建议收藏」
Java微信公众平台开发(十二)--微信JSSDK的使用 (一)修改我们的menue。(二)测试
在前面的文章中有介绍到我们在微信web开发过程中常常用到的 【微信JSSDK中Config配置】 ,但是我们在真正的使用中我们不仅仅只是为了配置Config而已,而是要在我们的项目中真正去使用微信JS-SDK给我们带来便捷,那么这里我们就简述如何在微信web开发中使用必要的方法!在开始之前,上一篇有朋友有疑问,如何在手机端显示,这里我们来补充一下:
用户2417870
2019/09/18
1.5K0
Java微信公众平台开发(十二)--微信JSSDK的使用

        (一)修改我们的menue。(二)测试
Java企业微信开发_03_自定义菜单
这里需要格外注意的是,企业微信中请求包的数据是Json字符串格式的,而不是xml格式。关于json序列化的问题请参考上一节   Java企业微信开发_03_通讯录同步
shirayner
2018/08/10
8930
微信公众平台开发(二)——自定义菜单、模板消息&微信素材
access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。
不愿意做鱼的小鲸鱼
2023/03/25
1.3K0
微信公众平台开发(二)——自定义菜单、模板消息&微信素材
Magcodes.WeiChat——自定义CustomCreationConverter之实现微信自定义菜单的序列化
微信自定义菜单接口是一个比较麻烦的接口,往往开发的小伙伴们看到下面的这段返回JSON,整个人就会不好了:
雪雁-心莱科技
2018/12/27
6150
微信公众平台开发教程(五)自定义菜单
如果只有输入框,可能太简单,感觉像命令行。自定义菜单,给我们提供了很大的灵活性,更符合用户的操作习惯。在一个小小的微信对话页面,可以实现更多的功能。菜单直观明了,不仅能提供事件响应,还支持URL跳转,如果需要的功能比较复杂,我们大可以使用URL跳转,跳转至我们的网页即可。
Java架构师必看
2021/05/19
2.5K0
Java微信公众平台开发(五)--文本及图文消息回复的实现
上篇我们说到回复消息可以根据是否需要上传文件到微信服务器可划分为【普通消息】和【多媒体消息】,这里我们来讲述普通消息的回复实现,在消息回复中存在一个关键字段【openid】,它是微信用户对于公众号的唯一标识,这里不做过多解释后面将给出时间专门来讲解微信生态中的关键字!
用户2417870
2019/09/18
8660
微信公众平台开发 自定义菜单
自定义菜单能够帮助公众号丰富界面,让用户更好更快地理解公众号的功能。开启自定义菜单后,公众号界面如图所示:
庞小明
2018/09/19
2.1K0
微信公众平台开发 自定义菜单
微信公众号-自定义菜单
自定义菜单能够帮助公众号丰富界面,让用户更好更快地理解公众号的功能。开启自定义菜单后,公众号界面如图所示
星哥玩云
2022/09/14
3.3K0
微信公众号-自定义菜单
微信个人公众号开发--(5)获取Token并自定义菜单
微信官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183 access_token是公众号的全局唯一票据,公众号
浩Coding
2019/07/02
1.3K0
微信个人公众号开发--(5)获取Token并自定义菜单
Java微信公众平台开发(三)--接收消息的分类及实体的创建
前面一篇有说道应用服务器和腾讯服务器是通过消息进行通讯的,并简单介绍了微信端post的消息类型,这里我们将建立消息实体以方便我们后面的使用!
用户2417870
2019/09/18
1K0
Java微信公众平台开发(三)--接收消息的分类及实体的创建
微信公众号-开发者-自定义菜单
我是个初学者,网上找了看了好多,都是第三方实现的,考虑到安全问题,不敢用! 今天终于摸索出了实现方法。 官方api:http://mp.weixin.qq.com/wiki/13/43de8269be
deepcc
2018/05/16
1.4K0
Java企业微信开发_09_身份验证之移动端网页授权(有完整项目源码)
在开始使用网页授权之前,需要先设置一下授权回调域。这里瞬间想到之前做JSSDK的时候,也设置过一个域名。二者本质上都是设置可信域名。
shirayner
2018/08/10
2.8K0
Java企业微信开发_09_身份验证之移动端网页授权(有完整项目源码)
微信开发模式之自定义菜单实现
编辑模式和开发模式是有冲突的。所以我们启用微信公众号的开发模式之后,那些菜单是看不到的哦。不过现在个人订阅号是不可以使用高级开发者模式的,如自定义菜单,不过我们还是可以通过测试号来测试一下,然后移代码到服务号。
SmileNicky
2019/01/17
1.4K0
使用Java创建公众号自定义菜单
相信大家在微信公众号开发中都会遇到这样一个问题:启用服务器配置后,原先设置的公众号菜单都失效了,变成了下面这样:
小诸葛
2020/04/14
1.5K0
使用Java创建公众号自定义菜单
ASP.NET MVC5+EF6+EasyUI 后台管理系统(74)-微信公众平台开发-自定义菜单
1、click:点击推事件用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互;
用户1149182
2019/09/12
1.3K0
ASP.NET MVC5+EF6+EasyUI 后台管理系统(74)-微信公众平台开发-自定义菜单
PHP实现微信公众号企业号自定义菜单接口示例
define(AppId, "wx666cae44xxxxxx2");//定义AppId,需要在微信公众平台申请自定义菜单后会得到 define(AppSecret, "d77026a714d443a01d0229xxxxxxxx");//定义AppSecret,需要在微信公众平台申请自定义菜单后会得到 include("menu.php");//引入微信类 $wechatObj = new Wechat();//实例化微信类 $creatMenu = $wechatObj->creatMenu();//创
Yiiven
2022/12/15
7080
推荐阅读
相关推荐
Java微信公众平台开发_04_自定义菜单
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验