博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java微信公众平台开发(十)--微信自定义菜单的创建实现
阅读量:6503 次
发布时间:2019-06-24

本文共 4022 字,大约阅读时间需要 13 分钟。

转自:http://www.cuiyongzhi.com/post/48.html

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

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

我们通过连接(  )进入到网页调试工具,如下图:

1.png

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
    
"button": [
        
{
            
"name": "博客", 
            
"type": "view", 
            
"url": ""
        
}, 
        
{
            
"name": "菜单", 
            
"sub_button": [
                
{
                    
"key": "text", 
                    
"name": "回复图文", 
                    
"type": "click"
                
}, 
                
{
                    
"name": "博客", 
                    
"type": "view", 
                    
"url": ""
                
}
            
]
        
}, 
        
{
            
"key": "text", 
            
"name": "回复图文", 
            
"type": "click"
        
}
    
]
}

我们填入响应的token,点击检查问题如果返回结果Ok就可以了,如下:

3.png

到这里我们采用web测试工具生成菜单的方式就完成了,下面接着介绍用代码生成菜单!

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package 
com.cuiyongzhi.wechat.menu;
 
/**
 
* ClassName: ViewButton
 
* @Description: 视图型菜单事件
 
* @author dapengniao
 
* @date 2016年3月14日 下午5:31:38
 
*/
public 
class 
ViewButton {
    
private 
String type;
    
private 
String name;
    
private 
String url;
 
    
public 
String getType() {
        
return 
type;
    
}
 
    
public 
void 
setType(String type) {
        
this
.type = type;
    
}
 
    
public 
String getName() {
        
return 
name;
    
}
 
    
public 
void 
setName(String name) {
        
this
.name = name;
    
}
 
    
public 
String getUrl() {
        
return 
url;
    
}
 
    
public 
void 
setUrl(String url) {
        
this
.url = url;
    
}
 
}

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package 
com.cuiyongzhi.wechat.menu;
 
/**
 
* ClassName: ClickButton
 
* @Description: 点击型菜单事件
 
* @author dapengniao
 
* @date 2016年3月14日 下午5:31:50
 
*/
public 
class 
ClickButton {
    
private 
String type;
    
private 
String name;
    
private 
String key;
 
    
public 
String getType() {
        
return 
type;
    
}
 
    
public 
void 
setType(String type) {
        
this
.type = type;
    
}
 
    
public 
String getName() {
        
return 
name;
    
}
 
    
public 
void 
setName(String name) {
        
this
.name = name;
    
}
 
    
public 
String getKey() {
        
return 
key;
    
}
 
    
public 
void 
setKey(String key) {
        
this
.key = key;
    
}
 
}

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package 
com.cuiyongzhi.wechat.menu;
 
import 
com.alibaba.fastjson.JSONObject;
import 
com.cuiyongzhi.wechat.util.HttpUtils;
 
import 
net.sf.json.JSONArray;
 
public 
class 
MenuMain {
 
    
public 
static 
void 
main(String[] args) {
     
        
ClickButton cbt=
new 
ClickButton();
        
cbt.setKey(
"image"
);
        
cbt.setName(
"回复图片"
);
        
cbt.setType(
"click"
);
         
         
        
ViewButton vbt=
new 
ViewButton();
        
vbt.setUrl(
""
);
        
vbt.setName(
"博客"
);
        
vbt.setType(
"view"
);
         
        
JSONArray sub_button=
new 
JSONArray();
        
sub_button.add(cbt);
        
sub_button.add(vbt);
         
         
        
JSONObject buttonOne=
new 
JSONObject();
        
buttonOne.put(
"name"
"菜单"
);
        
buttonOne.put(
"sub_button"
, sub_button);
         
        
JSONArray button=
new 
JSONArray();
        
button.add(vbt);
        
button.add(buttonOne);
        
button.add(cbt);
         
        
JSONObject menujson=
new 
JSONObject();
        
menujson.put(
"button"
, button);
        
System.out.println(menujson);
        
//这里为请求接口的url   +号后面的是token,这里就不做过多对token获取的方法解释
        
String url=
""
+
"upeDW-2pWrHgLx3fGqgsvAvf-HkQBA--5uHOo9OW16uNdL9zNPnnuIN01UDFXh_5d-QdcnBxux9tXigFwm1z0SInbdkXEKa1pMhTqaZVxK7sCPj7421YQGI0v3evwiwiWALjAHASWH"
;
         
        
try
{
            
String rs=HttpUtils.sendPostBuffer(url, menujson.toJSONString());
            
System.out.println(rs);
        
}
catch
(Exception e){
            
System.out.println(
"请求错误!"
);
        
}
     
    
}
 
}

上面代码的基本流程就是调用view和click两个实体封装json字符串menujson,最后调用发送方法将json发送给腾讯服务器,但是这里需要用到账号生成的token,我这里是直接写死的(token的获取方式可以参见  ),最终运行返回结果ok即可,如下:

4.png

自定义菜单的功能实现基本就是这些,下一篇将讲述【微信公众平台(map.weixin.qq.com)/开放平台(open.weixin.qq.com)/商户平台(pay.weixin.qq.com)之间的关联关系】希望可以对你给出帮助,感谢你的翻阅,如有疑问可以留言讨论!

转载于:https://www.cnblogs.com/sharpest/p/10247822.html

你可能感兴趣的文章
java读取html文件并替换_java读取html并替换相关内容
查看>>
java面向对象的概念_java面向对象(上)-- 面向对象的概念
查看>>
dbscan算法python实现_Python实现DBScan
查看>>
java智能聊天软件_Java使用青云客智能聊天接口做一个小助手
查看>>
java定义player类_Java自定义一个异常类NoThisSongException和Player类
查看>>
java 字符串 算法 面试题_java笔试手写算法面试题大全含答案
查看>>
java内部类访问外部类变量 final_Java内部类引用外部类中的局部变量为什么必须是final问题解析...
查看>>
java编程思想第四章_《JAVA编程思想》学习笔记——第四章 控制执行流程
查看>>
java 栈帧与类的关系_深入理解Java虚拟机之类运行时栈帧结构
查看>>
php中删除评论怎么做的,详解PHP如何实现评论回复删除功能
查看>>
macports 安装php,「macports」MacOS 中 MacPorts 安装和使用 - 金橙教程网
查看>>
php 审计 for linux,for linux是什么意思
查看>>
matlab里面连接器是什么,Oops - an error has occurred
查看>>
matlab建立桌面图标,在ubuntu16.04上创建matlab的快捷方式(实现方法)
查看>>
matlab 识别率,【caffe-Windows】识别率批量输出——matlab实现
查看>>
MATLAB里面的mghglobal函数,Matlab讨论区 - 声振论坛 - 振动,动力学,声学,信号处理,故障诊断 - Powered by Discuz!...
查看>>
smarty使用php代码,笑谈配置,使用Smarty技术_php
查看>>
oracle数据实际值限制,c# – Oracle数据库TNS密钥“数据源”的值长度超过了’128’的限制...
查看>>
silk v3 decoder php,解码转换QQ微信的SILK v3编码音频为MP3或其他格式
查看>>
linux不能访问80端口,lunux开放80端口(本地访问不了linux文件可能是这个原因)...
查看>>