重新生成菜单

在启用了服务器配置后,在微信公众号后台设置的菜单将失效,这时需要通过微信提供的接口来重新生成菜单

接口文档地址

http://mp.weixin.qq.com/wiki/13/43de8269be54a0a6f64413e4dfa94f39.html

详细的说明在接口文档中有说明

服务器配置

以PHP为示例,其他语言相应修改即可

数据准备

此时需要注意:

Button及sub_button里的数据,必须是一个数组,即如下所示:

如果在生成JSON时,是下图所示:

数据提交给微信后,会返回错误码:400016 一级菜单的子项数量错误

而如果sub_button里的数据也不是数组时,将会返回错误码:400017 二级菜单数量错误

数据解析配置

接口请求函数

在请求接口前,需要对定义的数据中的URL进行编码

数据转JSON格式函数

URL编码函数

微信返回

正确格式

{"errcode":0,"errmsg":"ok"}

错误格式

{"errcode":40018,"errmsg":"invalid button name size"}

错误的格式可以根据errcode去找本次错误的代码,或者看errmsg的错误信息,然后排查错误

时间: 2024-10-10 00:11:16

重新生成菜单的相关文章

WPF+通过配置文件生成菜单(Menu)+源码

这个月做项目,遇到过一个通过配置文件来生成菜单的解决方案,感觉挺优雅的,特地放到博客园来,以飨读者. 说来惭愧,以前做的项目都没有这样用过,都是固定死了.如果后续有需要加入菜单,还得在重新修改UI,然后提交code,才OK.但是如果通过配置文件的方式进行操作,则可以不用动code,只需要修改配置文件即可. 有兴趣的可以往下看,不难,很简单!~ 先看下这次demo的结构: 1.生成XML式的配置文件菜单项.. 我用XML格式来存储, <MenuList xmlns:xsi="http://w

winfrom递归生成菜单,支持多级嵌套

private void Form2_Load(object sender, EventArgs e) { CreateMenu(); } private void CreateMenu() { //定义菜单条 Bar bar = new Bar("Menu Bar"); bar.MenuBar = true; bar.Stretch = true; bar.Style = eDotNetBarStyle.Office2003; dotNetBarManager1.Bars.Add(b

js控制json生成菜单——自制菜单(一)

此文档解决以下问题: 1.JSON文件的书写方式 2.jQuery.getJSON()的运用 3.jQuery.each()的运用 4.jQuery的DOM 操作方法之一:.append()的运用 5.jQuery的遍历方法之一:.children()的运用 6.jQuery的遍历方法之一:.siblings()的运用 7.jQuery的绑定事件处理器之一:.on()的运用 8.jQuery的滑动特效:.slideToggle()..slideUp()..slideDown()的运用 最终效果:

前后端分离进行权限管理之后端生成菜单和权限信息(二)

一.初始化菜单.权限信息 在进行用户名和密码验证成功后就进行权限和菜单的初始化,生成该用户的菜单和权限数据. class LoginView(APIView): authentication_classes = [] # 登陆页面免认证,其余的已经全局配置 def post(self, request, *args, **kwargs): ret = { "data": {}, "meta": { "code": 2001, "mess

java从数据库读取菜单,递归生成菜单树

首先看一下菜单的样子 根据这个样子我们定义菜单类 public class Menu { // 菜单id private String id; // 菜单名称 private String name; // 父菜单id private String parentId; // 菜单url private String url; // 菜单图标 private String icon; // 菜单顺序 private int order; // 子菜单 private List<Menu> chi

生成菜单序列号

/// <summary> /// 根据日期和随机码生成订单号 /// </summary> /// <returns></returns> public string GetOrderNumber() { string num = DateTime.Now.ToString("yyMMddHHmmss");//yyyyMMddHHmmssms return num + Number(2, false).ToString(); } ///

关于动态生成菜单

<!--导航菜单-折叠功能--><aside :class="collapsed?'menu-collapsed':'menu-expanded'"><!--单个激活 并以 index 作为 path 进行路由跳转--><el-menu unique-opened router v-show="!collapsed"><!--动态路由到子组件 将不可见的路径隐藏--><template v-for=&

dxribbon动态生成菜单

procedure TfrmMain.btn1Click(Sender: TObject);var ribbonTab: TdxRibbonTab; ribbonTabGroup: TdxRibbonTabGroup; btn: TdxBarButton; ItemLink : TdxBarItemLink;begin // ribbon 是手拖的一个 dxribbon, 这里生成一个选项页 ribbonTab:= ribbon.Tabs.Insert(0); ribbonTabGroup:=

Devexpress Ribbon 动态生成菜单

/// <summary> /// 动态加载菜单 /// </summary> private void GetMenuBind() { //根据登录用户角色菜单动态创建 //循环创建卡菜单 DataTable baseModuleDT = BLL.BaseModule.GetDataTable("LevelNo=1", ""); for (int i = 0; i < baseModuleDT.Rows.Count; i++) { /