wechat4j开发-菜单创建

wechat4j中提供了MenuManager类来创建菜单

1.相关的实体

org.sword.wechat4j.menu.Menu;
org.sword.wechat4j.menu.MenuButton;
org.sword.wechat4j.menu.MenuManager;

2.创建实例

package com.fang.wechat.util;

import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.List;

import org.sword.wechat4j.event.EventType;
import org.sword.wechat4j.menu.Menu;
import org.sword.wechat4j.menu.MenuButton;
import org.sword.wechat4j.menu.MenuManager;

/**
 *菜单创建工具类
 *
 * @author glei
 *
 */
public class MenuUtil {

	/**
	 * 菜单工具类
	 */
	private MenuManager menuManager = new MenuManager();

	/**
	 * 创建菜单
	 * @throws Exception
	 */
	public void createMenu() throws Exception {
		Menu menu = new Menu();

		List<MenuButton> buttons = new ArrayList<MenuButton>();
		buttons.add(createbutton1());
		buttons.add(createbutton2());
		buttons.add(createbutton3());
		menu.setButton(buttons);

		menuManager.create(menu);
	}

	/**
	 * 删除菜单
	 * @throws Exception
	 */
	public void deleteMenu() throws Exception {
		menuManager.delete();
	}

	/**
	 * 查看菜单
	 * @throws Exception
	 */
	public void queryMenu() throws Exception {
		Menu menu = menuManager.getMenu();
		List<MenuButton> list = menu.getButton();
		for(MenuButton mb:list) {
			List<MenuButton> subbuttons = mb.getSubButton();
			System.out.println(subbuttons.get(0).getName());
		}
	}

	/**
	 * 创建第一个菜单项
	 *
	 * @return
	 */
	public MenuButton createbutton1() {
		MenuButton menuButton = new MenuButton();
		menuButton.setName("菜单一");

		MenuButton mb1 = new MenuButton();
		mb1.setType(EventType.view);
		mb1.setName("菜单一按钮一");
		mb1.setUrl("http://xx");

		MenuButton mb2 = new MenuButton();
		mb2.setType(EventType.view);
		mb2.setName("菜单一按钮二");
		mb2.setUrl("http://xx");

		List<MenuButton> buttons = new ArrayList<MenuButton>();
		buttons.add(mb1);
		buttons.add(mb2);

		menuButton.setSubButton(buttons);
		return menuButton;
	}

	/**
	 * 创建第二个菜单项
	 *
	 * @return
	 * @throws Exception
	 */
	public MenuButton createbutton2() throws Exception {
		MenuButton menuButton = new MenuButton();
		menuButton.setName("菜单二");

		MenuButton mb1 = new MenuButton();
		mb1.setType(EventType.view);
		mb1.setName("菜单二按钮一");
		mb1.setUrl("http://xx");

		MenuButton mb2 = new MenuButton();
		mb2.setType(EventType.view);
		mb2.setName("菜单二按钮二");
		mb2.setUrl("http://xx");

		List<MenuButton> buttons = new ArrayList<MenuButton>();
		buttons.add(mb1);
		buttons.add(mb2);

		menuButton.setSubButton(buttons);
		return menuButton;
	}

	public static void main(String[] args) throws Exception {
		MenuUtil menuUtil = new MenuUtil();
		menuUtil.createMenu();
//		menuUtil.deleteMenu();
//		menuUtil.queryMenu();
	}
}

3.菜单数限制和字数限制

自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。

4.缓存

创建自定义菜单后,菜单的刷新策略是,在用户进入公众号会话页或公众号profile页时,如果发现上一次拉取菜单的请求在5分钟以前,就会拉取一下菜单,如果菜单有更新,就会刷新客户端的菜单。测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果。

5.按钮分类

click:点击推事件
用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event 的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互;

view:跳转URL
用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的网页URL,可与网页授权获取用户基本信息接口结合,获得用户基本信息。

scancode_push:扫码推事件
用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后显示扫描结果(如果是URL,将进入URL),且会将扫码的结果传给开发者,开发者可以下发消息。

scancode_waitmsg:扫码推事件且弹出“消息接收中”提示框
用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后,将扫码的结果传给开发者,同时收起扫一扫工具,然后弹出“消息接收中”提示框,随后可能会收到开发者下发的消息。

pic_sysphoto:弹出系统拍照发图
用户点击按钮后,微信客户端将调起系统相机,完成拍照操作后,会将拍摄的相片发送给开发者,并推送事件给开发者,同时收起系统相机,随后可能会收到开发者下发的消息。

pic_photo_or_album:弹出拍照或者相册发图
用户点击按钮后,微信客户端将弹出选择器供用户选择“拍照”或者“从手机相册选择”。用户选择后即走其他两种流程。

pic_weixin:弹出微信相册发图器
用户点击按钮后,微信客户端将调起微信相册,完成选择操作后,将选择的相片发送给开发者的服务器,并推送事件给开发者,同时收起相册,随后可能会收到开发者下发的消息。

location_select:弹出地理位置选择器
用户点击按钮后,微信客户端将调起地理位置选择工具,完成选择操作后,将选择的地理位置发送给开发者的服务器,同时收起位置选择工具,随后可能会收到开发者下发的消息。

