問題描述:微信的公眾號菜單可以通過發微信提供的接口來自定義設置。最近做的一個需求是提供一個可編輯的頁面去修改公眾號的菜單,編輯完成后發微信的接口完成修改。思路比較清晰,先發菜單查詢接口拿到公眾號的菜單數據在頁面做展示,修改完成后,把新的數據以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處理,那可真是勞神了。