public static JObject MenuBuild(this List <Menu> menus, MenuConditionParameter menuCondition = null) { JObject root = new JObject(); JArray array = new JArray(); foreach (var menu in menus) { if (menu is ChildrenMenu) { var first = menu.ToJObject(); JArray children = new JArray(); foreach (var child in menu.Children) { children.Add(child.ToJObject()); } first["name"] = menu.Name; first["sub_button"] = children; array.Add(first); } else { array.Add(menu.ToJObject()); } } root["button"] = array; if (menuCondition != null) { root["matchrule"] = MenuCondition(menuCondition); } return(root); }
/// <summary> /// 创建个性化菜单 /// </summary> /// <param name="menus"></param> /// <param name="condition"></param> /// <param name="accessToken"></param> /// <returns></returns> public async Task <dynamic> CreateMenuAsync(List <Menu> menus, MenuConditionParameter condition, string accessToken) { var menuNode = menus.MenuBuild(condition); var response = await _client.ExecutePostRequest( WeChatHelper.GetWeChatApiDomain("/cgi-bin/menu/addconditional"), new Dictionary <string, string> { { WeChatConstant.AccessToken, accessToken } }, menuNode.ToString()); JObject root = JObject.Parse(response); WeChatHelper.CheckResponseStatus(root); return(root.ToObject <dynamic>()); }
private static JObject MenuCondition(MenuConditionParameter condition) { JObject rule = new JObject(); if (string.IsNullOrEmpty(condition.City) == false) { rule["city"] = condition.City; } if (string.IsNullOrEmpty(condition.Country) == false) { rule["province"] = condition.Country; } if (string.IsNullOrEmpty(condition.Lanuage) == false) { rule["language"] = condition.Lanuage; } if (string.IsNullOrEmpty(condition.Province) == false) { rule["province"] = condition.Province; } if (string.IsNullOrEmpty(condition.Sex) == false) { rule["sex"] = condition.Sex; } if (string.IsNullOrEmpty(condition.ClientPlatform) == false) { rule["client_platform_type"] = condition.ClientPlatform; } if (string.IsNullOrEmpty(condition.TagId) == false) { rule["tag_id"] = condition.TagId; } return(rule); }