微信公众号菜单设置遇到的一个坑(40024报错)
问题描述:微信的公众号菜单可以通过发微信提供的接口来自定义设置。最近做的一个需求是提供一个可编辑的页面去修改公众号的菜单,编辑完成后发微信的接口完成修改。思路比较清晰,先发菜单查询接口拿到公众号的菜单数据在页面做展示,修改完成后,把新的数据以json格式发post请求到修改菜单接口。
访问查询菜单接口和页面都做好了,菜单数据展示正常,发修改接口的代码写好后我尝试修改了一下数据发修改接口,结果微信返回了一个40024错误码(40024 Args: [invalid sub button type rid: 600bcb8a-5a389aef-0202264b , null])。在网上查了一下说是二级菜单的类型不对,不符合微信的要求。这我就很奇怪了,因为我只是改了一下一级菜单的名字,根本没有对二级菜单做修改,等于说我把查回来的二级菜单数据原样发回去了微信公众号名字查询,微信却告诉我现在二级菜单的类型不对。我仔细看了一下我发送数据的二级菜单类型,两个二级菜单一个是click类型,一个是view类型微信公众号名字查询,拼写没有任何问题。
没办法,我尝试创建了一个只有一级菜单的公众号菜单数据,然后修改了下一级菜单的名字再做测试。结果,,,,,,,真的就修改成功了。
这下问题出在二级菜单的数据上实锤了。可我反复比对我debug发送的数据和直接用postman发送的数据,感觉都是一模一样的,凭啥postman可以我写的代码就不可以。
又跑去看微信的文档,也不知道看了几遍,最终还是看出来了不对头的地方。
这个是文档里菜单查询接口返回的数据。
这个是修改接口里需要上送的数据。
发现了没有,查询返回的sub_button下还有一级list,但给修改菜单接口上送数据的时候sub_button下却不能有list这一级了。果然我再debug一看,我发给修改菜单接口的sub_button下还有一级list,这样子肯定就不符合接口的格式要求了呀。
还是怪自己不够细致吧,不过我还是要吐槽微信一下,咱就不能把查菜单返回的数据格式和修改菜单的数据格式搞一致吗?一下有list一下没的。
发现问题了怎么改咧?简单!js里一行sendMenuList[i].sub_button=sendMenuList[i].sub_button.list就搞定了,这里就显示处javascript这种弱类型语言的优势了,赋起值来就是任性,直接就把多余的一层嵌套给去掉了,这要是放在后端用java处理,那可真是劳神了。