media_id:下发消息(除文本消息)
用户点击media_id类型按钮后,微信服务器会将开发者填写的永久素材id对应的素材下发给用户,永久素材类型可以是图片、音频、视频、图文消息。请注意:永久素材id必须是在“素材管理/新增永久素材”接口上传后获得的合法id。

view_limited:跳转图文消息URL
用户点击view_limited类型按钮后,微信客户端将打开开发者在按钮中填写的永久素材id对应的图文消息URL,永久素材类型只支持图文消息。请注意:永久素材id必须是在“素材管理/新增永久素材”接口上传后获得的合法id。

时间: 2024-11-05 04:28:15

wechat4j开发-菜单创建的相关文章

MCADEx开发 ProE二次开发 Creo二次开发 菜单创建

详细参考:  http://www.mcadex.com/bbs_1431046_ss20130113/thread_309812_1.html 详细参考:  http://www.mcadex.com/bbs_1431046_ss20130113/thread_309812_1.html

【微信公众平台开发】创建自定义菜单(四)

1.根据微信公众平台文档,得知创建自定义菜单有如下规则: a.目前自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单.一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以"..."代替.请注意,创建自定义菜单后,由于微信客户端缓存,需要24小时微信客户端才会展现出来.建议测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果. 注:所以最多只能创建15个功能菜单,多了就出错了! b. 目前自定义菜单接口可实现两种类型按钮,如下: click: 用户点击

微信公众号开发系列-开发模式创建自定义菜单

通过程序方式实现自定义菜单,通过http请求封装类交互微信自定义菜单接口 1.得到AccessToken access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token.正常情况下access_token有效期为7200秒,重复获取将导致上次获取的access_token失效.由于获取access_token的api调用次数非常有限,建议开发者全局存储与更新access_token,频繁刷新access_token会导致api调用受限,影响自身业务. 请开发者

Win10 IoT C#开发 2 - 创建基于XAML的UI程序 及 应用的三种部署方法

原文:Win10 IoT C#开发 2 - 创建基于XAML的UI程序 及 应用的三种部署方法 Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本不同,是为物联网设备专门设计的,硬件也不仅仅限于x86架构,同时可以在ARM架构上运行. 上一章我们讲了Raspberry安装Win10 IoT系统及搭建Visual Studio 2015开发环境的方法(http://www.cnblogs.com/cloudtech/p/5562120.html)

Win32 程序开发:创建一个应用程序窗口

一.创建一个应用程序窗口 代码如下: // 头文件 #include <windows.h> // 全局变量 WCHAR g_lpszClassName[] = L"CLASSNAME"; WCHAR g_lpszWindowName[] = L"哈喽,新的征程"; // 函数声明 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); // 应用程序主函数 INT APIENTRY WinMain(H

常规功能和模块自定义系统 (cfcmms)—029开发日志(创建ManyToMany的column4)

029开发日志(创建ManyToMany的column4) 根据以上几节的准备,在这一节中可以加入ManyToManyColumn.js了.先来看看做好的样子如下图: 单击文字链接可以显示该条记录的情况.按下删除按钮则会显示一个提示窗口,询问是否删除此项. 下面即为ManyToManyColumn.js的代码. /** * * ManyToMany记录的管理,将根据权限设置来显示修改或删除按钮 * * 蒋锋 2015.12.31 * */ Ext .define( 'app.module.wid

abap 开发之创建表维护生成器

在sap开发中有时需要对一些自建表维护数据,但又不想写程序,怎么办呢??这个时候我们可以直接生成个表维护生成器,为其定义一个事物码就ok了.以下是表格维护生成器的生成步骤. 首先我们需要先定义表.输入事务代码se11,在database table 对应的文本框中输入表名,点击创建.创建表的时候我们需要将其维护成,允许通过标准表格维护工具维护 2.定义好表里面的字段之后,选择工具栏上面的  实用程序==>表维护生成器 3.点击进去之后的页面是这样的,输入相关的参数之后,点击白色的创建按钮.则会创

cocos2d-x -3.81+win7+vs2013开发环境创建新的项目

cocos2d-x -3.81+win7+vs2013开发环境创建新的项目 1.准备阶段 (1) vs2013下载及安装 (2)cocos2d-x 3.8.1下载及解压 (3)python下载及安装(新版本cocos2d需要python创建工程) 2.编译cocos2d-x 3.8.1 (1) cocos2d-x 3.8.1解压后, 打开E:\cocos2d-x-3.8.1\build文件夹, 双击cocos2d-win32.sln打开解决方案. (2) 在解决方案准备就绪后, 右键cpp-te

常规功能和模块自定义系统 (cfcmms)—030开发日志(创建ManyToMany的column5)

030开发日志(创建ManyToMany的column5) 现在对于这个字段来说,还剩最后一个功能了,那就是可以修改ManyToMany的值了.在grid的inline操作里面,是可以直接删除已有值,但是如果要新增的话,就必须要有一个新的界面了.下面来看看开发修改ManyToMany字段所需要的步骤. 1.创建一个修改窗口,在里面创建一个可check的树: 2?到后台请求数据,读取当前记录的所有的ManyToMany的可选项,并把已经选中的打勾: 3?根据读取到的数据更新树: 4?用户操作che