微信公众号开发 - 菜单按钮bean封装

微信公众号开发文章目录

1.微信公众号开发 - 环境搭建
2.微信公众号开发 - 配置表设计以及接入公众号接口开发
3.微信公众号开发 - token获取(保证同一时间段内只请求一次)
4.微信公众号开发 - 菜单按钮bean封装
5.微信公众号开发 - 创建菜单
6.微信公众号开发 - 事件处理和回复消息
7.微信公众号开发 - 发送Emoji表情

项目完整代码请访问github:https://github.com/liaozq0426/wx.git

上篇文章完成了微信公众号token的获取,接下来开始开发微信公众号自定义菜单,在开发自定义菜单前,先完成菜单和按钮bean的封装,因为在开发自定义菜单时需要用到

从微信官方文档可以看到,公众号菜单的数据结构如下

{
     "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"
            }]
       }]
 }

可以看到,所有按钮都有一个共性就是都有name属性,因此我们可以先定义一个Button类,它是所有按钮的父类,代码如下

/**
 * @author gavin
 * @title 微信按钮
 */
public class Button{
	
	public static final String TYPE_VIEW = "view";	// view类型按钮
	public static final String TYPE_CLICK = "click";// click类型按钮

	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}

这里面定义了两个常量,TYPE_VIEWTYPE_CLICK,分别代表 view 类型按钮和 click类型按钮,如果在实际开发中还用到了其他类型按钮,可以在里面添加。

我们平时开发中使用的最多的两种按钮是clickview,接下来就是对这两种类型按钮的设计。click按钮代码如下

/**
 * @title 微信click类型按钮
 * @author gavin
 * @date 2019年11月28日
 */
public class ClickButton extends Button{
	
	private String type;
	
	private String key;

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

	public String getKey() {
		return key;
	}

	public void setKey(String key) {
		this.key = key;
	}	
}

view按钮代码如下

/**
 * @title 微信view类型按钮
 * @author gavin
 * @date 2019年11月28日
 */
public class ViewButton extends Button{
	
	private String type;
	private String url;

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}
}

菜单中除了一级菜单(只有一个按钮),还有二级菜单,二级菜单其实是一个复合按钮,即按钮中又嵌套了一个按钮数组,复合按钮代码如下

/**
 * @author gavin
 * @title 微信复合按钮
 */
public class ComplexButton extends Button{
	
	private Button[] sub_button;

	public Button[] getSub_button() {
		return sub_button;
	}

	public void setSub_button(Button[] sub_button) {
		this.sub_button = sub_button;
	}
}

最后是菜单的封装,代码如下

/**
 * @author gavin
 * @title 微信菜单
 */
public class Menu{
	
	private Button[] button;

	public Button[] getButton() {
		return button;
	}

	public void setButton(Button[] button) {
		this.button = button;
	}
}

Menu就是整个公众号菜单的数据,我们最终在调用微信创建菜单api时,传一个Menu对象就行了。

使用

下面我们使用一下封装好的bean,看最后的数据结构是否符合要求

import com.gavin.pojo.Button;
import com.gavin.pojo.ClickButton;
import com.gavin.pojo.ComplexButton;
import com.gavin.pojo.Menu;
import com.gavin.pojo.ViewButton;
import com.google.gson.Gson;

public class MenuTest {
	
	public static void main(String[] args) {
		
		// 复合按钮
		ComplexButton view1 = new ComplexButton();	
		view1.setName("学习资料");
		
		ViewButton view11 = new ViewButton();
		view11.setName("JAVA");
		view11.setType(Button.TYPE_VIEW);
		view11.setUrl("http://www.gavin.com/java.html");
		
		ViewButton view12 = new ViewButton();
		view12.setName("MySQL");
		view12.setType(Button.TYPE_VIEW);
		view12.setUrl("http://www.gavin.com/mysql.html");
		
		view1.setSub_button(new Button[] {view11 , view12}); // 设置子按钮数组
		
		// view按钮
		ViewButton view2 = new ViewButton();
		view2.setName("在线题库");
		view2.setType(Button.TYPE_VIEW);
		view2.setUrl("http://www.gavin.com/information.html");
		
		// click按钮
		ClickButton click = new ClickButton();
		click.setName("关于");
		click.setType(Button.TYPE_CLICK);
		click.setKey("click_关于");
		
		// menu
		Menu menu = new Menu();
		menu.setButton(new Button[] {view1 , view2 , click});
		
		// 打印json字符串
		Gson gson = new Gson();
		String menuJsonStr = gson.toJson(menu);
		System.out.println(menuJsonStr);
	}
}

运行后输出结果为

{
	"button": [
		{
			"sub_button": [
				{
					"type": "view",
					"url": "http://www.gavin.com/java.html",
					"name": "JAVA"
				},
				{
					"type": "view",
					"url": "http://www.gavin.com/mysql.html",
					"name": "MySQL"
				}
			],
			"name": "学习资料"
		},
		{
			"type": "view",
			"url": "http://www.gavin.com/information.html",
			"name": "在线题库"
		},
		{
			"type": "click",
			"key": "click_关于",
			"name": "关于"
		}
	]
}

可以看到结果符合我们的预期。

猜你喜欢

转载自blog.csdn.net/u012693016/article/details/103293899