JAVA微信公众号自定义菜单

微信公众号后台是可以创建菜单 但是有时候触发微信事件发送消息或模板消息的时候 公众号定义的菜单提示会失效 这时候只能用 Java后台代码创建菜单

好了下面我们开始 (我用的lombok所以没有实现getset用的是setget注解)

首先封装实体类
按钮固有属性类(父类)

/**
 * 按钮固有属性类 
 */
@Getter
@Setter
public class Button { 
	//按钮名称
    private String name;  
} 

再就是普通按钮点击获取文本啊 模板消息啊

/**
 * 普通按钮类 
 */
@Getter
@Setter
public class CommonButton extends Button {  
	//按钮类型
    private String type;  
    //要获取的消息key
    private String key; 
} 

然后就是带有链接的跳转按钮类啦

/**
 * 带有链接的跳转按钮类
 */
@Getter
@Setter
public class ViewButton extends Button {  
	//按钮类型 (跳转类型按钮类型为 view)
    private String type;
    
	// 跳转链接
    private String url;  
}

上面是但是按钮 要是组合按钮呢 就是点击一个按钮出现子按钮这时候就要一个 按钮组

/**
 * 按钮组合
 */
@Getter
@Setter
public class GroupButton extends Button {  
	//组合数组
    private Button[] sub_button;  
}  

最后是把单个按钮和组合按钮放在一起形成最终菜单

/**
 * 最终菜单
 */
@Getter
@Setter
public class Menu {  
	//最终组合按钮
    private Button[] button; 
} 

为了区分跟上面的组合按钮分开 所以定义不同的名字

重要:不是重复类是需要两个组合类 下面的实现类你就会明白

好了所有的类都定义好了 现在开始实现

首先是先写好发送创建菜单给微信的请求

声明 :·······获取微信token我就不贴出来了 还有 发送请求的工具类 之前有写过的 可以去看 我的微信支付 (https://blog.csdn.net/qq_33099301/article/details/84790180)

//1.菜单创建(POST) 限100(次/天)  
public static final String CREATE_MENU_URL = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN";  
//2.查询菜单数据
 public static final String GET_MENU_URL = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token=ACCESS_TOKEN";  
//3.删除菜单
 public static final String DELETE_MENU_URL = "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=ACCESS_TOKEN";  

/**
 * 创建菜单
 * @param menu  菜单实例
 * @param accessToken 有效凭证
 */
public static void createMenu(WxMenu menu, String accessToken)
{
    //1.准备POST请求参数
    String data = JSONObject.fromObject(menu).toString();
    System.out.println("---------------------------创建微信菜单JSON数据---------------------");
    System.out.println(data);

    //2.拼装创建菜单的url
    String url = CREATE_MENU_URL.replace("ACCESS_TOKEN", accessToken);

    //3.发起POST请求,获取返回结果
    String result = HttpSendUtil.sendPost(url, data);
    JSONObject jsonObject = JSONObject.fromObject(result);
    System.out.println("---------------------------创建微信菜单返回结果---------------------");
    System.out.println(result);

    if (null != jsonObject) {

        //5.错误消息处理
        if (0 != jsonObject.getInt("errcode"))
        {
            System.out.println("---------------------------创建微信菜单错误---------------------");
            int errCode = jsonObject.getInt("errcode");
            String errMsg = jsonObject.getString("errmsg");
            throw new IllegalArgumentException("error code:"+errCode+", error message:"+errMsg);
        } else
        {
            System.out.println("---------------------------创建微信菜单成功---------------------");
        }
    }
}


/**
 * 查询菜单数据
 * @param accessToken 有效凭证
 * @return
 * @throws Exception JSONObject
 */
public static JSONObject getMenu(String accessToken)
{
    //1.获取请求url
    String url = GET_MENU_URL.replace("ACCESS_TOKEN", accessToken);

    //2.发起GET请求,获取返回结果
    String result = HttpSendUtil.sendGet(url,"");
    JSONObject jsonObject = JSONObject.fromObject(result);
    System.out.println("---------------------------查询微信菜单返回结果---------------------");
    System.out.println(result);

    //3.解析结果,获取菜单数据
    JSONObject returnJsonObject=null;
    if (null != jsonObject)
    {
        //4.错误消息处理
        if ( 0 != jsonObject.getInt("errcode"))
        {
            System.out.println("---------------------------查询微信菜单错误---------------------");
            int errCode = jsonObject.getInt("errcode");
            String errMsg = jsonObject.getString("errmsg");
            throw new IllegalArgumentException("error code:"+errCode+", error message:"+errMsg);
            //5.成功获取菜单数据
        } else
        {
            returnJsonObject= jsonObject;
        }
    }
    return returnJsonObject;
}


/**
 * 删除菜单
 * @param accessToken  有效凭证
 * @throws Exception void
 */
public static void deleteMenu(String accessToken)
{
    //1.获取请求url
    String url=DELETE_MENU_URL.replace("ACCESS_TOKEN", accessToken);

    //2.发起GET请求,获取返回结果
    String result = HttpSendUtil.sendGet(url,"");
    JSONObject jsonObject = JSONObject.fromObject(result);
    System.out.println("---------------------------删除微信菜单返回结果---------------------");
    System.out.println(result);

    //3.解析结果
    if (null != jsonObject)
    {
        //4.错误消息处理
        if (0 != jsonObject.getInt("errcode"))
        {
            System.out.println("---------------------------删除微信菜单错误---------------------");
            int errCode = jsonObject.getInt("errcode");
            String errMsg = jsonObject.getString("errmsg");
            throw new IllegalArgumentException("error code:"+errCode+", error message:"+errMsg);
            //5.成功删除菜单
        } else
        {
            System.out.println("---------------------------删除微信菜单成功---------------------");
        }
    }

}

好了哦 现在开始创建菜单

/**
 * 创建微信菜单
 */
public void wxCreateMenu()
{
    String access_Token = 获取token;

    ViewButton viewButton1 = new ViewButton();
    viewButton1.setName("立即扫码");
    viewButton1.setType("view");
    viewButton1.setUrl("https://www.baidu.com");

    ViewButton viewButton2 = new ViewButton();
    viewButton2.setName("宝贝4");
    viewButton2.setType("view");
    viewButton2.setUrl("https://www.baidu.com");

    ViewButton viewButton3 = new ViewButton();
    viewButton3.setName("建立房子");
    viewButton3.setType("view");
    viewButton3.setUrl("https://www.baidu.com");

    ViewButton viewButton4 = new ViewButton();
    viewButton4.setName("我的中心");
    viewButton4.setType("view");
    viewButton4.setUrl("https://www.baidu.com");
    
	CommonButton commonButton1 = new CommonButton();  
    commonButton1.setName("宝贝1");  
    commonButton1.setType("click");  
    commonButton1.setKey("22"); 
    
	CommonButton commonButton2 = new CommonButton();  
    commonButton2.setName("宝贝2");  
    commonButton2.setType("click");  
    commonButton2.setKey("23"); 

    GroupButton groupButton = new GroupButton();
    groupButton.setName("我的宝贝");
    groupButton.setSub_button(new Button[]{ commonButton1 , commonButton2, viewButton2});

    WxMenu wxMenu = new WxMenu();
    wxMenu.setButton(new Button[]{  viewButton1 ,viewButton3,viewButton4, groupButton });

    createMenu(wxMenu,access_Token);
}

好了这就已经OK了
如果有什么不懂得可以加V AiMyHear
大神勿喷 我也是借鉴

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值