天天看点

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}

具体代码如下:

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

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,这次返回码只是告诉你菜单是否设置成功,不会告诉你错在哪里,如果你的返回码说你错了,那多数是因为你给的自定义菜单的格式有错误,关于自定义菜单的格式,我不得不承认确实看起来很复杂,还是自己多研究研究比较好,我这有一份模板,对照着看看,官网上有模板,自己多研究研究,这个真没什么好说的,

OK,祝各位好运,我的Q:987706386