微信开发(四)

本文介绍如何使用Java创建微信公众号自定义菜单,包括一级菜单和二级菜单的设置方法,以及不同类型的按钮实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自定义菜单

按照微信文档的说话,一级菜单最多三个,二级菜单最多5个,并且有多种类型按钮以下只实现三种按钮:click,viiew,pic_photo_or_album

微信官方文档

实现步骤:
	1.根据文档给出的请求示例,创建各个按钮的java对象
	2.通过JSONObject将java对象转换成json数据格式
	3.通过文档给出的接口将json数据发送到公众号的前台
	注:
		1.必须先创建接口,才能个性化菜单接口
		2.如果出现{"errcode":40024,"errmsg":"invalid sub button type rid: 604839f8-7b5da5be-69c27eef"},
			说明按钮的实例对象属性写错,建议对照文档仔细检查
具体代码:(所有java实例对象都省略set,get)
//按钮对象
public class Button {
    private List<AbstractButton> button = new ArrayList<>();
}

public abstract class AbstractButton {
    private String name;
    }
    
public class ClickButton extends AbstractButton{
    private String type="click";
    private String key;
    public ClickButton(String name, String key) {
        super(name);
        this.key = key;
    }
 }

public class SubButton extends AbstractButton {
    private List<AbstractButton> sub_button = new ArrayList<>();
}

public class ViewButton extends AbstractButton {
    private String type="view";
    private String url;
    public ViewButton(String name, String url) {
        super(name);
        this.url = url;
    }
}

//创建菜单工具类
public class CreatMeuUtil {
    public static void main(String[] args) {
        //自定义菜单
        Button btn = new Button();
        //第一个一级菜单
        btn.getButton().add(new ClickButton("一级点击","1"));
        //第二个一级菜单
        btn.getButton().add(new ViewButton("一级跳转","http://www.baidu.com"));
        //第三个一级菜单
        SubButton sb = new SubButton("有子菜单");
        //为第三个一级菜单添加三个子菜单
        sb.getSub_button().add(new PhotoOrAlbumButton("传图","31"));
        sb.getSub_button().add(new ClickButton("点击","32"));
        sb.getSub_button().add(new ViewButton("去网易","http://news.163.com"));
        btn.getButton().add(sb);
        //转换成json
        JSONObject jsonObject = JSONObject.fromObject(btn);
        System.out.println(jsonObject.toString());
        //准备url
        String url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN";
        url = url.replace("ACCESS_TOKEN", WxService.getAccessToken());
        //发送请求
        String result = Util.post(url,jsonObject.toString());
        System.out.println(result);
    }
}

//在service中调用
/**
     * 处理事件推送
     * @param requestMap
     * @return
     */
    private static BaseMessage dealEvent(Map<String, String> requestMap) {
        String event = requestMap.get("Event");
        switch (event){
            case "CLICK":
                return dealClick(requestMap);
            case "VIEW":
                return dealView(requestMap);
        }
        return null;
    }

    /**
     * 处理view类型按钮的菜单
     * @param requestMap
     * @return
     */
    private static BaseMessage dealView(Map<String, String> requestMap) {
        return null;
    }

    /**
     * 处理click类型按钮的菜单
     * @param requestMap
     * @return
     */
    private static BaseMessage dealClick(Map<String, String> requestMap) {
        String key = requestMap.get("EventKey");
        switch (key){
            //点击一菜单
            case "1":
                //处理点击了第一个一级菜单
                return new TextMessage(requestMap,"你点了第一个一级菜单");
            case "32":
                //处理点击了第三个一级菜单的第二个子菜单
                break;
            default:
                break;
        }

        return null;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值