FWQ
详解微信个性化菜单开发模式
最近一个礼拜搞了一个微信自定义菜单的开发,总的来说蛮郁闷的。 先给几个接口做下分析: 1:查询接口;查询接口分为两个,一个是开发模式下的普通查询接口,他只会查询出你通过添加接口创建出来的菜单和个性化的菜单(让公众号的不同用户群体看到不一样的自定义菜单),而不能获取到你通过微信管理平台添加的菜单。还有一个是可以查询全部菜单的接口,这个接口有点蛋疼,如果你先在平台上添加一个菜单,然后后台调用这个接口就可以获取到这个菜单,但调用这个接口的返回的json跟添加时的格式是不一样的(就是说你把它发回给你的json原模原样传给微信去创建菜单是创建不了的),而且微信平台上添加的菜单有很多种,每一种返回的json格式都是不一样的,如果要解析的话是很麻烦的一件事,所以个人觉得既然选择了开发者模式那么还是使用普通的那个查询接口比较好。 2:创建接口;这个接口的作用,顾名思义就是创建接口,但是这个接口不是在原来的基础上创建,而是把全部的菜单全部重新创建,每次调用都是把你需要留下来的菜单加工成固定格式的json然后去传给微信,所以如果你想单个删除,那你就把想要删除的那个菜单去掉,把剩下的重新变成一个json,修改也一样,把你需要改的数据替换掉,然后把全部菜单变成一个json传给微信。 3:删除接口;这个接口是用来删除全部菜单时候用的,不过不会立即生效,调用以后,貌似要到第二天才能看到效果,而且这段时间内你还是能够查询到你之前创建了的菜单。 我的任务是把菜单的增删改查整合到后台管理中去,这里只说下自己的后台的出来方式,请求微信的接口返回的是一个json字符串,我的做法是把这个字符串解析出来,按一定的规则写成一个对象然后添加到list中,增删改的时候都去操作这个list,然后在把list转换回微信要求的格式的json,调用微信的接口去创建菜单(增删改都调用创建接口)。对象部分我的属性分别是id(把list的下标设置为id方便操作),name(菜单名称),type(菜单类型,微信自定义菜单的种类有10种貌似),parent(父级菜单名称),SecendLvMenu(二级菜单个数),url(链接型菜单需要),key(调用推送功能),mediaid( 调用素材时都要设置madia_id),sort(排序号)。 以下为json转list的代码,此处的json包是阿里的fastjson包,相当好用: public static List jsonToList(JSONObject obj){ List menulist=new ArrayList (); obj=obj.getJSONObject(“menu”); JSONObject a=new JSONObject(); int num=0; if(obj!=null){ //获取button的json数组 JSONArray array=obj.getJSONArray(“button”);…