Java代码修改微信公众号菜单

前言

相信大家在微信公众号开发中都会遇到这样一个问题:启用服务器配置后,原先设置的公众号菜单都失效了,那么此时只能使用代码创建公众号菜单了,代码如下:

 

       个人微信公众号:小诸葛的博客,使用过程中如有疑问,可在公众号后台留言

 

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** @description 官方文档 https://developers.weixin.qq.com/doc/offiaccount/Custom_Menus/Creating_Custom-Defined_Menu.html* 所需依赖:* * com.alibaba* fastjson* 1.1.41* * @author: liyinlong* @date 2020-01-05 22:09*/public class CreateWxMenu {public static void main(String[] args) {String appid = "你的公众号id";String secret = "你的公众号密钥";String accessTokenStr = sendGet("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret);System.out.println("access_token获取结果:" + accessTokenStr);JSONObject accessTokenObj = JSONObject.parseObject(accessTokenStr);String access_token = accessTokenObj.getString("access_token");System.out.println("access_token:" + access_token);JSONObject menu = new JSONObject();JSONArray buttonAry = new JSONArray();Map object1 = new HashMap<>();object1.put("type", "view");object1.put("name", "官方文档");object1.put("url", "https://developers.weixin.qq.com/doc/offiaccount/Custom_Menus/Creating_Custom-Defined_Menu.html");Map object2 = new HashMap<>();object2.put("type", "view");object2.put("name", "我的csdn");object2.put("url", "https://blog.csdn.net/long_yi_1994");buttonAry.add(object1);buttonAry.add(object2);menu.put("button", buttonAry);String res = sendPost("https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" + access_token, menu.toString());System.out.println("菜单修改结果:" + res);}/*** @param url   发送请求的URL* @param param 请求参数* @return 所代表远程资源的响应结果* @description 向指定 URL 发送POST方法的请求* @author: liyinlong* @date 2020-01-05 21:00*/public static String sendPost(String url, String param) {System.out.println("\n==============================POST请求开始==============================");PrintWriter out = null;BufferedReader in = null;String result = "";try {URL realUrl = new URL(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)");// 发送POST请求必须设置如下两行conn.setDoOutput(true);conn.setDoInput(true);// 获取URLConnection对象对应的输出流out = new PrintWriter(conn.getOutputStream());// 发送请求参数out.print(param);// flush输出流的缓冲out.flush();// 定义BufferedReader输入流来读取URL的响应in = new BufferedReader(new InputStreamReader(conn.getInputStream()));String line;while ((line = in.readLine()) != null) {result += line;}} catch (Exception e) {System.out.println("发送 POST 请求出现异常!" + e);e.printStackTrace();}//使用finally块来关闭输出流、输入流finally {try {if (out != null) {out.close();}if (in != null) {in.close();}} catch (IOException ex) {ex.printStackTrace();}}System.out.println("url:" + url);System.out.println("POST请求结果:" + result);System.out.println("==============================POST请求结束==============================\n");return result;}/*** @param url 请求url,若有参数,则拼在里面* @return 所代表远程资源的响应结果* @description 发送GET请求,参数拼在url里* @author: liyinlong* @date 2020-01-05 21:56*/public static String sendGet(String url) {System.out.println("\n==============================GET请求开始==============================");String result = "";BufferedReader in = null;try {String urlNameString = url;URL realUrl = new URL(urlNameString);// 打开和URL之间的连接URLConnection connection = realUrl.openConnection();// 设置通用的请求属性connection.setRequestProperty("accept", "*/*");connection.setRequestProperty("connection", "Keep-Alive");connection.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");// 建立实际的连接connection.connect();// 获取所有响应头字段Map> map = connection.getHeaderFields();// 遍历所有的响应头字段/* for (String key : map.keySet()) {System.out.println(key + "--->" + map.get(key));}*/// 定义 BufferedReader输入流来读取URL的响应in = new BufferedReader(new InputStreamReader(connection.getInputStream()));String line;while ((line = in.readLine()) != null) {result += line;}} catch (Exception e) {System.out.println("发送GET请求出现异常!" + e);e.printStackTrace();}// 使用finally块来关闭输入流finally {try {if (in != null) {in.close();}} catch (Exception e2) {e2.printStackTrace();}}System.out.println("url:" + url);System.out.println("GET请求结果:" + result);System.out.println("==============================GET请求结束==============================\n");return result;}
}

 

       个人微信公众号:小诸葛的博客,使用过程中如有疑问,可在公众号后台留言

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部