疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java实现微公众平台自定义菜单


 

       微信前好久就已经退出了自定义菜单的创建,并且这次不想以前一样还需要申请,一申请就需要好几天,这次只需要将你的微信公众平台申请成为服务号即可,既然说到这,那我我也顺便说说,服务号和订阅号到底有什么区别,服务号就是为大众说服务的,而订阅好着重为大众提供咨询,于是官方为了体现这两者的不同,就给了服务号自定义菜单的权利,而给了订阅号,每天一条主动推送的权利(服务号每月一条)。

  好了,不废话了,今天主要教大家怎样去实现微信的自定义菜单,先大概介绍一下真个流程,首先我们通过申请服务号时得到的appid和appsecret来申请到ACCESS_TOKEN,然后通过ACCESS_TOKEN创建自定义菜单。

  一。ACCESS_TOKEN,这个玩意是创建自定义菜单的核心

  1.ACCESS_TOKEN是什么,是对应于公众号是全局唯一的票据,说白了,他是你访问微信服务器的临时凭据,证明你是一个服务号开发者。

  2.怎样得到ACCESS_TOKEN?填写URL和TOKEN下面的地方的有appid和appsecret。注意:(这两个东西,必须在申请为服务号过后才可以得到),在你的程序里,需要通过get方式获取https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET链接,里边的appid和appsecret是你自己申请服务号时得到的。结果会返回{"access_token":"ACCESS_TOKEN","expires_in":7200}

  具体代码如下:

  Java代码

  StringBuffer bufferRes = new StringBuffer();

  try { //这里填入你的appid和appsecret

  URL realUrl = new URL("https://api.weixin.qq.com/cgi-bin/token?grant_"+

  "type=client_credential&appid=?&secret=?");

  HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();

  // 读取超时 --服务器响应比较慢,增大时间,这个一般不会出现,不过写一写会比较好

  conn.setReadTimeout(25000);

  HttpURLConnection.setFollowRedirects(true);

  // 设置请求方式

  conn.setRequestMethod("GET");

  conn.setDoOutput(true);

  conn.setDoInput(true);

  //进行连接

  conn.connect();

  //获取并封装读入流

  InputStream in = conn.getInputStream();

  BufferedReader read = new BufferedReader(new InputStreamReader(in,"UTF-8"));

  String returnString = null;

  //读出返回码

  while ((returnString =read.readLine())!=null){

  bufferRes.append(returnString );

  }

  String a = bufferRes.toString();

  //从返回码中,获取到

  Config.ACCESS_TOKEN = a.substring(17, a.length()-20);

  in.close();

  if (conn != null) {

  // 关闭连接

  conn.disconnect();

  }

  } catch (Exception e) {

  e.printStackTrace();

  }

  如上述代码所示,我们就获取到了ACCESS_TOKEN,不过官方给出的说明是,这个ACCESS_TOKEN会在2小时后失效。返回格式里边的ACCESS_TOKEN就是我们所需要的了,所以我们直接截取从17至倒数20(不信你就去数一数)。特别注意:TOKEN和ACCESS_TOKEN是不同的两个东西,因为我在这上面犯过二,所以特别提醒一下,哈哈。

  二。设置菜单

  获取菜单ACCESS_TOKEN后,你可以干关于菜单的很多事情,你可以设置菜单,删除菜单,以及查询正在使用的菜单,相关的说明在“http://mp.weixin.qq.com/wiki/index.php?

  title=自定义菜单接口”中有具体的说明。你们可以参详一下,我这里主要讲述一下关于创建的代码。具体代码如下:

  Java代码

  StringBuffer bufferRes = new StringBuffer();

  try {

  //这个URL是微信规定的格式,没什么好说的,其中的accessToken就是上面所讲到的获取到的ACCESS_TOKEN

  URL realUrl = new URL("https://api.weixin.qq.com/cgi-bin/menu/create?access_token="+ accessToken);

  HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();

  // 连接超时

  conn.setConnectTimeout(25000);

  // 读取超时 --服务器响应比较慢,增大时间

  conn.setReadTimeout(25000);

  Htt设置pURLConnection.setFollowRedirects(true);

  // 设置请求方式,这里一定要是POST,原因去官网看去

  conn.setRequestMethod("POST");

  conn.setDoOutput(true);

  conn.setDoInput(true);

  conn.connect();

  // 获取URLConnection对象对应的输出流

  OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream());

  // 发送请求参数

  out.write();

  out.flush();

  out.close();

  InputStream in = conn.getInputStream();

  BufferedReader read = new BufferedReader(new InputStreamReader(in,"UTF-8"));

  String returnString= null;

  while ((returnString=read.readLine())!=null){

  bufferRes.append(returnString);

  }

  System.out.println(bufferRes.toString());

  in.close();

  if (conn != null) {

  // 关闭连接

  conn.disconnect();

  }

  } catch (Exception e) {

  e.printStackTrace();

  }

  需要注意的是,其中的params就是自定义菜单的具体格式,并且这次的请求方式是POST,而不是GET,这次返回码只是告诉你菜单是否设置成功,不会告诉你错在哪里,如果你的返回码说你错了,那多数是因为你给的自定义菜单的格式有错误,关于自定义菜单的格式,我不得不承认确实看起来很复杂,还是自己多研究研究比较好,我这有一份模板,对照着看看,官网上有模板,自己多研究研究,这个真没什么好说的,