zoukankan      html  css  js  c++  java
  • 记一个微信公众号个性化菜单的坑

    大致过程:单位的公众号菜单去年的版本上线后,一直正常使用。现在有了做公众号菜单调整的计划,利用之前已经设计好的功能,重新生成菜单,普通菜单没有问题,但个性化菜单总是不能成功。

    微信报的原因和错误表象如下:

    错误原因:65316 该公众号的菜单设置了过多的域名外跳(最多跳转到 3 个域名的链接)

    象:每次都是生成去年版本的菜单,新设置的菜单始终无效。

    说明:去年版本的菜单中是包含了3上域名的链接的,现在这次菜单调整因为某些原因,更换了其中的两个域名。

    调试:

    1、既然微信报错说最多3个域名链接,那就试着把新的菜单的链接去掉,结果最后发现:新菜单中必须使用原菜单中的链接才可成功,否则哪怕改变任意一个链接,即使用一个新的链接,都会报65316的错误。但是我的个性化菜单设置中确实没有超过3个域名,甚至1个域名都不行,调试了半天多的时间,始终没有找到原因。

    2、完全同样的代码,在测试号中没有任何问题。

    解决:

    今天继续翻看微信文档,无意中看到可以查看自定义菜单的接口,遂试了一下,结果瞬间明白原因。原来微信会自动保存历次生成的个性化菜单,每次生成都会保存。普通菜单则只保留一份。相当于个性化菜单是“增加”方式,普通菜单是“覆盖”方式,即修改方式。这样一来,微信判断的65316的3个域名链接,是在所有的个性化菜单中进行判断,而非仅仅是当前要生成的个性化菜单配置。

    既然明白原因,解决起来就很简单了。把所有个性化菜单删除,再次重新生成个性化菜单,问题解决。

                //获取所有菜单,包含个性化菜单
                var MenuResult = httpClient.GetStringAsync(string.Format("https://api.weixin.qq.com/cgi-bin/menu/get?access_token={0}", WxApiRepository.GetApi.token)).Result;            
                var mlist = (JsonConvert.DeserializeObject(MenuResult) as dynamic).conditionalmenu as IEnumerable<object>;
                foreach (var p in mlist)
                {
                    //个性化菜单
                    var obj = JsonConvert.DeserializeObject<conditionalmenu>(p.ToString());
                    Response.Write(p);
                    //删除个性化菜单
                    var result = httpClient.PostAsJsonAsync(string.Format("https://api.weixin.qq.com/cgi-bin/menu/delconditional?access_token={0}", WxApiRepository.GetApi.token), new { menuid = obj.menuid }).Result;
                    Response.Write("结果" + result + Environment.NewLine);                
                }
  • 相关阅读:
    服务器出现大量的127.0.0.1:3306 TIME_WAIT连接 解决方法 [转载]
    phpize安装php扩展CURL
    linux位数查看
    Linux下Sublime Text 3的安装
    ECstore后台报表显示空白问题解决办法
    centos 上安装phpstorm
    Nginx禁止目录执行php文件权限
    vue 动画
    vue的路由
    组件的传值 组件之间的通讯
  • 原文地址:https://www.cnblogs.com/superfeeling/p/9007029.html
Copyright © 2011-2022 走看看