详解微信个性化菜单开发模式
最近一个礼拜搞了一个微信自定义菜单的开发,总的来说蛮郁闷的。
先给几个接口做下分析:
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
List
obj=obj.getJSONObject("menu");
JSONObject a=new JSONObject();
int num=0;
if(obj!=null){
//获取button的json数组
JSONArray array=obj.getJSONArray("button");
if(array!=null){
for(int i=0;i a=array.getJSONObject(i); //没有类型说明是带二级菜单类型的一级菜单 if(a.get("type")==null){ weixinMenu menu=new weixinMenu(); menu.setId(num); menu.setSort(num); num++; menu.setName(a.getString("name"));//设置下标设置排序号存入list //获取该一级菜单下的二级菜单 JSONArray sub=a.getJSONArray("sub_button"); //二级菜单的个数,由于二级菜单上限为5个,加一个个数添加时候容易判断 menu.setSecendLvMenuNum(sub.size()); menulist.add(menu); JSONObject b=new JSONObject(); for(int j=0;j weixinMenu menu2=new weixinMenu(); b=sub.getJSONObject(j); menu2.setId(num); menu2.setSort(num); num++; menu2.setName(b.getString("name")); menu2.setParent(a.getString("name"));//父级菜单就是刚才的一级菜单名称 menu2.setType(b.getString("type")); menu2.setUrl(b.getString("url")); menu2.setKey(b.getString("key")); menu2.setMediaId(b.getString("media_id")); menulist.add(menu2); } }else{//否则为无二级菜单的一级菜单,点击直接跳转或触发相应事件 weixinMenu menu=new weixinMenu(); menu.setId(num); menu.setSort(num); num++; menu.setName(a.getString("name")); menu.setParent(null); menu.setSecendLvMenuNum(0); menu.setType(a.getString("type")); menu.setUrl(a.getString("url")); menu.setKey(a.getString("key")); menu.setMediaId(a.getString("media_id")); menulist.add(menu); } } } } return menulist; } 然后是list转weixinJson,上传微信的json只需要button部分: public static JSONObject listToWxJson(List JSONArray array=new JSONArray(); weixinMenu menu=new weixinMenu(); int size=list.size(); for(int i=0;i menu=list.get(i); //无二级菜单,无父级菜单,则为无二级类型一级菜单 if(menu.getSecendLvMenuNum()==0&&menu.getParent()==null){ Map map.put("name", menu.getName()); map.put("type", menu.getType()); if(menu.getUrl()!=null){ map.put("url", menu.getUrl()); } if(menu.getKey()!=null){ map.put("key", menu.getKey()); } if(menu.getMediaId()!=null){ map.put("media_id", menu.getMediaId()); } array.add(map); }else if(menu.getParent()==null){无父级菜单则为带二级一级菜单 JSONObject obj=new JSONObject(); JSONArray sub=new JSONArray(); obj.put("name",menu.getName()); weixinMenu submenu=new weixinMenu(); //循环遍历整个list用name匹配查找该一级菜单下的二级菜单 for(int j=0;j submenu=list.get(j); Map if((menu.getName()).equals(submenu.getParent())){ map=new HashMap map.put("name", submenu.getName()); map.put("type", submenu.getType()); if(submenu.getUrl()!=null){ map.put("url", submenu.getUrl()); } if(submenu.getKey()!=null){ map.put("key", submenu.getKey()); } if(submenu.getMediaId()!=null){ map.put("media_id", submenu.getMediaId()); } sub.add(map); } } obj.put("sub_button",sub); array.add(obj); } } Map map.put("button",array); //最后直接把map转换成json return (JSONObject)JSONObject.toJSON(map); } 这一套基本算的固定的了,微信菜单返回过来都可以解析成list,操作完后在转换json,之后的操作就要简便很多了。 以上是详解微信个性化菜单开发模式的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

PHP是一种开源的脚本语言,广泛应用于Web开发和服务器端编程,尤其在微信开发中得到了广泛的应用。如今,越来越多的企业和开发者开始使用PHP进行微信开发,因为它成为了一款真正的易学易用的开发语言。在微信开发中,消息的加密和解密是一个非常重要的问题,因为它们涉及到数据的安全性。对于没有加密和解密方式的消息,黑客可以轻松获取到其中的数据,对用户造成威胁

随着微信的普及,越来越多的企业开始将其作为营销工具。而微信群发功能,则是企业进行微信营销的重要手段之一。但是,如果只依靠手动发送,对于营销人员来说是一件极为费时费力的工作。所以,开发一款微信群发工具就显得尤为重要。本文将介绍如何使用PHP开发微信群发工具。一、准备工作开发微信群发工具,我们需要掌握以下几个技术点:PHP基础知识微信公众平台开发开发工具:Sub

在微信公众号开发中,用户标签管理是一个非常重要的功能,可以让开发者更好地了解和管理自己的用户。本篇文章将介绍如何使用PHP实现微信用户标签管理功能。一、获取微信用户openid在使用微信用户标签管理功能之前,我们首先需要获取用户的openid。在微信公众号开发中,通过用户授权的方式获取openid是比较常见的做法。在用户授权完成后,我们可以通过以下代码获取用

随着微信成为了人们生活中越来越重要的一个通讯工具,其敏捷的消息传递功能迅速受到广大企业和个人的青睐。对于企业而言,将微信发展为一个营销平台已经成为趋势,而微信开发的重要性也逐渐凸显。在其中,群发功能更是被广泛使用,那么,作为PHP程序员,如何实现群发消息发送记录呢?下面将为大家简单介绍一下。1.了解微信公众号相关开发知识在了解如何实现群发消息发送记录之前,我

微信是目前全球用户规模最大的社交平台之一,随着移动互联网的普及,越来越多的企业开始意识到微信营销的重要性。在进行微信营销时,客服服务是至关重要的一环。为了更好地管理客服聊天窗口,我们可以借助PHP语言进行微信开发。一、PHP微信开发简介PHP是一种开源的服务器端脚本语言,广泛运用于Web开发领域。结合微信公众平台提供的开发接口,我们可以使用PHP语言进行微信

在微信公众号开发中,投票功能经常被运用。投票功能是让用户快速参与互动的好方式,也是举办活动和调查意见的重要工具。本文将为您介绍如何使用PHP实现微信投票功能。获取微信公众号授权首先,你需要获取微信公众号的授权。在微信公众平台上,你需要配置微信公众号的api地址、官方账号和公众号对应的token。在我们使用PHP语言开发的过程中,我们需要使用微信官方提供的PH

随着移动互联网的普及,微信作为一款社交软件,越来越多的人开始使用,并且微信开放平台也给开发者带来了众多的机会。近年来,随着人工智能技术的发展,语音识别技术逐渐成为了移动端开发的热门技术之一。在微信开发中,如何实现语音识别成为很多开发者关注的问题。本文将介绍如何利用PHP开发微信应用实现语音识别功能。一、语音识别原理在介绍如何实现语音识别之前,我们先了解一下语

随着互联网和移动智能设备的发展,微信成为了社交和营销领域不可或缺的一部分。在这个越来越数字化的时代,如何使用PHP进行微信开发已经成为了很多开发者的关注点。本文主要介绍如何使用PHP进行微信开发的相关知识点,以及其中的一些技巧和注意事项。一、开发环境准备在进行微信开发之前,首先需要准备好相应的开发环境。具体来说,需要安装PHP的运行环境,以及微信公众平台提
