【修复】修复公众号管理创建二级菜单失败的问题。

This commit is contained in:
jianweie
2023-05-05 15:58:40 +08:00
parent 91172f3ee2
commit 58c3bcc0f3
5 changed files with 174 additions and 4 deletions

View File

@@ -18,6 +18,7 @@ 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
{
@@ -70,6 +71,53 @@ namespace CoreCms.Net.Web.Admin.Controllers.Api.WeChat
public async Task<AdminUiCallBack> CreateMenu(MenuFull_ButtonGroupForSkit menu)
{
var jm = new AdminUiCallBack();
if (!menu.button.Any())
{
jm.msg = "请不要提交空的菜单数据";
return jm;
}
var skitButtons = new List<CgibinMenuCreateRequest.Types.Button>();
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<CgibinMenuCreateRequest.Types.Button>()
};
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();
@@ -77,7 +125,7 @@ namespace CoreCms.Net.Web.Admin.Controllers.Api.WeChat
var request = new CgibinMenuCreateRequest()
{
AccessToken = accessToken,
ButtonList = menu.button
ButtonList = skitButtons
};
var response = await client.ExecuteCgibinMenuCreateAsync(request, HttpContext.RequestAborted);