記一個微信公眾號個性化菜單的坑


大致過程:單位的公眾號菜單去年的版本上線后,一直正常使用。現在有了做公眾號菜單調整的計划,利用之前已經設計好的功能,重新生成菜單,普通菜單沒有問題,但個性化菜單總是不能成功。

微信報的原因和錯誤表象如下:

錯誤原因: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);                
            }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM