微信公众平台开发[6]-开发模式-高级功能-自定义菜单的管理
我在这里做一个这样的假设,假设看到此文章的读者如果有用户已经通过申请获取自定义菜单的权限。
1、每次调用都会覆盖之前的自定义菜单;
2、自定义菜单更新后,并不是实时生效,有一个缓存的过程,最长是一天;
3、每个菜单名称字数为6个;
4、一级菜单最多为3个;
5、二级菜单最多为5个;
6、紧支持点击后触发消息。
有些读者可能会问,看到过一些公众号的自定义菜单,居然点击之后直接打开网页,这种方式之前微信是支持的,后来取消了,我猜测微信方不想让自己只作为一个3G网站的跳板而取消了此项功能。
创建\更新自定义菜单程序如下:(因是覆盖,故只有一个接口地址)
package weixin;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.apache.commons.httpclient.protocol.Protocol;
import org.apache.commons.httpclient.protocol.ProtocolSocketFactory;
import weixin.MySecureProtocolSocketFactory;
public class ClickMenuCreate { public static void main(String[] args) {
HttpClient httpclient;
String access_token;
String url;
String menu;
ProtocolSocketFactory fcty;
StringRequestEntity requestEntity = null;
PostMethod method;
int statusCode;
access_token = "${access_token}";
menu = "{\"button\":[{\"type\":\"click\",\"name\":\"今日歌曲\",\"key\":\"V1001_TODAY_MUSIC\"},{\"type\":\"click\",\"name\":\"歌手简介\",\"key\":\"V1001_TODAY_SINGER\"},{\"name\":\"菜单\",\"sub_button\":[{\"type\":\"click\",\"name\":\"hello word\",\"key\":\"V1001_HELLO_WORLD\"},{\"type\":\"click\",\"name\":\"赞一下我们\",\"key\":\"V1001_GOOD\"}]}]}";
url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" + access_token;
httpclient = new HttpClient();
//https 证书
fcty = new MySecureProtocolSocketFactory();
Protocol.registerProtocol("https", new Protocol("https", fcty, 443));
//posttry {
requestEntity = new StringRequestEntity(menu, "application/json", "UTF-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}method = new PostMethod(url);
method.setRequestEntity(requestEntity);
try {
statusCode = httpclient.executeMethod(method);
if (statusCode != HttpStatus.SC_OK) {
System.out.println(statusCode + ": " + method.getStatusLine());
} else {
System.out.println(new String(method.getResponseBody(), "UTF-8"));
}
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
method.releaseConnection();
} }
}
获取当前自定义菜单内容:
package weixin;
import java.io.IOException;
import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.commons.httpclient.protocol.Protocol;
import org.apache.commons.httpclient.protocol.ProtocolSocketFactory;
import weixin.MySecureProtocolSocketFactory;
public class ClickMenuGet1 { public static void main(String[] args) {
HttpClient httpclient;
ProtocolSocketFactory fcty;
String access_token;
String url;
GetMethod method;
int statusCode;
httpclient = new HttpClient();
access_token = "${access_token}";
url = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token=" + access_token;
//https 证书
fcty = new MySecureProtocolSocketFactory();
Protocol.registerProtocol("https", new Protocol("https", fcty, 443));
// get调用
method = new GetMethod(url);
method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false));
try {
statusCode = httpclient.executeMethod(method);
if (statusCode != HttpStatus.SC_OK) {
System.out.println(statusCode + ": " + method.getStatusLine());
} else {
System.out.println(new String(method.getResponseBody(), "UTF-8"));
}
} catch (IOException e) {
e.printStackTrace();
} finally {
method.releaseConnection();
} }
}
代码中用到的工具类和jar在之前的文章 http://blog.csdn.net/yuyang2013/article/details/10001379 中有。
创建完毕结果如下图:
文章图片
【微信公众平台开发[6]-开发模式-高级功能-自定义菜单的管理】
推荐阅读
- 基于微信小程序带后端ssm接口小区物业管理平台设计
- 我眼中的佛系经纪人
- 员工的微信朋友圈是公司的宣传阵地吗()
- FBI怎么和恐怖分子谈判
- 17|17 关山松 第二课作业#公众号项目# D20
- 吃一吃,春城的米线
- 分享!如何分分钟实现微信扫二维码调用外部浏览器打开指定页面的功能
- 内容平台做电商的三个优势
- java|java 常用知识点链接
- 微信小程序基础知识