Browse Source

feat(wechat): Optimize the integration of wecom

- Fix some errors
pull/1398/head
colin 4 months ago
parent
commit
7881a30da4
  1. 7
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Common/Newtonsoft/Json/ExternalProfileNewtonsoftJsonConverter.cs
  2. 6
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Common/System/Text/Json/Serialization/ExternalProfileSystemTextJsonConverter.cs
  3. 2
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Contacts/LINGYUN.Abp.WeChat.Work.Contacts.csproj
  4. 2
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Contacts/LINGYUN/Abp/WeChat/Work/Contacts/Members/Response/WeChatWorkGetMemberResponse.cs
  5. 8
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Contacts/LINGYUN/Abp/WeChat/Work/Contacts/Tags/Request/WeChatWorkTagChangeMemberRequest.cs
  6. 49
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Contacts/Newtonsoft/Json/MemberExternalAttributeConverter.cs
  7. 47
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Contacts/System/Text/Json/Serialization/MemberExternalAttributeConverter.cs
  8. 1
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Customers/Response/WeChatWorkGetCustomerStrategyRangeResponse.cs
  9. 4
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.OA/LINGYUN/Abp/WeChat/Work/OA/Approvals/Models/ControlConfigFactory.cs
  10. 6
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.OA/LINGYUN/Abp/WeChat/Work/OA/Approvals/Models/ControlData.cs
  11. 22
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.OA/LINGYUN/Abp/WeChat/Work/OA/Approvals/Models/SelectorControlConfig.cs
  12. 2
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.OA/LINGYUN/Abp/WeChat/Work/OA/Approvals/Models/SelectorControlValue.cs
  13. 4
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.OA/LINGYUN/Abp/WeChat/Work/OA/Approvals/Request/WeChatWorkApplyEventRequest.cs
  14. 6
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.OA/LINGYUN/Abp/WeChat/Work/OA/Approvals/Request/WeChatWorkGetApprovalInfoRequest.cs
  15. 4
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.OA/Newtonsoft/Json/ControlNewtonsoftJsonConverter.cs
  16. 2
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.OA/System/Text/Json/Serialization/ControlSystemTextJsonConverter.cs
  17. 2
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Authorize/IWeChatWorkAuthorizeGenerator.cs
  18. 8
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/JsSdk/JsApiTicketHelper.cs
  19. 8
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Media/IWeChatWorkMediaProvider.cs
  20. 2
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Messages/Models/WeChatWorkWebhookNewsMessage.cs
  21. 2
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Messages/Models/WeChatWorkWebhookTextMessage.cs
  22. 1
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Messages/Models/WebhookTemplateCardMessage.cs

7
aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Common/Newtonsoft/Json/ExternalProfileNewtonsoftJsonConverter.cs

@ -59,9 +59,12 @@ internal class ExternalProfileNewtonsoftJsonConverter : JsonConverter<ExternalPr
var typeToken = externalAttrToken.SelectToken("type");
if (typeToken != null)
{
var type = typeToken.Value<ExternalAttributeType>();
var attributeType = typeToken.Value<int>();
if (Enum.IsDefined(typeof(ExternalAttributeType), attributeType))
{
externalProfile.ExternalAttributes.Add(
ExternalAttributeDeserializeFactory.CreateExternalAttribute(type, externalAttrToken));
ExternalAttributeDeserializeFactory.CreateExternalAttribute((ExternalAttributeType)attributeType, externalAttrToken));
}
}
}
}

6
aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Common/System/Text/Json/Serialization/ExternalProfileSystemTextJsonConverter.cs

@ -31,8 +31,12 @@ internal class ExternalProfileSystemTextJsonConverter : JsonConverter<ExternalPr
{
var type = typeElement.Deserialize<ExternalAttributeType>();
var attributeType = typeElement.GetInt32();
if (Enum.IsDefined(typeof(ExternalAttributeType), attributeType))
{
externalProfile.ExternalAttributes.Add(
ExternalAttributeDeserializeFactory.CreateExternalAttribute(type, externalAttrElement));
ExternalAttributeDeserializeFactory.CreateExternalAttribute((ExternalAttributeType)attributeType, externalAttrElement));
}
}
}
}

2
aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Contacts/LINGYUN.Abp.WeChat.Work.Contacts.csproj

@ -12,6 +12,8 @@
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
<Nullable>enable</Nullable>
<Version>9.3.6.3</Version>
<PackageVersion>9.3.6.3</PackageVersion>
<RootNamespace />
</PropertyGroup>

