using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Threading.Tasks; using CoreCms.Net.Auth.HttpContextUser; using CoreCms.Net.Configuration; using CoreCms.Net.Filter; using CoreCms.Net.IServices; using CoreCms.Net.Loging; using CoreCms.Net.Model.FromBody; using CoreCms.Net.Model.ViewModels.UI; using Microsoft.AspNetCore.Authorization; using CoreCms.Net.Caching.AccressToken; using CoreCms.Net.Model.WeChatEntites; using CoreCms.Net.Web.Admin.Infrastructure; using SKIT.FlurlHttpClient.Wechat.Api.Models; using CoreCms.Net.WeChat.Service.HttpClients; using CoreCms.Net.WeChat.Service.Enums; using SKIT.FlurlHttpClient.Wechat.Api; using Microsoft.IdentityModel.Tokens; namespace CoreCms.Net.Web.Admin.Controllers.Api.WeChat { /// /// 微信菜单 /// [Description("微信菜单")] [Route("api/[controller]/[action]")] [RequiredErrorForAdmin] [Authorize] public class WeChatMenuController : ControllerBase { private readonly IWeChatApiHttpClientFactory _weChatApiHttpClientFactory; /// /// 构造函数 /// public WeChatMenuController(IWeChatApiHttpClientFactory weChatApiHttpClientFactory) { _weChatApiHttpClientFactory = weChatApiHttpClientFactory; } #region 首页数据============================================================ // POST: Api/WC_Group/GetIndex /// /// 首页数据 /// /// [HttpPost] [Description("首页数据")] public AdminUiCallBack GetIndex() { //返回数据 var jm = new AdminUiCallBack { code = 0 }; return jm; } #endregion /// /// 创建菜单 /// /// [Description("创建菜单")] [HttpPost] public async Task CreateMenu(MenuFull_ButtonGroupForSkit menu) { var jm = new AdminUiCallBack(); if (!menu.button.Any()) { jm.msg = "请不要提交空的菜单数据"; return jm; } var skitButtons = new List(); foreach (var itemParent in menu.button) { if (string.IsNullOrEmpty(itemParent.name) && string.IsNullOrEmpty(itemParent.name)) continue; var bt = new CgibinMenuCreateRequest.Types.Button { Type = itemParent.type, Key = itemParent.key, Name = itemParent.name, Url = itemParent.url, MiniProgramAppId = itemParent.appid, MiniProgramPagePath = itemParent.pagepath, MediaId = itemParent.media_id, ArticleId = "", SubButtonList = new List() }; if (!itemParent.sub_button.Any()) continue; foreach (var btChild in from itemChild in itemParent.sub_button where !string.IsNullOrEmpty(itemChild.key) || !string.IsNullOrEmpty(itemChild.name) select new CgibinMenuCreateRequest.Types.Button { Type = itemChild.type, Key = itemChild.key, Name = itemChild.name, Url = itemChild.url, MiniProgramAppId = itemChild.appid, MiniProgramPagePath = itemChild.pagepath, MediaId = itemChild.media_id, ArticleId = "" }) { bt.SubButtonList.Add(btChild); } skitButtons.Add(bt); } try { var client = _weChatApiHttpClientFactory.CreateWeXinClient(); var accessToken = WeChatCacheAccessTokenHelper.GetWeChatAccessToken(); var request = new CgibinMenuCreateRequest() { AccessToken = accessToken, ButtonList = skitButtons }; var response = await client.ExecuteCgibinMenuCreateAsync(request, HttpContext.RequestAborted); if (response.ErrorCode == (int)WeChatReturnCode.ReturnCode.请求成功) { jm.code = 0; jm.data = response; jm.otherData = menu; jm.msg = "更新成功"; return jm; } else { jm.msg = response.ErrorMessage; jm.otherData = menu; return jm; } } catch (Exception ex) { jm.msg = $"更新失败:{ex.Message}"; jm.otherData = menu; return jm; } } /// /// 获取菜单 /// [HttpPost] [Description("获取菜单")] public async Task GetMenu() { var jm = new AdminUiCallBack(); try { var client = _weChatApiHttpClientFactory.CreateWeXinClient(); var accessToken = WeChatCacheAccessTokenHelper.GetWeChatAccessToken(); var request = new CgibinMenuGetRequest() { AccessToken = accessToken }; var response = await client.ExecuteCgibinMenuGetAsync(request, HttpContext.RequestAborted); if (response.ErrorCode == (int)WeChatReturnCode.ReturnCode.请求成功) { jm.code = 0; jm.data = response; return jm; } else { jm.msg = response.ErrorMessage; return jm; } } catch (Exception ex) { jm.msg = "菜单不存在或验证失败!"; jm.otherData = ex.Message; return jm; } } /// /// 删除菜单 /// /// [Description("删除菜单")] [HttpPost] public async Task DeleteMenu() { var jm = new AdminUiCallBack(); try { var client = _weChatApiHttpClientFactory.CreateWeXinClient(); var accessToken = WeChatCacheAccessTokenHelper.GetWeChatAccessToken(); var request = new CgibinMenuDeleteRequest() { AccessToken = accessToken }; var response = await client.ExecuteCgibinMenuDeleteAsync(request, HttpContext.RequestAborted); if (response.ErrorCode == (int)WeChatReturnCode.ReturnCode.请求成功) { jm.code = 0; jm.data = response; return jm; } else { jm.msg = response.ErrorMessage; return jm; } } catch (Exception ex) { jm.msg = "菜单不存在或验证失败!"; jm.otherData = ex.Message; return jm; } } } }