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

java微信公众号(二)

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

java微信公众号(二)

创建自定义菜单
  1. 控制器

    @RequestMapping("/WXPublic")
    @RestController
    @ConfigurationProperties("app")
    @Slf4j
    public class CreateMenuController {
    
        @Autowired
        CreateMenuUtil createMenuUtil;
        @Autowired
        private Environment env;
        @GetMapping("/CreateMenu")
        public String createMenu(){
            String qgqc=env.getProperty("app.applet.qgqc.appId");
            String sszg=env.getProperty("app.applet.sszg.appId");
            ButtonMenu btn = new ButtonMenu();
            SubButton subButton1 = new SubButton("注册有奖");
            ClickButton btn1 = new ClickButton("一级菜单","一级菜单");
            btn.getButton().add(btn1);
            SubButton subButton2 = new SubButton("多级菜单");
            subButton2.getSub_button().add(new ViewButton("链接跳转","url"));
            subButton2.getSub_button().add(new MiniprogramButton("小程序跳转","小程序页面路径",小程序appid));
            subButton2.getSub_button().add(new ClickButton("菜单点击事件","对应点击事件的key值"));
            btn.getButton().add(subButton2);
            String jsonObject = JSONObject.toJSONString(btn);
            JSONObject json = JSONObject.parseObject(jsonObject);
            String s = createMenuUtil.CreateMenu(json.toString());
            return s;
        }
    }
    
  2. 创建菜单工具类

    @Slf4j
    public class CreateMenuUtil {
    
        @Autowired
        private AccessTokenUtil accessTokenUtil;
    
        public String CreateMenu(@RequestBody String data){
            try{
                //获取token
                Map map = accessTokenUtil.getAccessToken();
                if(map.get("access_token")==null){
                    map = accessTokenUtil.getAccessToken();
                }else {
                    //判断token是否失效
                    long totalSeconds = (System.currentTimeMillis() - Long.valueOf(String.valueOf(map.get("getTokenTime"))).longValue()) / 1000;
                    long expiresIn = Long.valueOf(String.valueOf(map.get("expires_in"))).longValue();
                    if(totalSeconds>expiresIn){
                        map = accessTokenUtil.getAccessToken();
                    }else {
                        String createMenuUrl="https://api.weixin.qq.com/cgi-bin/menu/create?access_token="+map.get("access_token");
                        //向微信服务器发送post请求
                        JSONObject jsonObject = HttpUtil.httpsRequest(createMenuUrl , "POST", data);
                        return String.valueOf(jsonObject);
                    }
                }
            }catch (Exception e){
                e.printStackTrace();
            }
            return null;
        }
    }
    
  3. 发送请求工具类

    public class HttpUtil {
        
        public static JSONObject httpsRequest(String requestUrl, String requestMethod, String data) {
            JSONObject jsonObject = null;
            InputStream inputStream = null;
            InputStreamReader inputStreamReader = null;
            BufferedReader bufferedReader = null;
            try {
                URL url = new URL(requestUrl);
                HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
                conn.setDoOutput(true);
                conn.setDoInput(true);
                conn.setUseCaches(false);
                // 设置请求方式(GET/POST)
                conn.setRequestMethod(requestMethod);
                conn.connect();
                // 当data不为null时向输出流写数据
                if (null != data) {
                    // getOutputStream方法隐藏了connect()方法
                    OutputStream outputStream = conn.getOutputStream();
                    // 注意编码格式
                    outputStream.write(data.getBytes("UTF-8"));
                    outputStream.close();
                }
                // 从输入流读取返回内容
                inputStream = conn.getInputStream();
                inputStreamReader = new InputStreamReader(inputStream, "utf-8");
                bufferedReader = new BufferedReader(inputStreamReader);
                String str = null;
                StringBuffer buffer = new StringBuffer();
                while ((str = bufferedReader.readLine()) != null) {
                    buffer.append(str);
                }
                conn.disconnect();
                jsonObject = JSONObject.parseObject(buffer.toString());
                return jsonObject;
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            } finally {
                // 释放资源
                try {
                    if(null != inputStream) {
                        inputStream.close();
                    }
                    if(null != inputStreamReader) {
                        inputStreamReader.close();
                    }
                    if(null != bufferedReader) {
                        bufferedReader.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
  4. 实体类

    1. Button

      @Getter
      @Setter
      public abstract class Button {
          private String name;
          public Button(String name) {
              this.name = name;
          }
      }
      
    2. ButtonMenu

      @Setter
      @Getter
      public class ButtonMenu {
          private List
    3. ClickButton

      @Setter
      @Getter
      public class ClickButton  extends Button{
      
          private String type="click";
          private String key ;
      
          public ClickButton(String name, String key) {
              super(name);
              this.key = key;
          }
      }
      
    4. MiniprogramButton

      @Getter
      @Setter
      public class MiniprogramButton extends Button {
      
          private String type="miniprogram";
          private String url="http://mp.weixin.qq.com";
          private String appid ;
          private String pagepath;
      
          public MiniprogramButton(String name, String pagepath,String appid) {
              super(name);
              this.pagepath = pagepath;
              this.appid = appid;
          }
      }
      
    5. ViewButton

      @Getter
      @Setter
      public class ViewButton extends Button {
          private String type = "view";
          private String url;
      
          public ViewButton(String name, String url) {
              super(name);
              this.url = url;
          }
      }
      
  5. 使用postman调用接口,或者是后台页面传值调用接口即可

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

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

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