本文系統實現微信公眾平台全部菜單類型:click、view、scancode_push、scancode_waitmsg、pic_sysphoto、pic_photo_or_album、pic_weixin、location_select、media_id、view_limited,並支援個性化菜單按性別、地域、語言、客戶端類型、用戶分組投放。
AccessTokenUtils 採用本地文件緩存策略:首次獲取存入文件(token+時間戳),後續讀取判斷是否超過 7200 秒有效期,過期自動刷新。採用 Gson 實現 JSON 與 Bean 雙向轉換,全異常捕獲保證穩定性。
// 基礎按鈕屬性
class BaseButton { type, name, key, url, media_id }
// 子按鈕
class SonButton extends BaseButton { }
// 父按鈕:支援單一響應或包含子按鈕列表
class FatherButton extends BaseButton {
@SerializedName("sub_button")
List<SonButton> sonButtons;
}
// 整體菜單
class Menu {
@SerializedName("button")
List<FatherButton> fatherButtons;
MatchRule matchrule; // 個性化菜單匹配規則
}
// 個性化匹配規則
class MatchRule {
group_id, sex, client_platform_type, country, province, city, language
}
構建包含三組父按鈕的完整菜單:
Gson 序列化生成標準 JSON,HTTPS POST 請求發送至 /cgi-bin/menu/create 接口。
僅需兩處修改:
1. 接口地址改為 /cgi-bin/menu/addconditional
2. 構建 MatchRule 設置匹配條件(示例:sex="2" 針對男性用戶),注入 Menu 對象
源碼包含:AccessTokenUtils、Bean 定義、菜單構建邏輯、JUnit 測試用例、依賴管理。提供完整可運行的參考實現,適用於快速接入微信菜單功能。