2
aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Contacts/LINGYUN/Abp/WeChat/Work/Contacts/Members/Response/WeChatWorkGetMemberResponse.cs

@ -159,6 +159,8 @@ public class WeChatWorkGetMemberResponse : WeChatWorkResponse
[CanBeNull]
[JsonProperty("extattr")]
[JsonPropertyName("extattr")]
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.MemberExternalAttributeConverter))]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.MemberExternalAttributeConverter))]
public MemberExternalAttribute? ExternalAttribute { get; set; }
/// <summary>
/// 对外职务,如果设置了该值,则以此作为对外展示的职务,否则以position来展示。

8
aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Contacts/LINGYUN/Abp/WeChat/Work/Contacts/Tags/Request/WeChatWorkTagChangeMemberRequest.cs

@ -24,18 +24,18 @@ public class WeChatWorkTagChangeMemberRequest : WeChatWorkRequest
[CanBeNull]
[JsonProperty("userlist")]
[JsonPropertyName("userlist")]
public List<string> Users { get; set; }
public List<string>? Users { get; set; }
/// <summary>
/// 企业部门ID列表,注意:userlist、partylist不能同时为空,单次请求个数不超过100
/// </summary>
[CanBeNull]
[JsonProperty("partylist")]
[JsonPropertyName("partylist")]
public List<int> Parts { get; set; }
public List<int>? Parts { get; set; }
public WeChatWorkTagChangeMemberRequest(
int tagId,
List<string> users = null,
List<int> parts = null)
List<string>? users = null,
List<int>? parts = null)
{
TagId = Check.Positive(tagId, nameof(tagId));
Users = users;

49
aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Contacts/Newtonsoft/Json/MemberExternalAttributeConverter.cs

@ -0,0 +1,49 @@
using LINGYUN.Abp.WeChat.Work.Contacts.Members.Models;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
namespace Newtonsoft.Json;
internal class MemberExternalAttributeConverter : JsonConverter<MemberExternalAttribute>
{
public override MemberExternalAttribute? ReadJson(JsonReader reader, Type objectType, MemberExternalAttribute? existingValue, bool hasExistingValue, JsonSerializer serializer)
{
var jObject = JObject.Load(reader);
var memberExternalAttribute = new MemberExternalAttribute();
if (jObject.TryGetValue("attrs", out var externalAttrsToken) && externalAttrsToken.Type == JTokenType.Array)
{
var attrs = new List<MemberAttribute>();
foreach (var externalAttrToken in externalAttrsToken)
{
var typeToken = externalAttrToken.SelectToken("type");
if (typeToken != null)
{
var attributeType = typeToken.Value<int>();
if (Enum.IsDefined(typeof(AttributeType), attributeType))
{
attrs.Add(MemberAttributeDeserializeFactory.CreateExternalAttribute((AttributeType)attributeType, externalAttrToken));
}
}
}
memberExternalAttribute.Attributes = attrs.ToArray();
}
return memberExternalAttribute;
}
public override void WriteJson(JsonWriter writer, MemberExternalAttribute? value, JsonSerializer serializer)
{
writer.WriteStartObject();
if (value != null)
{
writer.WritePropertyName("external_corp_name");
serializer.Serialize(writer, value.Attributes);
}
writer.WriteEndObject();
}
}

47
aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Contacts/System/Text/Json/Serialization/MemberExternalAttributeConverter.cs

@ -0,0 +1,47 @@
using LINGYUN.Abp.WeChat.Work.Contacts.Members.Models;
using System.Collections.Generic;
namespace System.Text.Json.Serialization;
internal class MemberExternalAttributeConverter : JsonConverter<MemberExternalAttribute>
{
public override MemberExternalAttribute? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
using var doc = JsonDocument.ParseValue(ref reader);
var root = doc.RootElement;
var memberExternalAttribute = new MemberExternalAttribute();
if (root.TryGetProperty("attrs", out var externalAttrsElement) && externalAttrsElement.ValueKind == JsonValueKind.Array)
{
var attrs = new List<MemberAttribute>();
foreach (var externalAttrElement in externalAttrsElement.EnumerateArray())
{
if (externalAttrElement.TryGetProperty("type", out var typeElement) && typeElement.ValueKind != JsonValueKind.Null)
{
var attributeType = typeElement.GetInt32();
if (Enum.IsDefined(typeof(AttributeType), attributeType))
{
attrs.Add(MemberAttributeDeserializeFactory.CreateExternalAttribute((AttributeType)attributeType, externalAttrElement));
}
}
}
memberExternalAttribute.Attributes = attrs.ToArray();
}
return memberExternalAttribute;
}
public override void Write(Utf8JsonWriter writer, MemberExternalAttribute value, JsonSerializerOptions options)
{
writer.WriteStartObject();
if (value.Attributes != null)
{
writer.WritePropertyName("attrs");
JsonSerializer.Serialize(writer, value.Attributes, value.Attributes.GetType(), options);
}
writer.WriteEndObject();
}
}

