微信自定义菜单的创建(JAVA版)
来源:互联网 发布:python list数组 编辑:程序博客网 时间:2024/05/02 15:48
微信自定义菜单的创建与使用
- 微信自定义菜单的创建与使用
- 需求
- 菜单类介绍
- 场景
- 代码
- 总结
需求
当微信公众号设置为开发者模式,想要自己创建和开发菜单的话,就需要自己调用微信创建菜单的接口来创建菜单了。创建菜单之后,如果需要迫切的看到效果,有时候需要取消关注-从新关注才能够看到的哦(缓存问题)。由于新版微信添加的挺多按钮类型,目前只实现click(点击推事件)和view(跳转URL),其他类型的大致相同。
注意:公众号必须是认证了的才有这个自定义菜单创建的功能的哦。你可以在自己的公众号->开发者中心,查看是否支持该接口。
菜单类介绍
Buttonx按钮类
private String name; private String type; //菜单类型 1:点击事件,2:跳转url,3:分组菜单 private String key; //菜单key值 private String url; //跳转的链接 private List<Buttonx> sub_button; //如果是一级菜单,这集合表示二级菜单 //all get and set 所有字段的get 和 set方法
Menux菜单类
public class Menux { private List<Buttonx> button; public List<Buttonx> getButton() { return button; } public void setButton(List<Buttonx> 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; }
总结
执行如果没有出现错误,就代表请求成功了,对应的微信公众号就生成了自定义菜单了。在公众号点击按钮的时候,就会响应对应的事件了。
注意:如果点击的按钮是推送事件的话,那么就需要在自己的系统设置响应的相关内容了。
0 0
- 微信自定义菜单的创建(JAVA版)
- 微信自定义菜单的创建(微信账号绑定功能的实现 Java)
- 微信公众帐号开发教程第14篇-自定义菜单的创建及菜单事件响应 (Java版)
- 微信自定义创建菜单
- 微信公众号开发---自定义菜单的创建及菜单事件响应(java)
- Java微信公众平台开发(十)——微信自定义菜单的创建实现
- JAVA微信自定义菜单
- 微信公众帐号自定义菜单创建的python脚本
- 微信自定义菜单的 创建|查询|取消 示例代码
- 微信利用PHP创建自定义菜单的方法
- 微信公众帐号自定义菜单创建的python脚本
- 微信公众平台自定义菜单创建代码实现—java版
- 微信公众平台开发教程Java版(五) 自定义菜单创建
- 微信创建自定义菜单和删除自定义菜单
- 微信创建自定义菜单代码
- 微信公众平台 创建自定义菜单
- 微信公众平台创建自定义菜单
- 微信开发之自定义菜单创建
- 详细解析Java中抽象类和接口的区别
- 解决iOS报错libc++abi.dylib handler threw exception
- linux手册
- Python中的sorted函数以及operator.itemgetter函数
- XML和Schema命名空间详解
- 微信自定义菜单的创建(JAVA版)
- Unity3D中暂停时的动画及粒子效果实现
- caffe安装系列——安装python依赖包
- java 数据结构
- LeetCode题解:Missing Number
- 安卓强制设置为横屏,安卓几个常用代码块
- iOS imageView旋转
- 机器学习-数据归一化方法
- JAVA LINUX 1.7配置环境变量 差这一步 就是不成功