Java微信公众平台开发(十)

Wesley13
• 阅读 739

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

自定义菜单这个功能在我们普通的编辑模式下是可以直接在后台编辑的,但是一旦我们进入开发模式之后我们的自定义菜单就需要自己用代码实现,所以对于刚开始接触的人来说可能存在一定的疑惑,这里我说下平时我们在开发模式下常用的两种自定义菜单的实现方式:①不用写实现代码,直接用网页测试工具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  )进入到网页调试工具,如下图:

Java微信公众平台开发(十)

在这里我们生成菜单的时候只需要我们账号的有效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": "[http://www.cuiyongzhi.com](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fwww.cuiyongzhi.com%2F)"

},

{

"name": "菜单",

"sub_button": [

{

"key": "text",

"name": "回复图文",

"type": "click"

},

{

"name": "博客",

"type": "view",

"url": "[http://www.cuiyongzhi.com](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fwww.cuiyongzhi.com%2F)"

}

]

},

{

"key": "text",

"name": "回复图文",

"type": "click"

}

]

}

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

Java微信公众平台开发(十)

到这里我们采用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( "[http://www.cuiyongzhi.com](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fwww.cuiyongzhi.com%2F)" );

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= "[https://api.weixin.qq.com/cgi-bin/menu/create?access_token=](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fapi.weixin.qq.com%2Fcgi-bin%2Fmenu%2Fcreate%3Faccess_token%3D)" + "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的获取方式可以参见http://www.cuiyongzhi.com/?id=44  ),最终运行返回结果ok即可,如下:

Java微信公众平台开发(十)

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

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
Docker 部署SpringBoot项目不香吗?
  公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。  !(http://dingyue.ws.126.net/2020/0920/b00fbfc7j00qgy5xy002kd200qo00hsg00it00cj.jpg)  2
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这