概述
微信自定义菜单的创建与使用
需求
当微信公众号设置为开发者模式,想要自己创建和开发菜单的话,就需要自己调用微信创建菜单的接口来创建菜单了。创建菜单之后,如果需要迫切的看到效果,有时候需要取消关注-从新关注才能够看到的哦(缓存问题)。由于新版微信添加的挺多按钮类型,目前只实现click(点击推事件)和view(跳转URL),其他类型的大致相同。
注意:公众号必须是认证了的才有这个自定义菜单创建的功能的哦。你可以在自己的公众号->开发者中心,查看是否支持该接口。
菜单类介绍
Buttonx按钮类
private String name;
private String type; //菜单类型 1:点击事件,2:跳转url,3:分组菜单
private String key; //菜单key值
private String url; //跳转的链接
private List sub_button; //如果是一级菜单,这集合表示二级菜单
//all get and set 所有字段的get 和 set方法
Menux菜单类
public class Menux {
private List button;
public List getButton() {
return button;
}
public void setButton(List button) {
this.button = button;
}
}
菜单类包含按钮类(微信最多只能有三个一级菜单哦),按钮类有一级按钮、事件推送按钮、跳转URL按钮,一级按钮可以包含5个二级按钮,5个二级按钮的类型只有事件推送按钮、跳转URL按钮。
场景
如下图公众号菜单:
按钮类型:
1.主页:跳转URL按钮
2.主页3:推送事件按钮
3.一级菜单:(如名)
代码
根据菜单分别构建相关的button和menu对象。
如:
主页这个button对象:
Buttonx btn1 = new Buttonx();
btn1.setName("主页");
btn1.setUrl("http://www.csdn.net/");
btn1.setType("view");
Buttonx btn2 = new Buttonx();
btn2.setName("主页3");
btn2.setKey("KEY_1");
btn2.setType("click");
Buttonx btnsub = new Buttonx();
btnsub.setName("一级菜单");
Buttonx btn3 = new Buttonx();
btn3.setName("大家好");
btn3.setUrl("http://www.baidu.com/");
btn3.setType("view");
Buttonx btn4 = new Buttonx();
btn4.setName("你好");
btn4.setKey("KEY_1");
btn4.setType("click");
btnsub.sub_button.add(btn3);
btnsub.sub_button.add(btn4);
Menux menu = new Menux();
menu.getButton().add(btn1);
menu.getButton().add(btn2);
menu.getButton().add(btnsub);
// 将菜单对象转换成json字符串,利用的是一个jar包,不用自己封装了,也可以自己手动封装
String jsonMenu = net.sf.json.JSONObject.fromObject(menu).toString();
// 调用接口创建菜单
JSONObject jsonObject = httpRequest(url, "POST", jsonMenu);
if (null != jsonObject) {
//如果返回的代码不等于0,那么就是说操作的数据不成功
if (0 != jsonObject.getInt("errcode")) {
result = jsonObject.getInt("errcode");
log.error("创建菜单失败 errcode:{} errmsg:{}", jsonObject.getInt("errcode"), jsonObject.getString("errmsg"));
}
}
}
httpRequest(String requestUrl, String requestMethod, String outputStr)方法描述:
/** * 发起https请求并获取结果 *@param requestUrl 请求地址 *@param requestMethod 请求方式(GET、POST) *@param outputStr 提交的数据 *@return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值) */
public static JSONObject httpRequest(String requestUrl, String requestMethod, String outputStr) {
JSONObject jsonObject = null;
StringBuffer buffer = new StringBuffer();
try {
// 创建SSLContext对象,并使用我们指定的信任管理器初始化
TrustManager[] tm = { new MyX509TrustManager() };
SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
sslContext.init(null, tm, new java.security.SecureRandom());
// 从上述SSLContext对象中得到SSLSocketFactory对象
SSLSocketFactory ssf = sslContext.getSocketFactory();
URL url = new URL(requestUrl);
HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection();
httpUrlConn.setSSLSocketFactory(ssf);
httpUrlConn.setDoOutput(true);
httpUrlConn.setDoInput(true);
httpUrlConn.setUseCaches(false);
// 设置请求方式(GET/POST)
httpUrlConn.setRequestMethod(requestMethod);
if ("GET".equalsIgnoreCase(requestMethod))
httpUrlConn.connect();
// 当有数据需要提交时
if (null != outputStr) {
OutputStream outputStream = httpUrlConn.getOutputStream();
// 注意编码格式,防止中文乱码
outputStream.write(outputStr.getBytes("UTF-8"));
outputStream.close();
}
// 将返回的输入流转换成字符串
InputStream inputStream = httpUrlConn.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String str = null;
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
}
bufferedReader.close();
inputStreamReader.close();
// 释放资源
inputStream.close();
inputStream = null;
httpUrlConn.disconnect();
jsonObject = JSONObject.fromObject(buffer.toString());
} catch (ConnectException ce) {
log.error("Weixin server connection timed out.");
} catch (Exception e) {
log.error("https request error:{}", e);
}
return jsonObject;
}
总结
执行如果没有出现错误,就代表请求成功了,对应的微信公众号就生成了自定义菜单了。在公众号点击按钮的时候,就会响应对应的事件了。 注意:如果点击的按钮是推送事件的话,那么就需要在自己的系统设置响应的相关内容了。
最后
以上就是碧蓝自行车为你收集整理的微信java创建菜单_微信自定义菜单的创建(JAVA版)的全部内容,希望文章能够帮你解决微信java创建菜单_微信自定义菜单的创建(JAVA版)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复