刚好这段时间都在做公众号,所有和大家讲讲怎么配置公众号菜单。一般有公众号自带的和,自定义的菜单配置
/**
* 组装菜单数据
*
* @return
*/
private static Menu getMenu() {
//生成授权页面信息
// String StrURL = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID"
// + "&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect";//
// String strAutoURLuft8 = "";
// String strOpenID = MainConst.getWXAppID();
// String strScope = "snsapi_userinfo";//
// CommonUtil urlUti = new CommonUtil();
// String requestUrl = StrURL.replace("APPID", strOpenID).replace("REDIRECT_URI", strAutoURLuft8).replace("SCOPE", strScope);
Button mainBtn1 = null;
mainBtn1 = new ViewButton();
((ViewButton)mainBtn1).setName("管理员");
((ViewButton)mainBtn1).setType("view");
((ViewButton)mainBtn1).setUrl(OauthUtil.MycreateOauth(MainConst.getDomain_boss() + "index.html"));
// Button btn21 = null;
// btn21= new ViewButton();
// ((ViewButton)btn21).setName("客房预订");
// ((ViewButton)btn21).setType("view");
// ((ViewButton)btn21).setUrl(OauthUtil.MycreateOauth(MainConst.getDomain_pages() + "bookroom.jsp"));
// Button btn22 = null;
// btn22= new ViewButton();
// ((ViewButton)btn22).setName("我的房间");
// ((ViewButton)btn22).setType("view");
// ((ViewButton)btn22).setUrl(OauthUtil.MycreateOauth(MainConst.getDomain_pages() + "myroom.jsp"));
// Button btn23 = null;
// btn23= new ViewButton();
// ((ViewButton)btn23).setName("我的订单");
// ((ViewButton)btn23).setType("view");
// ((ViewButton)btn23).setUrl(OauthUtil.MycreateOauth(MainConst.getDomain_pages() + "queryOrders.jsp?nav_mode=0"));
// Button btn24 = null;
// btn24= new ViewButton();
// ((ViewButton)btn24).setName("我的分享锁");
// ((ViewButton)btn24).setType("view");
// ((ViewButton)btn24).setUrl(OauthUtil.MycreateOauth(MainConst.getDomain_pages() + "myshare.jsp"));
Button btn31 = null;
btn31= new ViewButton();
((ViewButton)btn31).setName("门禁开门");
((ViewButton)btn31).setType("view");
((ViewButton)btn31).setUrl(OauthUtil.MycreateOauth(MainConst.getDomain_rentclient() + "rc/index.htmlJINGHAO/keyword"));
Button btn32 = null;
btn32= new ViewButton();
((ViewButton)btn32).setName("房间开门");
((ViewButton)btn32).setType("view");
((ViewButton)btn32).setUrl(OauthUtil.MycreateOauth(MainConst.getDomain_rentclient() + "rc/index.htmlJINGHAO/keyroom"));
/*
Button btn33 = null;
btn33= new ViewButton();
((ViewButton)btn33).setName("设置开门密码");
((ViewButton)btn33).setType("view");
((ViewButton)btn33).setUrl(OauthUtil.MycreateOauth(MainConst.getDomain_rentclient() + "setpass.html"));
Button btn34 = null;
btn34= new ViewButton();
((ViewButton)btn34).setName("设置分享");
((ViewButton)btn34).setType("view");
((ViewButton)btn34).setUrl(OauthUtil.MycreateOauth(MainConst.getDomain_rentclient() + "shareopen.html"));
Button btn35 = null;
btn35= new ViewButton();
((ViewButton)btn35).setName("水电费");
((ViewButton)btn35).setType("view");
((ViewButton)btn35).setUrl(OauthUtil.MycreateOauth(MainConst.getDomain_rentclient() + "feelist.html"));
*/
// Button btn35 = null;
// btn35=new CommonButton();
// btn35.setName("一键开门");
// ((CommonButton)btn35).setType("click");
// ((CommonButton)btn35).setKey("35");
// ComplexButton mainBtn2 = new ComplexButton();
// mainBtn2.setName("在线预订");
// mainBtn2.setSub_button(new Button[] { btn21, btn22,btn23,btn24});
ComplexButton mainBtn2 = new ComplexButton();
mainBtn2.setName("开门");
// mainBtn2.setSub_button(new Button[] { btn31, btn32, btn33, btn34, btn35 });
mainBtn2.setSub_button(new Button[] { btn31, btn32});
Button mainBtn35 = null;
mainBtn35 = new ViewButton();
((ViewButton)mainBtn35).setName("登录");
((ViewButton)mainBtn35).setType("view");
((ViewButton)mainBtn35).setUrl(OauthUtil.MycreateOauth(MainConst.getDomain_rentclient() + "rc/index.html"));
CommonButton btn34 = new CommonButton();
btn34.setName("扫一扫");
btn34.setType("scancode_push");
btn34.setKey("34");
ComplexButton mainBtn3 = new ComplexButton();
mainBtn3.setName("用户");
// mainBtn2.setSub_button(new Button[] { btn31, btn32, btn33, btn34, btn35 });
mainBtn3.setSub_button(new Button[] { btn34,mainBtn35});
/**
* 这是公众号xiaoqrobot目前的菜单结构,每个一级菜单都有二级菜单项<br>
*
* 在某个一级菜单下没有二级菜单的情况,menu该如何定义呢?<br>
* 比如,第三个一级菜单项不是“更多体验”,而直接是“幽默笑话”,那么menu应该这样定义:<br>
* menu.setButton(new Button[] { mainBtn1, mainBtn2, btn33 });
*/
Menu menu = new Menu();
menu.setButton(new Button[] { mainBtn1, mainBtn2, mainBtn3 });
return menu;
} //...
public static void initMenu(){
// 调用接口获取access_token
L.i("开始配置微信菜单");
// 调用接口创建菜单
int result = WeixinUtil.createMenu(getMenu(), MainConst.getToken());
// 判断菜单创建结果
if (0 == result)
{
L.i("成功配置微信菜单.");
}
else
{
L.v("配置微信菜单失败!");
}
}//...
上面的是创建菜单的,还有进入菜单时,我们要微信授权,所有触发菜单的页面,也要微信授权,才能拿的到openid
/**
* 通过Oauth获得Base信息(openID),再通过OauthServlet跳转回url
* @param url
* @return 完整url
*/
public static String MycreateInfoOauth(String url){
return createOAuth(MainConst.getWXAppID(), urlEncodeUTF8(MainConst.getDomain_weixin()+"oauthInfo"), "snsapi_userinfo", url);
}
/**
* 通过Oauth获得Base信息(openID),再通过OauthServlet跳转回url
* 暂时没用
* @param url
* @return 完整url
*/
// public static String MycreateBaseOauth(String url){
// return createOAuth(MainConst.getWXAppID(), urlEncodeUTF8(MainConst.getDomain_weixin()+"oauth"), "snsapi_base", url);
// }
//
/**
*
* @param appID
*
* @param address 要UTF-8格式过。如 urlEncodeUTF8(url)
*
* @param scope snsapi_base 直接可以获取openID,不需要用户点击授权。 snsapi_userinfo 需要用户授权,可以获得用户的基本资料
*
* @param state 在授权跳转后,会带上这个参数, 作为跳转URL 我们可以在自己的后台再获取它
*
* @return
*/
public static String createOAuth(String appID,String address,String scope,String state){
String url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid="+appID
+"&redirect_uri="+address +"&response_type=code&scope="
+ scope + "&state=" +state + "#wechat_redirect";
return url;
}//...
appid是微信公众号的配置appid,通过授权我们可以拿到openid