1
aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Customers/Response/WeChatWorkGetCustomerStrategyRangeResponse.cs

@ -8,7 +8,6 @@ namespace LINGYUN.Abp.WeChat.Work.ExternalContact.Customers.Response;
/// 获取规则组管理范围响应参数
/// </summary>
/// <remarks>
/// <remarks>
/// 详情见: <see href="https://developer.work.weixin.qq.com/document/path/94883" />
/// </remarks>
public class WeChatWorkGetCustomerStrategyRangeResponse : WeChatWorkResponse

4
aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.OA/LINGYUN/Abp/WeChat/Work/OA/Approvals/Models/ControlConfigFactory.cs

@ -7,7 +7,7 @@ internal static class ControlConfigFactory
/// <summary>
/// 根据控件类型创建配置(System.Text.Json)
/// </summary>
public static ControlConfig CreateConfig(string controlType, JsonElement configElement)
public static ControlConfig? CreateConfig(string controlType, JsonElement configElement)
{
return controlType switch
{
@ -29,7 +29,7 @@ internal static class ControlConfigFactory
/// <summary>
/// 根据控件类型创建配置(Newtonsoft.Json)
/// </summary>
public static ControlConfig CreateConfig(string controlType, JToken configToken)
public static ControlConfig? CreateConfig(string controlType, JToken configToken)
{
return controlType switch
{

6
aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.OA/LINGYUN/Abp/WeChat/Work/OA/Approvals/Models/ControlData.cs

@ -44,16 +44,16 @@ public class ControlData
/// <remarks>
/// 模板配置的控件属性为必填时,对应value值需要有值。
/// </remarks>
[NotNull]
[CanBeNull]
[JsonProperty("value")]
[JsonPropertyName("value")]
public ControlValue Value { get; set; }
public ControlValue? Value { get; set; }
public ControlData()
{
}
private ControlData(string id, string control, ControlValue value)
private ControlData(string id, string control, ControlValue? value = null)
{
Id = id;
Control = control;

22
aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.OA/LINGYUN/Abp/WeChat/Work/OA/Approvals/Models/SelectorControlConfig.cs

@ -39,24 +39,24 @@ public class SelectorConfig
/// <summary>
/// 多选选项,多选属性的选择控件允许输入多个
/// </summary>
[NotNull]
[CanBeNull]
[JsonProperty("options")]
[JsonPropertyName("options")]
public List<SelectorOption> Options { get; set; }
/// <summary>
/// 关联控件
/// </summary>
[NotNull]
[CanBeNull]
[JsonProperty("op_relations")]
[JsonPropertyName("op_relations")]
public List<SelectorOptionRelation> OptionRelations { get; set; }
public List<SelectorOptionRelation>? OptionRelations { get; set; }
/// <summary>
/// 关联外部选项
/// </summary>
[NotNull]
[CanBeNull]
[JsonProperty("external_option")]
[JsonPropertyName("external_option")]
public SelectorOptionExternal ExternalOption { get; set; }
public SelectorOptionExternal? ExternalOption { get; set; }
public SelectorConfig()
{
@ -65,8 +65,8 @@ public class SelectorConfig
private SelectorConfig(
string type,
List<SelectorOption> options,
List<SelectorOptionRelation> optionRelations = null,
SelectorOptionExternal optionExternal = null)
List<SelectorOptionRelation>? optionRelations = null,
SelectorOptionExternal? optionExternal = null)
{
Type = type;
Options = options;
@ -76,16 +76,16 @@ public class SelectorConfig
public static SelectorConfig Single(
List<SelectorOption> options,
List<SelectorOptionRelation> optionRelations = null,
SelectorOptionExternal optionExternal = null)
List<SelectorOptionRelation>? optionRelations = null,
SelectorOptionExternal? optionExternal = null)
{
return new SelectorConfig("single", options, optionRelations, optionExternal);
}
public static SelectorConfig Multiple(
List<SelectorOption> options,
List<SelectorOptionRelation> optionRelations = null,
SelectorOptionExternal optionExternal = null)
List<SelectorOptionRelation>? optionRelations = null,
SelectorOptionExternal? optionExternal = null)
{
return new SelectorConfig("multi", options, optionRelations, optionExternal);
}

2
aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.OA/LINGYUN/Abp/WeChat/Work/OA/Approvals/Models/SelectorControlValue.cs

@ -67,7 +67,7 @@ public class SelectorValue
/// <summary>
/// 创建一个多选选项
/// </summary>
/// <param name="option"></param>
/// <param name="options"></param>
/// <returns></returns>
public static SelectorValue Multiple(List<SelectorValueOption> options)
{

4
aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.OA/LINGYUN/Abp/WeChat/Work/OA/Approvals/Request/WeChatWorkApplyEventRequest.cs

@ -22,7 +22,7 @@ public class WeChatWorkApplyEventRequest : WeChatWorkRequest
[CanBeNull]
[JsonProperty("process")]
[JsonPropertyName("process")]
public ApprovalApplyProcess Process { get; set; }
public ApprovalApplyProcess? Process { get; set; }
/// <summary>
/// 摘要信息,用于显示在审批通知卡片、审批列表的摘要信息,最多3行
/// </summary>
@ -82,7 +82,7 @@ public class WeChatWorkApplyEventRequest : WeChatWorkRequest
string templateId,
string creatorUserid,
ApprovalApplyData applyData,
ApprovalApplyProcess process = null,
ApprovalApplyProcess? process = null,
byte? chooseDepartment = null)
{
TemplateId = templateId;

6
aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.OA/LINGYUN/Abp/WeChat/Work/OA/Approvals/Request/WeChatWorkGetApprovalInfoRequest.cs

@ -34,7 +34,7 @@ public class WeChatWorkGetApprovalInfoRequest : WeChatWorkRequest
[CanBeNull]
[JsonProperty("new_cursor")]
[JsonPropertyName("new_cursor")]
public string NewCursor { get; set; } = "";
public string? NewCursor { get; set; } = "";
/// <summary>
/// 一次请求拉取审批单数量,默认值为100,上限值为100。
/// 若accesstoken为自建应用,仅允许获取在应用可见范围内申请人提交的表单,返回的sp_no_list个数可能和size不一致,开发者需用next_cursor判断表单记录是否拉取完
@ -49,12 +49,12 @@ public class WeChatWorkGetApprovalInfoRequest : WeChatWorkRequest
[CanBeNull]
[JsonProperty("filters")]
[JsonPropertyName("filters")]
public List<ApprovalInfoFilter> Filters { get; set; }
public List<ApprovalInfoFilter>? Filters { get; set; }
public WeChatWorkGetApprovalInfoRequest(
long sartTime,
long endTime,
int size = 100,
List<ApprovalInfoFilter> filters = null)
List<ApprovalInfoFilter>? filters = null)
{
StartTime = sartTime;
EndTime = endTime;

4
aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.OA/Newtonsoft/Json/ControlNewtonsoftJsonConverter.cs

@ -26,7 +26,7 @@ internal class ControlNewtonsoftJsonConverter : JsonConverter<Control>
writer.WriteEndObject();
}
public override Control? ReadJson(JsonReader reader, Type objectType, Control existingValue, bool hasExistingValue, JsonSerializer serializer)
public override Control? ReadJson(JsonReader reader, Type objectType, Control? existingValue, bool hasExistingValue, JsonSerializer serializer)
{
var jObject = JObject.Load(reader);
@ -39,7 +39,7 @@ internal class ControlNewtonsoftJsonConverter : JsonConverter<Control>
// 根据 Control 类型动态反序列化 Config
if (jObject.TryGetValue("config", out var configToken) && configToken.Type != JTokenType.Null)
{
control.Config = ControlConfigFactory.CreateConfig(control.Property.Control, configToken);
control.Config = ControlConfigFactory.CreateConfig(control.Property.Control, configToken)!;
}
return control;

2
aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.OA/System/Text/Json/Serialization/ControlSystemTextJsonConverter.cs

@ -18,7 +18,7 @@ internal class ControlSystemTextJsonConverter : JsonConverter<Control>
// 根据 Control 类型动态反序列化 Config
if (root.TryGetProperty("config", out var configElement) && configElement.ValueKind != JsonValueKind.Null)
{
control.Config = ControlConfigFactory.CreateConfig(control.Property.Control, configElement);
control.Config = ControlConfigFactory.CreateConfig(control.Property.Control, configElement)!;
}
return control;

2
aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Authorize/IWeChatWorkAuthorizeGenerator.cs

@ -7,7 +7,7 @@ public interface IWeChatWorkAuthorizeGenerator
/// 构造网页授权链接
/// </summary>
/// <remarks>
/// 参考:https://developer.work.weixin.qq.com/document/path/91022
/// 参考:<see href="https://developer.work.weixin.qq.com/document/path/91022"/>
/// </remarks>
/// <param name="redirectUri"></param>
/// <param name="state"></param>

8
aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/JsSdk/JsApiTicketHelper.cs

@ -44,10 +44,12 @@ public static class JsApiTicketHelper
}
/// <summary>
/// 生成JS-SDK签名
/// See: https://developer.work.weixin.qq.com/document/path/90506
/// See: <see href="https://developer.work.weixin.qq.com/document/path/90506"/>
/// </summary>
/// <param name="jsapiTicket"></param>
/// <param name="url"></param>
/// <param name="jsapiTicket">企业 jsapi_ticket</param>
/// <param name="nonce">随机字符串</param>
/// <param name="timestamp">当前时间戳,单位为秒</param>
/// <param name="url">当前页面的 URL,不包含“#”及后面部分</param>
/// <returns></returns>
public static string GenerateSignature(
string jsapiTicket,

8
aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Media/IWeChatWorkMediaProvider.cs

@ -8,7 +8,7 @@ namespace LINGYUN.Abp.WeChat.Work.Media;
/// 素材管理接口
/// </summary>
/// <remarks>
/// API: <see cref="https://developer.work.weixin.qq.com/document/path/91054"/>
/// API: <see href="https://developer.work.weixin.qq.com/document/path/91054"/>
/// </remarks>
public interface IWeChatWorkMediaProvider
{
@ -16,7 +16,7 @@ public interface IWeChatWorkMediaProvider
/// 上传临时素材
/// </summary>
/// <remarks>
/// API: <see cref="https://developer.work.weixin.qq.com/document/path/90253"/>
/// API: <see href="https://developer.work.weixin.qq.com/document/path/90253"/>
/// </remarks>
/// <param name="type">媒体文件类型</param>
/// <param name="media">待上传文件</param>
@ -30,7 +30,7 @@ public interface IWeChatWorkMediaProvider
/// 获取临时素材
/// </summary>
/// <remarks>
/// API: <see cref="https://developer.work.weixin.qq.com/document/path/90254"/>
/// API: <see href="https://developer.work.weixin.qq.com/document/path/90254"/>
/// </remarks>
/// <param name="mediaId">媒体文件id</param>
/// <param name="cancellationToken"></param>
@ -43,7 +43,7 @@ public interface IWeChatWorkMediaProvider
/// 上传图片
/// </summary>
/// <remarks>
/// API: <see cref="https://developer.work.weixin.qq.com/document/path/90256"/>
/// API: <see href="https://developer.work.weixin.qq.com/document/path/90256"/>
/// </remarks>
/// <param name="image">待上传图片</param>
/// <param name="cancellationToken"></param>

2
aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Messages/Models/WeChatWorkWebhookNewsMessage.cs

@ -18,7 +18,7 @@ internal class WeChatWorkWebhookNewsMessage : WeChatWorkWebhookMessage
/// <summary>
/// 创建一个企业微信Webhook图文消息
/// </summary>
/// <param name="markdown">图文消息体</param>
/// <param name="news">图文消息体</param>
public WeChatWorkWebhookNewsMessage(WebhookNewsMessage news)
: base("news")
{

2
aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Messages/Models/WeChatWorkWebhookTextMessage.cs

@ -18,7 +18,7 @@ public class WeChatWorkWebhookTextMessage : WeChatWorkWebhookMessage
/// <summary>
/// 创建一个企业微信Webhook文本消息
/// </summary>
/// <param name="templateCard">文本消息体</param>
/// <param name="text">文本消息体</param>
public WeChatWorkWebhookTextMessage(WebhookTextMessage text)
: base("text")
{

1
aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Messages/Models/WebhookTemplateCardMessage.cs

@ -63,6 +63,7 @@ public abstract class WebhookTemplateCardMessage
/// <summary>
/// 创建一个Webhook模板卡片消息体
/// </summary>
/// <param name="cardType">模版卡片的模版类型</param>
/// <param name="action">整体卡片的点击跳转事件</param>
/// <param name="mainTitle">模版卡片的主要内容</param>
/// <param name="source">卡片来源样式信息</param>

Loading…
Cancel
Save