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

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

@@ -13450,6 +13450,61 @@
订单号 订单号
</summary> </summary>
</member> </member>
<member name="T:CoreCms.Net.Model.WeChatEntites.MenuFull_ButtonGroupForSkit">
<summary>
公众号菜单按钮提交参数类
</summary>
</member>
<member name="P:CoreCms.Net.Model.WeChatEntites.MenuFull_ButtonGroupForSkit.button">
<summary>
按钮列表
</summary>
</member>
<member name="T:CoreCms.Net.Model.WeChatEntites.MenuFull_RootButton">
<summary>
按钮具体类型
</summary>
</member>
<member name="P:CoreCms.Net.Model.WeChatEntites.MenuFull_RootButton.type">
<summary>
菜单的响应动作类型view表示网页类型click表示点击类型miniprogram表示小程序类型
</summary>
</member>
<member name="P:CoreCms.Net.Model.WeChatEntites.MenuFull_RootButton.key">
<summary>
菜单KEY值用于消息接口推送不超过128字节
</summary>
</member>
<member name="P:CoreCms.Net.Model.WeChatEntites.MenuFull_RootButton.name">
<summary>
菜单标题不超过16个字节子菜单不超过60个字节
</summary>
</member>
<member name="P:CoreCms.Net.Model.WeChatEntites.MenuFull_RootButton.url">
<summary>
网页 链接用户点击菜单可打开链接不超过1024字节。 type为miniprogram时不支持小程序的老版本客户端将打开本url。
</summary>
</member>
<member name="P:CoreCms.Net.Model.WeChatEntites.MenuFull_RootButton.appid">
<summary>
小程序的appid仅认证公众号可配置
</summary>
</member>
<member name="P:CoreCms.Net.Model.WeChatEntites.MenuFull_RootButton.pagepath">
<summary>
小程序的页面路径
</summary>
</member>
<member name="P:CoreCms.Net.Model.WeChatEntites.MenuFull_RootButton.media_id">
<summary>
调用新增永久素材接口返回的合法media_id
</summary>
</member>
<member name="P:CoreCms.Net.Model.WeChatEntites.MenuFull_RootButton.sub_button">
<summary>
二级菜单数组个数应为1~5个
</summary>
</member>
<member name="T:CoreCms.Net.Model.WeChatEntites.MyWxaBusinessGetLiveInfoRequest"> <member name="T:CoreCms.Net.Model.WeChatEntites.MyWxaBusinessGetLiveInfoRequest">
<summary> <summary>
<para>扩展 表示 [POST] /wxa/business/getliveinfo 接口的请求。</para> <para>扩展 表示 [POST] /wxa/business/getliveinfo 接口的请求。</para>

View File

@@ -7,8 +7,14 @@ using SKIT.FlurlHttpClient.Wechat.Api.Models;
namespace CoreCms.Net.Model.WeChatEntites namespace CoreCms.Net.Model.WeChatEntites
{ {
/// <summary>
/// 公众号菜单按钮提交参数类
/// </summary>
public class MenuFull_ButtonGroupForSkit public class MenuFull_ButtonGroupForSkit
{ {
public List<CgibinMenuCreateRequest.Types.Button> button { get; set; } /// <summary>
/// 按钮列表
/// </summary>
public List<MenuFull_RootButton> button { get; set; }
} }
} }

View File

@@ -0,0 +1,54 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CoreCms.Net.Model.WeChatEntites
{
/// <summary>
/// 按钮具体类型
/// </summary>
public class MenuFull_RootButton
{
/// <summary>
/// 菜单的响应动作类型view表示网页类型click表示点击类型miniprogram表示小程序类型
/// </summary>
public string type { get; set; }
/// <summary>
/// 菜单KEY值用于消息接口推送不超过128字节
/// </summary>
public string key { get; set; }
/// <summary>
/// 菜单标题不超过16个字节子菜单不超过60个字节
/// </summary>
public string name { get; set; }
/// <summary>
/// 网页 链接用户点击菜单可打开链接不超过1024字节。 type为miniprogram时不支持小程序的老版本客户端将打开本url。
/// </summary>
public string url { get; set; }
/// <summary>
/// 小程序的appid仅认证公众号可配置
/// </summary>
public string appid { get; set; }
/// <summary>
/// 小程序的页面路径
/// </summary>
public string pagepath { get; set; }
/// <summary>
/// 调用新增永久素材接口返回的合法media_id
/// </summary>
public string media_id { get; set; }
/// <summary>
/// 二级菜单数组个数应为1~5个
/// </summary>
public List<MenuFull_RootButton> sub_button { get; set; }
}
}

View File

@@ -18,6 +18,7 @@ using SKIT.FlurlHttpClient.Wechat.Api.Models;
using CoreCms.Net.WeChat.Service.HttpClients; using CoreCms.Net.WeChat.Service.HttpClients;
using CoreCms.Net.WeChat.Service.Enums; using CoreCms.Net.WeChat.Service.Enums;
using SKIT.FlurlHttpClient.Wechat.Api; using SKIT.FlurlHttpClient.Wechat.Api;
using Microsoft.IdentityModel.Tokens;
namespace CoreCms.Net.Web.Admin.Controllers.Api.WeChat 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) public async Task<AdminUiCallBack> CreateMenu(MenuFull_ButtonGroupForSkit menu)
{ {
var jm = new AdminUiCallBack(); 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 try
{ {
var client = _weChatApiHttpClientFactory.CreateWeXinClient(); var client = _weChatApiHttpClientFactory.CreateWeXinClient();
@@ -77,7 +125,7 @@ namespace CoreCms.Net.Web.Admin.Controllers.Api.WeChat
var request = new CgibinMenuCreateRequest() var request = new CgibinMenuCreateRequest()
{ {
AccessToken = accessToken, AccessToken = accessToken,
ButtonList = menu.button ButtonList = skitButtons
}; };
var response = await client.ExecuteCgibinMenuCreateAsync(request, HttpContext.RequestAborted); var response = await client.ExecuteCgibinMenuCreateAsync(request, HttpContext.RequestAborted);

View File

@@ -9,8 +9,15 @@
</div> </div>
<!--当前位置结束--> <!--当前位置结束-->
<style> <style>
.mydiv { margin-top: 10px; } .mydiv {
.mydiv p { width: 100%; line-height: 30px; margin-bottom: 5px; } margin-top: 10px;
}
.mydiv p {
width: 100%;
line-height: 30px;
margin-bottom: 5px;
}
</style> </style>
<script type="text/html" template lay-type="Post" lay-url="Api/WeChatMenu/GetIndex" lay-done="layui.data.done(d);"> <script type="text/html" template lay-type="Post" lay-url="Api/WeChatMenu/GetIndex" lay-done="layui.data.done(d);">
<div class="layui-fluid"> <div class="layui-fluid">