自定义菜单创建

http请求方式:POST(请使用https协议) 

https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN

click和view的请求示例

 {
     "button":[
     {	
          "type":"click",
          "name":"今日歌曲",
          "key":"V1001_TODAY_MUSIC"
      },
      {
           "name":"菜单",
           "sub_button":[
           {	
               "type":"view",
               "name":"搜索",
               "url":"http://www.soso.com/"
            },
            {
               "type":"view",
               "name":"视频",
               "url":"http://v.qq.com/"
            },
            {
               "type":"click",
               "name":"赞一下我们",
               "key":"V1001_GOOD"
            }]
       }]
 }

封装BaseButton(包含一个name属性,表示基类)、ClickButton(包含type和key属性)、ViewButton(包含type和url属性)、ComplexButton(包含一个BaseButton[] sub_button 属性)和Menu(包含BaseButton[] button)这5个类。

通过JSONObject对象将上述JAVA对象转换成JSON字符串。

ClickButton btn11 = new ClickButton();
btn11.setName("今日歌曲");
btn11.setType("click");
btn11.setKey("V1001_TODAY_MUSIC");
 
ViewButton btn21 = new ViewButton();
btn21.setName("搜索");
btn21.setType("view");
btn21.setUrl("http://www.baidu.com");
 
ViewButton btn22 = new ViewButton();
btn22.setName("视频");
btn22.setType("view");
btn22.setUrl("http://www.v.qq.com");
 
ClickButton btn23 = new ClickButton();
btn23.setName("赞一下我们");
btn23.setType("click");
btn23.setKey("V1001_GOOD");
 
ComplexButton btn2 = new ComplexButton();
btn2.setName("菜单");
btn2.setSub_button(new BaseButton[]{btn21, btn22, btn23});
 
Menu menu = new Menu();
menu.setButton(new BaseButton[]{btn11, btn2});
 
String jsonMenu = JSONObject.fromObject(menu).toString();

上述代码中jsonMenu字符串对象所包含的内容就是转换后的json字符串。

如何将json字符串转换成我们需要的微信自定义菜单呢?

创建一个MenuUtil.java,用于处理菜单的工具类。

package org.jiahao.weixin.util;
 
import net.sf.json.JSONObject;
 
/**
 * 菜单工具类
 *
 * @author Alvin
 *
 */
public class MenuUtil {
    public final static String MENU_CREATE_URL = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN";
 
    /**
     * 创建菜单
     * @param json 菜单结构
     * @param accessToken 接口访问凭证
     * @return true / false
     */
    public static boolean createMenu(String json, String accessToken) {
        boolean result = false;
        // 拼装请求地址
        String requestUrl = MENU_CREATE_URL.replace("ACCESS_TOKEN", accessToken);
        System.out.println(requestUrl);
        // 调用接口
        String respJSON = CommonUtil.httpsRequest(requestUrl, "POST", json);
        System.out.println(respJSON);
        // 将JSON字符串转换成JSONObject对象
        JSONObject jsonObject = JSONObject.fromObject(respJSON);
        if(null != jsonObject) {
            int errCode = jsonObject.getInt("errcode");
            String errMsg = jsonObject.getString("errmsg");
            if(0 == errCode) {
                result = true;
            }
            else {
                result = false;
                System.out.println("菜单创建失败 :" + jsonObject);
            }
        }
 
        return result;
    }
}
调用MenuUtil中的静态方法createMenu,如果返回ture,即对相应的微信公众号创建了自定义菜单。

你可能感兴趣的:(微信开发)