栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

微信公众号开发-自定义菜单

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

微信公众号开发-自定义菜单

微信公众号开发-自定义菜单

下案例仅供参考,但保证有效可用!!!

文章目录
  • 微信公众号开发-自定义菜单
  • 一、应用场景
  • 二、功能实现
    • 1.服务器配置
    • 2.access_token 获取
    • 3.代码实现
      • 1.javaBean创建
      • 2.创建菜单
  • 总结


一、应用场景
1.在启用token验证后,无法通过公众平台编辑菜单,需要通过API编辑菜单
2.想要在自己的系统中进行相关菜单编辑,而不通过登录公众号进行编辑
二、功能实现

以下示例以点击菜单跳转网页为例,其它菜单功能请参考官网自定义菜单。

1.服务器配置

微信公众号-服务器配置(token验证)已开通的请忽略

2.access_token 获取

可参考 微信公众号消息推送开发(模板消息):开发实现(二)获取access_token

3.代码实现 1.javaBean创建

1.分别创建SubMenu.java和ParentMenu.java实体类用于封装请求体(不创建实体类的话直接封装josn字符串也可以)

SubMenu.java  	
package com.lvyq.wechat.menu;


public class SubMenu {

    
    
    private String type;

    private String name;
    
    private String key;

    

    private String url;

    
    private String appid;

    
    private String pagepath;

    
    private String article_id;

    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;
    }

    public String getUrl() {
        return url;
    }

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

    public String getAppid() {
        return appid;
    }

    public void setAppid(String appid) {
        this.appid = appid;
    }

    public String getPagepath() {
        return pagepath;
    }

    public void setPagepath(String pagepath) {
        this.pagepath = pagepath;
    }

    public String getArticle_id() {
        return article_id;
    }

    public void setArticle_id(String article_id) {
        this.article_id = article_id;
    }
}
ParentMenu.java  	
import java.util.List;


public class ParentMenu extends SubMenu {

    
    private List sub_button;

    public List getSub_button() {
        return sub_button;
    }

    public void setSub_button(List sub_button) {
        this.sub_button = sub_button;
    }
}

2.创建菜单

根据以下demo修改即可,access_token的获取方式,上文已经给了传送门

创建MenuCreate.java
package com.lvyq.wechat.menu;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;


public class MenuCreate {

    public static final String ACCESS_TOKEN ="xxxx";
    public static String MENU_CREATE="https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN";

    public static void main(String[] args) {
        List button = new ArrayList<>();
        ParentMenu parentMenu = new ParentMenu();
        parentMenu.setName("百度CSDN");
        List subButtons = new ArrayList<>();
        SubMenu subButton = new SubMenu();
        subButton.setType("view");
        subButton.setName("百度一下");
        subButton.setUrl("http://www.baidu.com/");
        subButtons.add(subButton);
        SubMenu subButton2 = new SubMenu();
        subButton2.setType("view");
        subButton2.setName("CSDN");
        subButton2.setUrl("https://www.csdn.net/");
        subButtons.add(subButton2);
        parentMenu.setSub_button(subButtons);
        button.add(parentMenu);
        JSONObject mav = new JSONObject();
        mav.put("button",JSON.toJSON(button));
        MENU_CREATE=MENU_CREATE.replace("ACCESS_TOKEN",ACCESS_TOKEN);
        sendPost(MENU_CREATE, mav.toJSONString());
    }
    public static String sendPost(String url, String param) {
        PrintWriter out = null;
        BufferedReader in = null;
        String result = "";
        try {
            URL realUrl = new URL(url);
            URLConnection conn = realUrl.openConnection();
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            conn.setDoOutput(true);
            conn.setDoInput(true);
            out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "UTF-8"));
            out.print(param);
            out.flush();
            String line;
            for(in = new BufferedReader(new InputStreamReader(conn.getInputStream())); (line = in.readLine()) != null; result = result + line) {
            }
        } catch (Exception var16) {
            System.out.println("发送 POST 请求出现异常!" + var16);
            var16.printStackTrace();
        } finally {
            try {
                if (out != null) {
                    out.close();
                }

                if (in != null) {
                    in.close();
                }
            } catch (IOException var15) {
                var15.printStackTrace();
            }

        }

        return result;
    }

}

效果图:

总结

每次创建新的菜单时会直接覆盖,查询菜单和删除菜单就不说了,不常用

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1013366.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号