feat(wxapi): 升级公共组件

This commit is contained in:
Fu Diwei 2024-01-29 23:11:56 +08:00 committed by RHQYZ
parent 54e7ac8266
commit 5a110785f8
590 changed files with 7047 additions and 7220 deletions

View File

@ -13,14 +13,14 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Sample.Controllers
public class WechatNotifyController : ControllerBase
{
private readonly ILogger _logger;
private readonly Services.HttpClients.IWechatApiHttpClientFactory _wechatApiHttpClientFactory;
private readonly Services.HttpClients.IWechatApiClientFactory _wechatApiClientFactory;
public WechatNotifyController(
ILoggerFactory loggerFactory,
Services.HttpClients.IWechatApiHttpClientFactory wechatApiHttpClientFactory)
Services.HttpClients.IWechatApiClientFactory wechatApiClientFactory)
{
_logger = loggerFactory.CreateLogger(GetType());
_wechatApiHttpClientFactory = wechatApiHttpClientFactory;
_wechatApiClientFactory = wechatApiClientFactory;
}
[HttpGet]
@ -35,8 +35,8 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Sample.Controllers
// 验证服务器推送
// 文档https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html
var client = _wechatApiHttpClientFactory.Create(appId);
bool valid = client.VerifyEventSignatureForEcho(callbackTimestamp: timestamp, callbackNonce: nonce, callbackSignature: signature);
var client = _wechatApiClientFactory.Create(appId);
bool valid = client.VerifyEventSignatureForEcho(webhookTimestamp: timestamp, webhookNonce: nonce, webhookSignature: signature);
if (!valid)
{
return Content("fail");
@ -57,7 +57,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Sample.Controllers
string content = await reader.ReadToEndAsync();
_logger.LogInformation("接收到微信推送的数据:{0}", content);
var client = _wechatApiHttpClientFactory.Create(appId);
var client = _wechatApiClientFactory.Create(appId);
var msgType = client.DeserializeEventFromXml(content).MessageType?.ToUpper();
switch (msgType)
{

View File

@ -1,4 +1,4 @@
using System.Linq;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
@ -14,16 +14,16 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Sample.Controllers
{
private readonly ILogger _logger;
private readonly Services.Repositories.IWechatAccessTokenEntityRepository _wechatAccessTokenEntityRepository;
private readonly Services.HttpClients.IWechatApiHttpClientFactory _wechatApiHttpClientFactory;
private readonly Services.HttpClients.IWechatApiClientFactory _wechatApiClientFactory;
public WechatUserController(
ILoggerFactory loggerFactory,
Services.Repositories.IWechatAccessTokenEntityRepository wechatAccessTokenEntityRepository,
Services.HttpClients.IWechatApiHttpClientFactory wechatApiHttpClientFactory)
Services.HttpClients.IWechatApiClientFactory wechatApiClientFactory)
{
_logger = loggerFactory.CreateLogger(GetType());
_wechatAccessTokenEntityRepository = wechatAccessTokenEntityRepository;
_wechatApiHttpClientFactory = wechatApiHttpClientFactory;
_wechatApiClientFactory = wechatApiClientFactory;
}
[HttpGet]
@ -33,14 +33,14 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Sample.Controllers
[FromQuery(Name = "open_id")] string openId)
{
var entity = _wechatAccessTokenEntityRepository.FirstOrDefault(e => e.AppId == appId);
var client = _wechatApiHttpClientFactory.Create(appId);
var client = _wechatApiClientFactory.Create(appId);
var request = new CgibinUserInfoRequest() { AccessToken = entity?.AccessToken, OpenId = openId };
var response = await client.ExecuteCgibinUserInfoAsync(request, cancellationToken: HttpContext.RequestAborted);
if (!response.IsSuccessful())
{
_logger.LogWarning(
"获取用户基本信息失败(状态码:{0},错误代码:{1},错误描述:{2})。",
response.RawStatus, response.ErrorCode, response.ErrorMessage
response.GetRawStatus(), response.ErrorCode, response.ErrorMessage
);
}

View File

@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
@ -17,20 +17,20 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Sample.Services.BackgroundServices
private readonly ILogger _logger;
private readonly Options.WechatOptions _wechatOptions;
private readonly DistributedLock.IDistributedLockFactory _distributedLockFactory;
private readonly HttpClients.IWechatApiHttpClientFactory _wechatApiHttpClientFactory;
private readonly HttpClients.IWechatApiClientFactory _wechatApiClientFactory;
private readonly Repositories.IWechatAccessTokenEntityRepository _wechatAccessTokenEntityRepository;
public WechatAccessTokenRefreshingBackgroundService(
ILoggerFactory loggerFactory,
IOptions<Options.WechatOptions> wechatOptions,
DistributedLock.IDistributedLockFactory distributedLockFactory,
HttpClients.IWechatApiHttpClientFactory wechatApiHttpClientFactory,
HttpClients.IWechatApiClientFactory wechatApiClientFactory,
Repositories.IWechatAccessTokenEntityRepository wechatAccessTokenEntityRepository)
{
_logger = loggerFactory.CreateLogger(GetType());
_wechatOptions = wechatOptions.Value;
_distributedLockFactory = distributedLockFactory;
_wechatApiHttpClientFactory = wechatApiHttpClientFactory;
_wechatApiClientFactory = wechatApiClientFactory;
_wechatAccessTokenEntityRepository = wechatAccessTokenEntityRepository;
}
@ -64,14 +64,14 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Sample.Services.BackgroundServices
if (lockHandler == null)
return; // 未取得锁
var client = _wechatApiHttpClientFactory.Create(appId);
var client = _wechatApiClientFactory.Create(appId);
var request = new CgibinTokenRequest();
var response = await client.ExecuteCgibinTokenAsync(request, cancellationToken);
if (!response.IsSuccessful())
{
_logger.LogWarning(
"刷新 AppId 为 {0} 微信 AccessToken 失败(状态码:{1},错误代码:{2},错误描述:{3})。",
appId, response.RawStatus, response.ErrorCode, response.ErrorMessage
appId, response.GetRawStatus(), response.ErrorCode, response.ErrorMessage
);
return; // 请求失败
}

View File

@ -0,0 +1,7 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Sample.Services.HttpClients
{
public interface IWechatApiClientFactory
{
WechatApiClient Create(string appId);
}
}

View File

@ -1,7 +0,0 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Sample.Services.HttpClients
{
public interface IWechatApiHttpClientFactory
{
WechatApiClient Create(string appId);
}
}

View File

@ -1,20 +1,16 @@
using System;
using System.Linq;
using System.Net.Http;
using Microsoft.Extensions.Options;
namespace SKIT.FlurlHttpClient.Wechat.Api.Sample.Services.HttpClients.Implements
{
internal partial class WechatApiHttpClientFactory : IWechatApiHttpClientFactory
internal partial class WechatApiClientFactory : IWechatApiClientFactory
{
private readonly IHttpClientFactory _httpClientFactory;
private readonly Options.WechatOptions _wechatOptions;
public WechatApiHttpClientFactory(
IHttpClientFactory httpClientFactory,
public WechatApiClientFactory(
IOptions<Options.WechatOptions> wechatOptions)
{
_httpClientFactory = httpClientFactory;
_wechatOptions = wechatOptions.Value;
}
@ -36,26 +32,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Sample.Services.HttpClients.Implements
PushToken = _wechatOptions.CallbackToken
};
var wechatApiClient = new WechatApiClient(wechatApiClientOptions);
wechatApiClient.Configure((settings) => settings.FlurlHttpClientFactory = new DelegatingFlurlClientFactory(_httpClientFactory));
return wechatApiClient;
}
}
internal partial class WechatApiHttpClientFactory
{
internal class DelegatingFlurlClientFactory : Flurl.Http.Configuration.DefaultHttpClientFactory
{
private readonly IHttpClientFactory _httpClientFactory;
public DelegatingFlurlClientFactory(IHttpClientFactory httpClientFactory)
{
_httpClientFactory = httpClientFactory ?? throw new ArgumentNullException(nameof(httpClientFactory));
}
public override HttpClient CreateHttpClient(HttpMessageHandler handler)
{
return _httpClientFactory.CreateClient();
}
}
}
}

View File

@ -29,7 +29,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Sample
// 注入工厂 HTTP 客户端
services.AddHttpClient();
services.AddSingleton<Services.HttpClients.IWechatApiHttpClientFactory, Services.HttpClients.Implements.WechatApiHttpClientFactory>();
services.AddSingleton<Services.HttpClients.IWechatApiClientFactory, Services.HttpClients.Implements.WechatApiClientFactory>();
// 注入后台任务
services.AddHostedService<Services.BackgroundServices.WechatAccessTokenRefreshingBackgroundService>();

View File

@ -1,45 +0,0 @@
using System;
namespace Newtonsoft.Json.Converters
{
internal class TextualStringArrayWithPipeSplitConverter : JsonConverter<string[]?>
{
public override bool CanRead
{
get { return true; }
}
public override bool CanWrite
{
get { return true; }
}
public override string[]? ReadJson(JsonReader reader, Type objectType, string[]? existingValue, bool hasExistingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.Null)
{
return null;
}
else if (reader.TokenType == JsonToken.String)
{
string? value = serializer.Deserialize<string>(reader);
if (value == null)
return null;
if (string.IsNullOrEmpty(value))
return Array.Empty<string>();
return value.Split('|');
}
throw new JsonSerializationException();
}
public override void WriteJson(JsonWriter writer, string[]? value, JsonSerializer serializer)
{
if (value != null)
writer.WriteValue(string.Join("|", value));
else
writer.WriteNull();
}
}
}

View File

@ -1,45 +0,0 @@
using System;
namespace Newtonsoft.Json.Converters
{
internal class TextualStringArrayWithSemicolonSplitConverter : JsonConverter<string[]?>
{
public override bool CanRead
{
get { return true; }
}
public override bool CanWrite
{
get { return true; }
}
public override string[]? ReadJson(JsonReader reader, Type objectType, string[]? existingValue, bool hasExistingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.Null)
{
return null;
}
else if (reader.TokenType == JsonToken.String)
{
string? value = serializer.Deserialize<string>(reader);
if (value == null)
return null;
if (string.IsNullOrEmpty(value))
return Array.Empty<string>();
return value.Split(';');
}
throw new JsonSerializationException();
}
public override void WriteJson(JsonWriter writer, string[]? value, JsonSerializer serializer)
{
if (value != null)
writer.WriteValue(string.Join(";", value));
else
writer.WriteNull();
}
}
}

View File

@ -1,39 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
namespace Newtonsoft.Json.Converters
{
internal class TextualStringListWithPipeSplitConverter : JsonConverter
{
private readonly JsonConverter<string[]?> _converter = new TextualStringArrayWithPipeSplitConverter();
public override bool CanConvert(Type objectType)
{
return objectType.IsGenericType &&
typeof(IList<>).IsAssignableFrom(objectType.GetGenericTypeDefinition()) &&
typeof(string) == objectType.GetGenericArguments()[0];
}
public override bool CanRead
{
get { return true; }
}
public override bool CanWrite
{
get { return true; }
}
public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer)
{
string[]? array = _converter.ReadJson(reader, objectType, null, false, serializer);
return array?.ToList();
}
public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
{
_converter.WriteJson(writer, ((IList<string>?)value)?.ToArray(), serializer);
}
}
}

View File

@ -1,39 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
namespace Newtonsoft.Json.Converters
{
internal class TextualStringListWithSemicolonSplitConverter : JsonConverter
{
private readonly JsonConverter<string[]?> _converter = new TextualStringArrayWithSemicolonSplitConverter();
public override bool CanConvert(Type objectType)
{
return objectType.IsGenericType &&
typeof(IList<>).IsAssignableFrom(objectType.GetGenericTypeDefinition()) &&
typeof(string) == objectType.GetGenericArguments()[0];
}
public override bool CanRead
{
get { return true; }
}
public override bool CanWrite
{
get { return true; }
}
public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer)
{
string[]? array = _converter.ReadJson(reader, objectType, null, false, serializer);
return array?.ToList();
}
public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
{
_converter.WriteJson(writer, ((IList<string>?)value)?.ToArray(), serializer);
}
}
}

View File

@ -1,74 +0,0 @@
using System.Collections.Generic;
using System.Linq;
using System.Text.Json.Serialization;
namespace System.Text.Json.Converters
{
internal class TextualIntegerArrayConverter : JsonConverter<int[]?>
{
public override int[]? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
if (reader.TokenType == JsonTokenType.Null)
{
return null;
}
else if (reader.TokenType == JsonTokenType.StartArray)
{
IList<int> list = new List<int>();
while (reader.Read())
{
switch (reader.TokenType)
{
case JsonTokenType.Number:
{
int value = reader.GetInt32();
list.Add(value);
}
break;
case JsonTokenType.String:
{
string? value = reader.GetString();
if (!int.TryParse(value, out int l))
throw new JsonException($"Could not parse String '{value}' to Integer.");
list.Add(l);
}
break;
case JsonTokenType.EndArray:
return list.ToArray();
case JsonTokenType.Comment:
break;
default:
throw new JsonException($"Unexpected JSON token type '{reader.TokenType}' when reading.");
}
}
}
throw new JsonException($"Unexpected JSON token type '{reader.TokenType}' when reading.");
}
public override void Write(Utf8JsonWriter writer, int[]? value, JsonSerializerOptions options)
{
if (value != null)
{
writer.WriteStartArray();
foreach (int i in value)
{
writer.WriteStringValue(i.ToString());
}
writer.WriteEndArray();
}
else
{
writer.WriteNullValue();
}
}
}
}

View File

@ -1,74 +0,0 @@
using System.Collections.Generic;
using System.Linq;
using System.Text.Json.Serialization;
namespace System.Text.Json.Converters
{
internal class TextualLongArrayConverter : JsonConverter<long[]?>
{
public override long[]? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
if (reader.TokenType == JsonTokenType.Null)
{
return null;
}
else if (reader.TokenType == JsonTokenType.StartArray)
{
IList<long> list = new List<long>();
while (reader.Read())
{
switch (reader.TokenType)
{
case JsonTokenType.Number:
{
long value = reader.GetInt64();
list.Add(value);
}
break;
case JsonTokenType.String:
{
string? value = reader.GetString();
if (!long.TryParse(value, out long l))
throw new JsonException($"Could not parse String '{value}' to Long.");
list.Add(l);
}
break;
case JsonTokenType.EndArray:
return list.ToArray();
case JsonTokenType.Comment:
break;
default:
throw new JsonException($"Unexpected JSON token type '{reader.TokenType}' when reading.");
}
}
}
throw new JsonException($"Unexpected JSON token type '{reader.TokenType}' when reading.");
}
public override void Write(Utf8JsonWriter writer, long[]? value, JsonSerializerOptions options)
{
if (value != null)
{
writer.WriteStartArray();
foreach (long l in value)
{
writer.WriteStringValue(l.ToString());
}
writer.WriteEndArray();
}
else
{
writer.WriteNullValue();
}
}
}
}

View File

@ -1,35 +0,0 @@
using System.Text.Json.Serialization;
namespace System.Text.Json.Converters
{
internal class TextualStringArrayWithPipeSplitConverter : JsonConverter<string[]?>
{
public override string[]? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
if (reader.TokenType == JsonTokenType.Null)
{
return null;
}
else if (reader.TokenType == JsonTokenType.String)
{
string? value = reader.GetString();
if (value == null)
return null;
if (string.IsNullOrEmpty(value))
return Array.Empty<string>();
return value.Split('|');
}
throw new JsonException();
}
public override void Write(Utf8JsonWriter writer, string[]? value, JsonSerializerOptions options)
{
if (value != null)
writer.WriteStringValue(string.Join("|", value));
else
writer.WriteNullValue();
}
}
}

View File

@ -1,35 +0,0 @@
using System.Text.Json.Serialization;
namespace System.Text.Json.Converters
{
internal class TextualStringArrayWithSemicolonSplitConverter : JsonConverter<string[]?>
{
public override string[]? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
if (reader.TokenType == JsonTokenType.Null)
{
return null;
}
else if (reader.TokenType == JsonTokenType.String)
{
string? value = reader.GetString();
if (value == null)
return null;
if (string.IsNullOrEmpty(value))
return Array.Empty<string>();
return value.Split(';');
}
throw new JsonException();
}
public override void Write(Utf8JsonWriter writer, string[]? value, JsonSerializerOptions options)
{
if (value != null)
writer.WriteStringValue(string.Join(";", value));
else
writer.WriteNullValue();
}
}
}

View File

@ -1,38 +0,0 @@
using System.Collections.Generic;
using System.Linq;
using System.Text.Json.Serialization;
namespace System.Text.Json.Converters
{
internal class TextualStringListWithPipeSplitConverter : JsonConverterFactory
{
private sealed class InnerTextualStringListWithPipeSplitConverter : JsonConverter<IList<string>?>
{
private readonly JsonConverter<string[]?> _converter = new TextualStringArrayWithPipeSplitConverter();
public override IList<string>? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
string[]? array = _converter.Read(ref reader, typeToConvert, options);
IList<string>? list = array?.ToList();
return list;
}
public override void Write(Utf8JsonWriter writer, IList<string>? value, JsonSerializerOptions options)
{
_converter.Write(writer, value?.ToArray(), options);
}
}
public override bool CanConvert(Type typeToConvert)
{
return typeToConvert.IsGenericType &&
typeof(IList<>).IsAssignableFrom(typeToConvert.GetGenericTypeDefinition()) &&
typeof(string) == typeToConvert.GetGenericArguments()[0];
}
public override JsonConverter? CreateConverter(Type typeToConvert, JsonSerializerOptions options)
{
return new InnerTextualStringListWithPipeSplitConverter();
}
}
}

View File

@ -1,38 +0,0 @@
using System.Collections.Generic;
using System.Linq;
using System.Text.Json.Serialization;
namespace System.Text.Json.Converters
{
internal class TextualStringListWithSemicolonSplitConverter : JsonConverterFactory
{
private sealed class InnerTextualStringListWithSemicolonSplitConverter : JsonConverter<IList<string>?>
{
private readonly JsonConverter<string[]?> _converter = new TextualStringArrayWithSemicolonSplitConverter();
public override IList<string>? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
string[]? array = _converter.Read(ref reader, typeToConvert, options);
IList<string>? list = array?.ToList();
return list;
}
public override void Write(Utf8JsonWriter writer, IList<string>? value, JsonSerializerOptions options)
{
_converter.Write(writer, value?.ToArray(), options);
}
}
public override bool CanConvert(Type typeToConvert)
{
return typeToConvert.IsGenericType &&
typeof(IList<>).IsAssignableFrom(typeToConvert.GetGenericTypeDefinition()) &&
typeof(string) == typeToConvert.GetGenericArguments()[0];
}
public override JsonConverter? CreateConverter(Type typeToConvert, JsonSerializerOptions options)
{
return new InnerTextualStringListWithSemicolonSplitConverter();
}
}
}

View File

@ -1,10 +1,10 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Events
namespace SKIT.FlurlHttpClient.Wechat.Api.Events
{
/// <summary>
/// <para>表示 EVENT.card_merchant_check_result 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Cards_and_Offer/Third-party_developer_mode.html#2 </para>
/// </summary>
public class CardMerchantCheckResultEvent : CardPassCheckEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class CardMerchantCheckResultEvent : CardPassCheckEvent
{
/// <summary>
/// 获取或设置子商户 ID。
@ -19,7 +19,7 @@
/// </summary>
[Newtonsoft.Json.JsonProperty("IsPass")]
[System.Text.Json.Serialization.JsonPropertyName("IsPass")]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumericalBooleanConverter))]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalBooleanConverter))]
[System.Xml.Serialization.XmlElement("IsPass")]
public bool IsPassed { get; set; }

View File

@ -4,7 +4,7 @@
/// <para>表示 EVENT.card_not_pass_check 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Cards_and_Offer/Coupons_Vouchers_and_Cards_Event_Push_Messages.html#1 </para>
/// </summary>
public class CardNotPassCheckEvent : CardPassCheckEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class CardNotPassCheckEvent : CardPassCheckEvent
{
/// <summary>
/// 获取或设置审核不通过原因。

View File

@ -4,7 +4,7 @@
/// <para>表示 EVENT.card_pass_check 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Cards_and_Offer/Coupons_Vouchers_and_Cards_Event_Push_Messages.html#1 </para>
/// </summary>
public class CardPassCheckEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class CardPassCheckEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置卡券模板编号。

View File

@ -4,7 +4,7 @@
/// <para>表示 EVENT.card_sku_remind 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Cards_and_Offer/Coupons_Vouchers_and_Cards_Event_Push_Messages.html#10 </para>
/// </summary>
public class CardSKURemindEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class CardSKURemindEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置卡券模板编号。

View File

@ -4,7 +4,7 @@
/// <para>表示 EVENT.giftcard_pay_done 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Cards_and_Offer/gift_card.html#_10-1%E3%80%81%E7%94%A8%E6%88%B7%E8%B4%AD%E4%B9%B0%E7%A4%BC%E5%93%81%E5%8D%A1%E4%BB%98%E6%AC%BE%E6%88%90%E5%8A%9FCallBack </para>
/// </summary>
public class GiftCardPayDoneEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class GiftCardPayDoneEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置货架 ID。

View File

@ -4,7 +4,7 @@
/// <para>表示 EVENT.giftcard_send_to_friend 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Cards_and_Offer/gift_card.html#_10-2%E3%80%81%E7%94%A8%E6%88%B7%E8%B4%AD%E4%B9%B0%E5%90%8E%E8%B5%A0%E9%80%81CallBack </para>
/// </summary>
public class GiftCardSendToFriendEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class GiftCardSendToFriendEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置货架 ID。
@ -27,7 +27,7 @@
/// </summary>
[Newtonsoft.Json.JsonProperty("IsReturnBack")]
[System.Text.Json.Serialization.JsonPropertyName("IsReturnBack")]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumericalBooleanConverter))]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalBooleanConverter))]
[System.Xml.Serialization.XmlElement("IsReturnBack")]
public bool IsReturnBack { get; set; }
@ -36,7 +36,7 @@
/// </summary>
[Newtonsoft.Json.JsonProperty("IsChatRoom")]
[System.Text.Json.Serialization.JsonPropertyName("IsChatRoom")]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumericalBooleanConverter))]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalBooleanConverter))]
[System.Xml.Serialization.XmlElement("IsChatRoom")]
public bool IsFromChatroom { get; set; }
}

View File

@ -4,7 +4,7 @@
/// <para>表示 EVENT.giftcard_user_accept 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Cards_and_Offer/gift_card.html#_10-3%E3%80%81%E7%94%A8%E6%88%B7%E9%A2%86%E5%8F%96%E7%A4%BC%E5%93%81%E5%8D%A1%E6%88%90%E5%8A%9FCallBack </para>
/// </summary>
public class GiftCardUserAcceptEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class GiftCardUserAcceptEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置货架 ID。
@ -27,7 +27,7 @@
/// </summary>
[Newtonsoft.Json.JsonProperty("IsChatRoom")]
[System.Text.Json.Serialization.JsonPropertyName("IsChatRoom")]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumericalBooleanConverter))]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalBooleanConverter))]
[System.Xml.Serialization.XmlElement("IsChatRoom")]
public bool IsFromChatroom { get; set; }
}

View File

@ -4,7 +4,7 @@
/// <para>表示 EVENT.ORDER_STATUS_FINANCE_SUCC 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Cards_and_Offer/Coupons_Vouchers_and_Cards_Event_Push_Messages.html#11 </para>
/// </summary>
public class OrderStatusFinanceSuccessEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class OrderStatusFinanceSuccessEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置订单号。

View File

@ -4,7 +4,7 @@
/// <para>表示 EVENT.submit_membercard_user_info 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Cards_and_Offer/Coupons_Vouchers_and_Cards_Event_Push_Messages.html#12 </para>
/// </summary>
public class SubmitMemberCardUserInfoEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class SubmitMemberCardUserInfoEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置卡券模板编号。

View File

@ -4,7 +4,7 @@
/// <para>表示 EVENT.update_member_card 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Cards_and_Offer/Coupons_Vouchers_and_Cards_Event_Push_Messages.html#9 </para>
/// </summary>
public class UpdateMemberCardEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class UpdateMemberCardEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置卡券模板编号。

View File

@ -4,7 +4,7 @@
/// <para>表示 EVENT.user_consume_card 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Cards_and_Offer/Coupons_Vouchers_and_Cards_Event_Push_Messages.html#5 </para>
/// </summary>
public class UserConsumeCardEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class UserConsumeCardEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置卡券模板编号。

View File

@ -4,7 +4,7 @@
/// <para>表示 EVENT.user_del_card 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Cards_and_Offer/Coupons_Vouchers_and_Cards_Event_Push_Messages.html#4 </para>
/// </summary>
public class UserDeleteCardEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class UserDeleteCardEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置卡券模板编号。

View File

@ -4,7 +4,7 @@
/// <para>表示 EVENT.user_enter_session_from_card 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Cards_and_Offer/Coupons_Vouchers_and_Cards_Event_Push_Messages.html#8 </para>
/// </summary>
public class UserEnterSessionFromCardEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class UserEnterSessionFromCardEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置卡券模板编号。

View File

@ -1,4 +1,4 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Events
namespace SKIT.FlurlHttpClient.Wechat.Api.Events
{
/// <summary>
/// <para>表示 EVENT.user_get_card 事件的数据。</para>
@ -7,7 +7,7 @@
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Cards_and_Offer/Membership_Cards/Create_a_membership_card.html#13 </para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Cards_and_Offer/gift_card.html#_10-4%E3%80%81%E8%B5%A0%E9%80%8124%E5%B0%8F%E6%97%B6%E5%AF%B9%E6%96%B9%E6%9C%AA%E9%A2%86%E5%8F%96%E9%80%80%E5%9B%9E%E5%90%8E%E7%9A%84%E4%BA%8B%E4%BB%B6 </para>
/// </summary>
public class UserGetCardEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class UserGetCardEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置卡券模板编号。
@ -46,7 +46,7 @@
/// </summary>
[Newtonsoft.Json.JsonProperty("IsGiveByFriend")]
[System.Text.Json.Serialization.JsonPropertyName("IsGiveByFriend")]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumericalBooleanConverter))]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalBooleanConverter))]
[System.Xml.Serialization.XmlElement("IsGiveByFriend")]
public bool IsTransferedByFriend { get; set; }
@ -63,7 +63,7 @@
/// </summary>
[Newtonsoft.Json.JsonProperty("IsRestoreMemberCard")]
[System.Text.Json.Serialization.JsonPropertyName("IsRestoreMemberCard")]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumericalNullableBooleanConverter))]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalBooleanConverter))]
[System.Xml.Serialization.XmlElement("IsRestoreMemberCard", IsNullable = true)]
public bool? IsRestoreMemberCard { get; set; }
@ -72,7 +72,7 @@
/// </summary>
[Newtonsoft.Json.JsonProperty("IsRecommendByFriend")]
[System.Text.Json.Serialization.JsonPropertyName("IsRecommendByFriend")]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumericalNullableBooleanConverter))]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalBooleanConverter))]
[System.Xml.Serialization.XmlElement("IsRecommendByFriend", IsNullable = true)]
public bool? IsRecommendByFriend { get; set; }

View File

@ -4,7 +4,7 @@
/// <para>表示 EVENT.user_gifting_card 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Cards_and_Offer/Coupons_Vouchers_and_Cards_Event_Push_Messages.html#3 </para>
/// </summary>
public class UserGiftingCardEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class UserGiftingCardEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置卡券模板编号。
@ -35,7 +35,7 @@
/// </summary>
[Newtonsoft.Json.JsonProperty("IsReturnBack")]
[System.Text.Json.Serialization.JsonPropertyName("IsReturnBack")]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumericalBooleanConverter))]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalBooleanConverter))]
[System.Xml.Serialization.XmlElement("IsReturnBack")]
public bool IsReturnBack { get; set; }
@ -44,7 +44,7 @@
/// </summary>
[Newtonsoft.Json.JsonProperty("IsChatRoom")]
[System.Text.Json.Serialization.JsonPropertyName("IsChatRoom")]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumericalBooleanConverter))]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalBooleanConverter))]
[System.Xml.Serialization.XmlElement("IsChatRoom")]
public bool IsFromChatroom { get; set; }
}

View File

@ -5,7 +5,7 @@
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Cards_and_Offer/Create_a_Coupon_Voucher_or_Card.html#13 </para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Cards_and_Offer/Coupons_Vouchers_and_Cards_Event_Push_Messages.html#6 </para>
/// </summary>
public class UserPayFromPayCellEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class UserPayFromPayCellEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置卡券模板编号。

View File

@ -4,7 +4,7 @@
/// <para>表示 EVENT.user_view_card 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Cards_and_Offer/Coupons_Vouchers_and_Cards_Event_Push_Messages.html#7 </para>
/// </summary>
public class UserViewCardEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class UserViewCardEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置卡券模板编号。

View File

@ -4,7 +4,7 @@
/// <para>表示 EVENT.cloud_invoice_invoiceresult_event 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/WeChat_Invoice/E_Invoice/Vendor_API_List.html#19 </para>
/// </summary>
public class CloudInvoiceResultEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class CloudInvoiceResultEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置开票状态码。

View File

@ -4,7 +4,7 @@
/// <para>表示 EVENT.submit_invoice_title 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/WeChat_Invoice/Quick_issuing/Interface_Instructions.html </para>
/// </summary>
public class SubmitInvoiceTitleEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class SubmitInvoiceTitleEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置发票抬头类型。

View File

@ -5,7 +5,7 @@
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/WeChat_Invoice/E_Invoice/Invoicing_Platform_API_List.html#7 </para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/WeChat_Invoice/Nontax_Bill/API_list.html#3.6 </para>
/// </summary>
public class UpdateInvoiceStatusEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class UpdateInvoiceStatusEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置发票或非税票据卡券模板编号。

View File

@ -6,7 +6,7 @@
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/WeChat_Invoice/E_Invoice/Vendor_API_List.html#6 </para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/WeChat_Invoice/Nontax_Bill/API_list.html#2.3 </para>
/// </summary>
public class UserAuthorizeInvoiceEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class UserAuthorizeInvoiceEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置授权成功的订单号。

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 EVENT.channels_ec_aftersale_update 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/aftersale/ec_callback/channels_ec_aftersale_update.html </para>
/// </summary>
public class ChannelsECAftersaleUpdateEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class ChannelsECAftersaleUpdateEvent : WechatApiEvent
{
public static class Types
{

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 EVENT.channels_ec_brand 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/brand/callback/brand_event.html </para>
/// </summary>
public class ChannelsECBrandEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class ChannelsECBrandEvent : WechatApiEvent
{
public static class Types
{

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 EVENT.channels_ec_complaint_update 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/complaint/callback/channels_ec_complaint_update.html </para>
/// </summary>
public class ChannelsECCompliantUpdateEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class ChannelsECCompliantUpdateEvent : WechatApiEvent
{
public static class Types
{

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 EVENT.channels_ec_coupon_receive 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/aftersale/ec_callback/channels_ec_aftersale_update.html </para>
/// </summary>
public class ChannelsECCouponReceiveEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class ChannelsECCouponReceiveEvent : WechatApiEvent
{
public static class Types
{

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 EVENT.head_supplier_item_update 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/leagueheadsupplier/callback/head_supplier_item_update.html </para>
/// </summary>
public class ChannelsECHeadSupplierItemUpdateEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class ChannelsECHeadSupplierItemUpdateEvent : WechatApiEvent
{
public static class Types
{

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 EVENT.channels_ec_order_cancel 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/order/callback/channels_ec_order_cancel.html </para>
/// </summary>
public class ChannelsECOrderCancelEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class ChannelsECOrderCancelEvent : WechatApiEvent
{
public static class Types
{

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 EVENT.channels_ec_order_confirm 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/order/callback/channels_ec_order_confirm.html </para>
/// </summary>
public class ChannelsECOrderConfirmEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class ChannelsECOrderConfirmEvent : WechatApiEvent
{
public static class Types
{

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 EVENT.channels_ec_order_deliver 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/order/callback/channels_ec_order_deliver.html </para>
/// </summary>
public class ChannelsECOrderDeliverEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class ChannelsECOrderDeliverEvent : WechatApiEvent
{
public static class Types
{
@ -23,9 +23,9 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// 获取或设置是否发货完成。
/// </summary>
[Newtonsoft.Json.JsonProperty("finish_delivery")]
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.NumericalBooleanConverter))]
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.NumericalBooleanConverter))]
[System.Text.Json.Serialization.JsonPropertyName("finish_delivery")]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumericalBooleanConverter))]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalBooleanConverter))]
public bool IsFinishDelivery { get; set; }
}
}

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 EVENT.channels_ec_order_new 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/order/callback/channels_ec_order_new.html </para>
/// </summary>
public class ChannelsECOrderNewEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class ChannelsECOrderNewEvent : WechatApiEvent
{
public static class Types
{

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 EVENT.channels_ec_order_pay 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/order/callback/channels_ec_order_pay.html </para>
/// </summary>
public class ChannelsECOrderPayEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class ChannelsECOrderPayEvent : WechatApiEvent
{
public static class Types
{

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 EVENT.channels_ec_order_settle 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/order/callback/channels_ec_order_settle.html </para>
/// </summary>
public class ChannelsECOrderSettleEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class ChannelsECOrderSettleEvent : WechatApiEvent
{
public static class Types
{

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 EVENT.product_category_audit 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/category/callback/ProductCategoryAudit.html </para>
/// </summary>
public class ChannelsECProductCategoryAuditEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class ChannelsECProductCategoryAuditEvent : WechatApiEvent
{
public static class Types
{

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 EVENT.product_spu_audit 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/product/callback/ProductSpuAudit.html </para>
/// </summary>
public class ChannelsECProductSPUAuditEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class ChannelsECProductSPUAuditEvent : WechatApiEvent
{
public static class Types
{

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 EVENT.product_spu_listing 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/product/callback/ProductSpuListing.html </para>
/// </summary>
public class ChannelsECProductSPUListingEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class ChannelsECProductSPUListingEvent : WechatApiEvent
{
public static class Types
{

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 EVENT.channels_ec_vip_close 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/vip/callback/member/user_join_vip.html </para>
/// </summary>
public class ChannelsECVipCloseEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class ChannelsECVipCloseEvent : WechatApiEvent
{
public static class Types
{

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 EVENT.channels_ec_vip_grade_info_update 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/vip/callback/member/usergrade_update.html </para>
/// </summary>
public class ChannelsECVipGradeInfoUpgradeEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class ChannelsECVipGradeInfoUpgradeEvent : WechatApiEvent
{
public static class Types
{

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 EVENT.channels_ec_vip_join 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/vip/callback/member/user_join_vip.html </para>
/// </summary>
public class ChannelsECVipJoinEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class ChannelsECVipJoinEvent : WechatApiEvent
{
public static class Types
{

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 EVENT.channels_ec_vip_score_exchange 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/vip/callback/score/user_score_exchange.html </para>
/// </summary>
public class ChannelsECVipScoreExchangeEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class ChannelsECVipScoreExchangeEvent : WechatApiEvent
{
public static class Types
{

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 EVENT.channels_ec_vip_score_update 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/vip/callback/score/user_score_update.html </para>
/// </summary>
public class ChannelsECVipScoreUpdateEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class ChannelsECVipScoreUpdateEvent : WechatApiEvent
{
public static class Types
{

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 EVENT.channels_ec_vip_task_award 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/vip/callback/member/user_finish_task.html </para>
/// </summary>
public class ChannelsECVipTaskAwardEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class ChannelsECVipTaskAwardEvent : WechatApiEvent
{
public static class Types
{

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 EVENT.ewaybill_push_path 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/ewaybill/push_path.html </para>
/// </summary>
public class EWaybillPushPathEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class EWaybillPushPathEvent : WechatApiEvent
{
public static class Types
{
@ -15,7 +15,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// </summary>
[Newtonsoft.Json.JsonProperty("ewaybill_order_id")]
[System.Text.Json.Serialization.JsonPropertyName("ewaybill_order_id")]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumericalStringReadOnlyConverter))]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalStringReadOnlyConverter))]
[System.Xml.Serialization.XmlElement("ewaybill_order_id")]
public string EWaybillOrderId { get; set; } = default!;

View File

@ -4,7 +4,7 @@
/// <para>表示 EVENT.merchant_order 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/WeChat_Stores/WeChat_Store_Interface.html#8 </para>
/// </summary>
public class MerchantOrderEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class MerchantOrderEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置订单号。

View File

@ -4,7 +4,7 @@
/// <para>表示 EVENT.annual_renew 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Account_Management/Wechat_Accreditation_Event_Push.html#4 </para>
/// </summary>
public class AnnualRenewEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class AnnualRenewEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置过期时间戳。

View File

@ -4,7 +4,7 @@
/// <para>表示 EVENT.naming_verify_fail 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Account_Management/Wechat_Accreditation_Event_Push.html#3 </para>
/// </summary>
public class NamingVerifyFailEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class NamingVerifyFailEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置失败时间戳。

View File

@ -4,7 +4,7 @@
/// <para>表示 EVENT.naming_verify_success 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Account_Management/Wechat_Accreditation_Event_Push.html#2 </para>
/// </summary>
public class NamingVerifySuccessEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class NamingVerifySuccessEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置过期时间戳。

View File

@ -4,7 +4,7 @@
/// <para>表示 EVENT.qualification_verify_fail 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Account_Management/Wechat_Accreditation_Event_Push.html#1 </para>
/// </summary>
public class QualificationVerifyFailEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class QualificationVerifyFailEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置失败时间戳。

View File

@ -4,7 +4,7 @@
/// <para>表示 EVENT.qualification_verify_success 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Account_Management/Wechat_Accreditation_Event_Push.html#0 </para>
/// </summary>
public class QualificationVerifySuccessEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class QualificationVerifySuccessEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置过期时间戳。

View File

@ -4,7 +4,7 @@
/// <para>表示 EVENT.verify_expired 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Account_Management/Wechat_Accreditation_Event_Push.html#5 </para>
/// </summary>
public class VerifyExpiredEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class VerifyExpiredEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置过期时间戳。

View File

@ -4,7 +4,7 @@
/// <para>表示 EVENT.guide_qrcode_scan_event 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Shopping_Guide/guide-account/shopping-guide.onGuideCreateQrCode.html </para>
/// </summary>
public class GuideQrcodeScanEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class GuideQrcodeScanEvent : WechatApiEvent
{
public static class Types
{

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 EVENT.FREEPUBLISHJOBFINISH 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Publish/Callback_on_finish.html </para>
/// </summary>
public class FreePublishJobFinishEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class FreePublishJobFinishEvent : WechatApiEvent
{
public static class Types
{
@ -76,7 +76,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// </summary>
[Newtonsoft.Json.JsonProperty("article_id")]
[System.Text.Json.Serialization.JsonPropertyName("article_id")]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumericalStringReadOnlyConverter))]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalStringReadOnlyConverter))]
[System.Xml.Serialization.XmlElement("article_id")]
public string? ArticleId { get; set; }

View File

@ -4,7 +4,7 @@
/// <para>表示 EVENT.MASSSENDJOBFINISH 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Batch_Sends_and_Originality_Checks.html#7 </para>
/// </summary>
public class MassSendJobFinishEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class MassSendJobFinishEvent : WechatApiEvent
{
public static class Types
{
@ -59,7 +59,7 @@
/// </summary>
[Newtonsoft.Json.JsonProperty("CanReprint")]
[System.Text.Json.Serialization.JsonPropertyName("CanReprint")]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumericalBooleanConverter))]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalBooleanConverter))]
[System.Xml.Serialization.XmlElement("CanReprint")]
public bool CanReprint { get; set; }
@ -68,7 +68,7 @@
/// </summary>
[Newtonsoft.Json.JsonProperty("NeedReplaceContent")]
[System.Text.Json.Serialization.JsonPropertyName("NeedReplaceContent")]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumericalBooleanConverter))]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalBooleanConverter))]
[System.Xml.Serialization.XmlElement("NeedReplaceContent")]
public bool RequireReplaceContent { get; set; }
@ -77,7 +77,7 @@
/// </summary>
[Newtonsoft.Json.JsonProperty("NeedShowReprintSource")]
[System.Text.Json.Serialization.JsonPropertyName("NeedShowReprintSource")]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumericalBooleanConverter))]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalBooleanConverter))]
[System.Xml.Serialization.XmlElement("NeedShowReprintSource")]
public bool RequireShowReprintSource { get; set; }
}

View File

@ -4,7 +4,7 @@
/// <para>表示 EVENT.TEMPLATESENDJOBFINISH 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Template_Message_Interface.html#%E4%BA%8B%E4%BB%B6%E6%8E%A8%E9%80%81 </para>
/// </summary>
public class TemplateSendJobFinishEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class TemplateSendJobFinishEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置消息 ID。

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 IMAGE 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_standard_messages.html#%E5%9B%BE%E7%89%87%E6%B6%88%E6%81%AF </para>
/// </summary>
public class ImageMessageEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class ImageMessageEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置消息 ID。

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 LINK 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_standard_messages.html#%E9%93%BE%E6%8E%A5%E6%B6%88%E6%81%AF </para>
/// </summary>
public class LinkMessageEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class LinkMessageEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置消息 ID。

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 LOCATION 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_standard_messages.html#%E5%9C%B0%E7%90%86%E4%BD%8D%E7%BD%AE%E6%B6%88%E6%81%AF </para>
/// </summary>
public class LocationMessageEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class LocationMessageEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置消息 ID。
@ -20,7 +20,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
[Newtonsoft.Json.JsonProperty("Location_X")]
[System.Text.Json.Serialization.JsonPropertyName("Location_X")]
[System.Xml.Serialization.XmlElement("Location_X")]
public double Latitude { get; set; }
public decimal Latitude { get; set; }
/// <summary>
/// 获取或设置经度坐标。
@ -28,7 +28,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
[Newtonsoft.Json.JsonProperty("Location_Y")]
[System.Text.Json.Serialization.JsonPropertyName("Location_Y")]
[System.Xml.Serialization.XmlElement("Location_Y")]
public double Longitude { get; set; }
public decimal Longitude { get; set; }
/// <summary>
/// 获取或设置地图缩放大小。
@ -36,7 +36,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
[Newtonsoft.Json.JsonProperty("Scale")]
[System.Text.Json.Serialization.JsonPropertyName("Scale")]
[System.Xml.Serialization.XmlElement("Scale")]
public double Scale { get; set; }
public decimal Scale { get; set; }
/// <summary>
/// 获取或设置地理位置信息。

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 MINIPROGRAMPAGE 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/customer-message/receive.html </para>
/// </summary>
public class MiniProgramPageMessageEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class MiniProgramPageMessageEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置消息 ID。

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 SHORTVIDEO 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_standard_messages.html#%E5%B0%8F%E8%A7%86%E9%A2%91%E6%B6%88%E6%81%AF </para>
/// </summary>
public class ShortVideoMessageEvent : VideoMessageEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class ShortVideoMessageEvent : VideoMessageEvent
{
}
}

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 TEXT 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_standard_messages.html#%E6%96%87%E6%9C%AC%E6%B6%88%E6%81%AF </para>
/// </summary>
public class TextMessageEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class TextMessageEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置消息 ID。

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 VIDEO 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_standard_messages.html#%E8%A7%86%E9%A2%91%E6%B6%88%E6%81%AF </para>
/// </summary>
public class VideoMessageEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class VideoMessageEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置消息 ID。

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 VOICE 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_standard_messages.html#%E8%AF%AD%E9%9F%B3%E6%B6%88%E6%81%AF </para>
/// </summary>
public class VoiceMessageEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class VoiceMessageEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置消息 ID。

View File

@ -5,7 +5,7 @@
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_event_pushes.html#%E8%87%AA%E5%AE%9A%E4%B9%89%E8%8F%9C%E5%8D%95%E4%BA%8B%E4%BB%B6 </para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Custom_Menus/Custom_Menu_Push_Events.html#0 </para>
/// </summary>
public class ClickPushEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class ClickPushEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置事件 Key即自定义菜单接口中的 Key 值。

View File

@ -4,7 +4,7 @@
/// <para>表示 EVENT.LOCATION 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_event_pushes.html#%E4%B8%8A%E6%8A%A5%E5%9C%B0%E7%90%86%E4%BD%8D%E7%BD%AE%E4%BA%8B%E4%BB%B6 </para>
/// </summary>
public class LocationPushEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class LocationPushEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置地理位置纬度。
@ -12,7 +12,7 @@
[Newtonsoft.Json.JsonProperty("Latitude")]
[System.Text.Json.Serialization.JsonPropertyName("Latitude")]
[System.Xml.Serialization.XmlElement("Latitude")]
public double Latitude { get; set; }
public decimal Latitude { get; set; }
/// <summary>
/// 获取或设置地理位置经度。
@ -20,7 +20,7 @@
[Newtonsoft.Json.JsonProperty("Longitude")]
[System.Text.Json.Serialization.JsonPropertyName("Longitude")]
[System.Xml.Serialization.XmlElement("Longitude")]
public double Longitude { get; set; }
public decimal Longitude { get; set; }
/// <summary>
/// 获取或设置地理位置精度。
@ -28,6 +28,6 @@
[Newtonsoft.Json.JsonProperty("Precision")]
[System.Text.Json.Serialization.JsonPropertyName("Precision")]
[System.Xml.Serialization.XmlElement("Precision")]
public double Precision { get; set; }
public decimal Precision { get; set; }
}
}

View File

@ -4,7 +4,7 @@
/// <para>表示 EVENT.scancode_push 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Custom_Menus/Custom_Menu_Push_Events.html#2 </para>
/// </summary>
public class ScanCodePushEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class ScanCodePushEvent : WechatApiEvent
{
public static class Types
{

View File

@ -4,7 +4,7 @@
/// <para>表示 EVENT.SCAN 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_event_pushes.html#%E6%89%AB%E6%8F%8F%E5%B8%A6%E5%8F%82%E6%95%B0%E4%BA%8C%E7%BB%B4%E7%A0%81%E4%BA%8B%E4%BB%B6 </para>
/// </summary>
public class ScanPushEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class ScanPushEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置事件 Key即创建二维码时的 SceneId。

View File

@ -5,7 +5,7 @@
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_event_pushes.html#%E5%85%B3%E6%B3%A8-%E5%8F%96%E6%B6%88%E5%85%B3%E6%B3%A8%E4%BA%8B%E4%BB%B6 </para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_event_pushes.html#%E6%89%AB%E6%8F%8F%E5%B8%A6%E5%8F%82%E6%95%B0%E4%BA%8C%E7%BB%B4%E7%A0%81%E4%BA%8B%E4%BB%B6 </para>
/// </summary>
public class SubscribePushEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class SubscribePushEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置事件 Key即创建二维码时的 SceneId。

View File

@ -4,7 +4,7 @@
/// <para>表示 EVENT.unsubscribe 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_event_pushes.html#%E5%85%B3%E6%B3%A8-%E5%8F%96%E6%B6%88%E5%85%B3%E6%B3%A8%E4%BA%8B%E4%BB%B6 </para>
/// </summary>
public class UnsubscribePushEvent : SubscribePushEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class UnsubscribePushEvent : SubscribePushEvent
{
}
}

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 EVENT.user_authorization_revoke 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/authorization_change.html </para>
/// </summary>
public class UserAuthorizationRevokeEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class UserAuthorizationRevokeEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置微信 AppId。
@ -27,7 +27,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// </summary>
[Newtonsoft.Json.JsonProperty("RevokeInfo")]
[System.Text.Json.Serialization.JsonPropertyName("RevokeInfo")]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumericalStringReadOnlyConverter))]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalStringReadOnlyConverter))]
[System.Xml.Serialization.XmlElement("RevokeInfo", IsNullable = true)]
public string? RevokeInfo { get; set; }
}

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 EVENT.user_enter_tempsession 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/customer-message/receive.html </para>
/// </summary>
public class UserEnterTempSessionEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class UserEnterTempSessionEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置会话来源。

View File

@ -4,7 +4,7 @@
/// <para>表示 EVENT.view_miniprogram 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Custom_Menus/Custom_Menu_Push_Events.html#8 </para>
/// </summary>
public class ViewMiniProgramPushEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class ViewMiniProgramPushEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置个性化菜单 ID。

View File

@ -5,7 +5,7 @@
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_event_pushes.html#%E8%87%AA%E5%AE%9A%E4%B9%89%E8%8F%9C%E5%8D%95%E4%BA%8B%E4%BB%B6 </para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Custom_Menus/Custom_Menu_Push_Events.html#1 </para>
/// </summary>
public class ViewPushEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class ViewPushEvent : WechatApiEvent
{
/// <summary>
/// 获取或设置个性化菜单 ID。

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示被动回复图片消息的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Passive_user_reply_message.html#1 </para>
/// </summary>
public class ImageMessageReply : WechatApiEvent, WechatApiEvent.Serialization.IXmlSerializable
public class ImageMessageReply : WechatApiEvent
{
public static class Types
{
@ -13,6 +13,8 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <summary>
/// 获取或设置图片 MediaId。
/// </summary>
[Newtonsoft.Json.JsonProperty("MediaId")]
[System.Text.Json.Serialization.JsonPropertyName("MediaId")]
[System.Xml.Serialization.XmlElement("MediaId")]
public string MediaId { get; set; } = default!;
}
@ -21,6 +23,8 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <summary>
/// 获取或设置图片信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("Image")]
[System.Text.Json.Serialization.JsonPropertyName("Image")]
[System.Xml.Serialization.XmlElement("Image")]
public Types.Image Image { get; set; } = default!;

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示被动回复音乐消息的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Passive_user_reply_message.html#4 </para>
/// </summary>
public class MusicMessageReply : WechatApiEvent, WechatApiEvent.Serialization.IXmlSerializable
public class MusicMessageReply : WechatApiEvent
{
public static class Types
{
@ -13,30 +13,40 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <summary>
/// 获取或设置音乐链接。
/// </summary>
[Newtonsoft.Json.JsonProperty("MusicUrl")]
[System.Text.Json.Serialization.JsonPropertyName("MusicUrl")]
[System.Xml.Serialization.XmlElement("MusicUrl")]
public string MusicUrl { get; set; } = default!;
/// <summary>
/// 获取或设置高质量音乐链接。
/// </summary>
[Newtonsoft.Json.JsonProperty("HQMusicUrl")]
[System.Text.Json.Serialization.JsonPropertyName("HQMusicUrl")]
[System.Xml.Serialization.XmlElement("HQMusicUrl", IsNullable = true)]
public string? HQMusicUrl { get; set; }
/// <summary>
/// 获取或设置音乐封面图片 MediaId。
/// </summary>
[Newtonsoft.Json.JsonProperty("ThumbMediaId")]
[System.Text.Json.Serialization.JsonPropertyName("ThumbMediaId")]
[System.Xml.Serialization.XmlElement("ThumbMediaId")]
public string ThumbMediaId { get; set; } = default!;
/// <summary>
/// 获取或设置音乐标题。
/// </summary>
[Newtonsoft.Json.JsonProperty("Title")]
[System.Text.Json.Serialization.JsonPropertyName("Title")]
[System.Xml.Serialization.XmlElement("Title")]
public string Title { get; set; } = default!;
/// <summary>
/// 获取或设置音乐描述。
/// </summary>
[Newtonsoft.Json.JsonProperty("Description")]
[System.Text.Json.Serialization.JsonPropertyName("Description")]
[System.Xml.Serialization.XmlElement("Description")]
public string Description { get; set; } = default!;
}
@ -45,6 +55,8 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <summary>
/// 获取或设置音乐信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("Music")]
[System.Text.Json.Serialization.JsonPropertyName("Music")]
[System.Xml.Serialization.XmlElement("Music")]
public Types.Music Music { get; set; } = default!;

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示被动回复图文消息的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Passive_user_reply_message.html#5 </para>
/// </summary>
public class NewsMessageReply : WechatApiEvent, WechatApiEvent.Serialization.IXmlSerializable
public class NewsMessageReply : WechatApiEvent
{
public static class Types
{
@ -13,24 +13,32 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <summary>
/// 获取或设置图文链接。
/// </summary>
[Newtonsoft.Json.JsonProperty("Url")]
[System.Text.Json.Serialization.JsonPropertyName("Url")]
[System.Xml.Serialization.XmlElement("Url")]
public string Url { get; set; } = default!;
/// <summary>
/// 获取或设置图文封面图片链接。
/// </summary>
[Newtonsoft.Json.JsonProperty("PicUrl")]
[System.Text.Json.Serialization.JsonPropertyName("PicUrl")]
[System.Xml.Serialization.XmlElement("PicUrl")]
public string PictureUrl { get; set; } = default!;
/// <summary>
/// 获取或设置图文标题。
/// </summary>
[Newtonsoft.Json.JsonProperty("Title")]
[System.Text.Json.Serialization.JsonPropertyName("Title")]
[System.Xml.Serialization.XmlElement("Title")]
public string Title { get; set; } = default!;
/// <summary>
/// 获取或设置图文描述。
/// </summary>
[Newtonsoft.Json.JsonProperty("Description")]
[System.Text.Json.Serialization.JsonPropertyName("Description")]
[System.Xml.Serialization.XmlElement("Description")]
public string Description { get; set; } = default!;
}
@ -40,6 +48,8 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <summary>
/// 获取或设置图文列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("item")]
[System.Text.Json.Serialization.JsonPropertyName("item")]
[System.Xml.Serialization.XmlElement("item", Type = typeof(ArticleItem))]
public ArticleItem[] Items { get; set; } = default!;
}
@ -48,12 +58,16 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <summary>
/// 获取或设置图文数量。
/// </summary>
[Newtonsoft.Json.JsonProperty("ArticleCount")]
[System.Text.Json.Serialization.JsonPropertyName("ArticleCount")]
[System.Xml.Serialization.XmlElement("ArticleCount")]
public int ArticleCount { get; set; }
/// <summary>
/// 获取或设置图文列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("Articles")]
[System.Text.Json.Serialization.JsonPropertyName("Articles")]
[System.Xml.Serialization.XmlElement("Articles")]
public Types.ArticleList ArticleList { get; set; } = default!;

View File

@ -4,11 +4,13 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示被动回复文本消息的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Passive_user_reply_message.html#0 </para>
/// </summary>
public class TextMessageReply : WechatApiEvent, WechatApiEvent.Serialization.IXmlSerializable
public class TextMessageReply : WechatApiEvent
{
/// <summary>
/// 获取或设置消息内容。
/// </summary>
[Newtonsoft.Json.JsonProperty("Content")]
[System.Text.Json.Serialization.JsonPropertyName("Content")]
[System.Xml.Serialization.XmlElement("Content")]
public string Content { get; set; } = default!;

View File

@ -5,7 +5,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Customer_Service/Forwarding_of_messages_to_service_center.html </para>
/// <para>REF: https://developers.weixin.qq.com/miniprogram/introduction/custom.html#%E5%B0%86%E6%B6%88%E6%81%AF%E8%BD%AC%E5%8F%91%E5%88%B0%E5%AE%A2%E6%9C%8D </para>
/// </summary>
public class TransferCustomerServiceReply : WechatApiEvent, WechatApiEvent.Serialization.IXmlSerializable
public class TransferCustomerServiceReply : WechatApiEvent
{
public static class Types
{
@ -14,6 +14,8 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <summary>
/// 获取或设置客服账号。
/// </summary>
[Newtonsoft.Json.JsonProperty("KfAccount")]
[System.Text.Json.Serialization.JsonPropertyName("KfAccount")]
[System.Xml.Serialization.XmlElement("KfAccount")]
public string KfAccount { get; set; } = default!;
}
@ -22,6 +24,8 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <summary>
/// 获取或设置转发信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("TransInfo")]
[System.Text.Json.Serialization.JsonPropertyName("TransInfo")]
[System.Xml.Serialization.XmlElement("TransInfo")]
public Types.Transfer? Transfer { get; set; }

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示被动回复视频消息的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Passive_user_reply_message.html#3 </para>
/// </summary>
public class VideoMessageReply : WechatApiEvent, WechatApiEvent.Serialization.IXmlSerializable
public class VideoMessageReply : WechatApiEvent
{
public static class Types
{
@ -13,18 +13,24 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <summary>
/// 获取或设置视频 MediaId。
/// </summary>
[Newtonsoft.Json.JsonProperty("MediaId")]
[System.Text.Json.Serialization.JsonPropertyName("MediaId")]
[System.Xml.Serialization.XmlElement("MediaId")]
public string MediaId { get; set; } = default!;
/// <summary>
/// 获取或设置视频标题。
/// </summary>
[Newtonsoft.Json.JsonProperty("Title")]
[System.Text.Json.Serialization.JsonPropertyName("Title")]
[System.Xml.Serialization.XmlElement("Title")]
public string Title { get; set; } = default!;
/// <summary>
/// 获取或设置视频描述。
/// </summary>
[Newtonsoft.Json.JsonProperty("Description")]
[System.Text.Json.Serialization.JsonPropertyName("Description")]
[System.Xml.Serialization.XmlElement("Description")]
public string Description { get; set; } = default!;
}
@ -33,6 +39,8 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <summary>
/// 获取或设置视频信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("Video")]
[System.Text.Json.Serialization.JsonPropertyName("Video")]
[System.Xml.Serialization.XmlElement("Video")]
public Types.Video Video { get; set; } = default!;

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示被动回复语音消息的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Passive_user_reply_message.html#2 </para>
/// </summary>
public class VoiceMessageReply : WechatApiEvent, WechatApiEvent.Serialization.IXmlSerializable
public class VoiceMessageReply : WechatApiEvent
{
public static class Types
{
@ -13,6 +13,8 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <summary>
/// 获取或设置语音 MediaId。
/// </summary>
[Newtonsoft.Json.JsonProperty("MediaId")]
[System.Text.Json.Serialization.JsonPropertyName("MediaId")]
[System.Xml.Serialization.XmlElement("MediaId")]
public string MediaId { get; set; } = default!;
}
@ -21,6 +23,8 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <summary>
/// 获取或设置语音信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("Voice")]
[System.Text.Json.Serialization.JsonPropertyName("Voice")]
[System.Xml.Serialization.XmlElement("Voice")]
public Types.Voice Voice { get; set; } = default!;

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 EVENT.subscribe_msg_change_event 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Subscription_Messages/api.html#%E4%BA%8B%E4%BB%B6%E6%8E%A8%E9%80%81 </para>
/// </summary>
public class SubscribeMessageChangeEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class SubscribeMessageChangeEvent : WechatApiEvent
{
public static class Types
{
@ -64,11 +64,11 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
get { return this.EventData?.EventList; }
set
{
if (this.EventData == null)
if (this.EventData is null)
{
lock (_lockObj)
{
if (this.EventData == null)
if (this.EventData is null)
{
this.EventData = new Types.EventData();
}

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 EVENT.subscribe_msg_popup_event 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Subscription_Messages/api.html#%E4%BA%8B%E4%BB%B6%E6%8E%A8%E9%80%81 </para>
/// </summary>
public class SubscribeMessagePopupEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class SubscribeMessagePopupEvent : WechatApiEvent
{
public static class Types
{
@ -72,11 +72,11 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
get { return this.EventData?.EventList; }
set
{
if (this.EventData == null)
if (this.EventData is null)
{
lock (_lockObj)
{
if (this.EventData == null)
if (this.EventData is null)
{
this.EventData = new Types.EventData();
}

View File

@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
/// <para>表示 EVENT.subscribe_msg_sent_event 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/offiaccount/Subscription_Messages/api.html#%E4%BA%8B%E4%BB%B6%E6%8E%A8%E9%80%81 </para>
/// </summary>
public class SubscribeMessageSentEvent : WechatApiEvent, WechatApiEvent.Serialization.IJsonSerializable, WechatApiEvent.Serialization.IXmlSerializable
public class SubscribeMessageSentEvent : WechatApiEvent
{
public static class Types
{
@ -80,11 +80,11 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
get { return this.EventData?.EventList; }
set
{
if (this.EventData == null)
if (this.EventData is null)
{
lock (_lockObj)
{
if (this.EventData == null)
if (this.EventData is null)
{
this.EventData = new Types.EventData();
}

View File

@ -1,10 +1,10 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Events
namespace SKIT.FlurlHttpClient.Wechat.Api.Events
{
/// <summary>
/// <para>表示 EVENT.betaapp_authorization_apply_event 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/2.0/api/verify_beta_Mini_Programs/getmpadminauth.html </para>
/// </summary>
public class BetaAppAuthorizationApplyEvent : WechatApiEvent, WechatApiEvent.Serialization.IXmlSerializable
public class BetaAppAuthorizationApplyEvent : WechatApiEvent
{
public static class Types
{
@ -13,36 +13,48 @@
/// <summary>
/// 获取或设置小程序的 AppId。
/// </summary>
[Newtonsoft.Json.JsonProperty("appid")]
[System.Text.Json.Serialization.JsonPropertyName("appid")]
[System.Xml.Serialization.XmlElement("appid")]
public string MiniProgramAppId { get; set; } = default!;
/// <summary>
/// 获取或设置公众号的 AppId。
/// </summary>
[Newtonsoft.Json.JsonProperty("mp_appid")]
[System.Text.Json.Serialization.JsonPropertyName("mp_appid")]
[System.Xml.Serialization.XmlElement("mp_appid")]
public string MediaPlatformAppId { get; set; } = default!;
/// <summary>
/// 获取或设置操作时间字符串格式yyyy-MM-dd HH:mm
/// </summary>
[Newtonsoft.Json.JsonProperty("operation_time")]
[System.Text.Json.Serialization.JsonPropertyName("operation_time")]
[System.Xml.Serialization.XmlElement("operation_time")]
public string OperateTimeString { get; set; } = default!;
/// <summary>
/// 获取或设置错误码。
/// </summary>
[Newtonsoft.Json.JsonProperty("status")]
[System.Text.Json.Serialization.JsonPropertyName("status")]
[System.Xml.Serialization.XmlElement("status")]
public int ErrorCode { get; set; }
/// <summary>
/// 获取或设置错误信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("msg")]
[System.Text.Json.Serialization.JsonPropertyName("msg")]
[System.Xml.Serialization.XmlElement("msg", IsNullable = true)]
public string? ErrorMessage { get; set; }
/// <summary>
/// 获取或设置授权成功后生成的 Ticket。
/// </summary>
[Newtonsoft.Json.JsonProperty("ticket")]
[System.Text.Json.Serialization.JsonPropertyName("ticket")]
[System.Xml.Serialization.XmlElement("ticket", IsNullable = true)]
public string? Ticket { get; set; }
}
@ -51,6 +63,8 @@
/// <summary>
/// 获取或设置事件数据。
/// </summary>
[Newtonsoft.Json.JsonProperty("ApplyAuthorizationInfoNoitfy")]
[System.Text.Json.Serialization.JsonPropertyName("ApplyAuthorizationInfoNoitfy")]
[System.Xml.Serialization.XmlElement("ApplyAuthorizationInfoNoitfy")]
public Types.EventData EventData { get; set; } = default!;
}

View File

@ -1,10 +1,10 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Events
namespace SKIT.FlurlHttpClient.Wechat.Api.Events
{
/// <summary>
/// <para>表示 EVENT.betaapp_verify_apply_event 事件的数据。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/2.0/api/verify_beta_Mini_Programs/mpverifybetaweapp.html </para>
/// </summary>
public class BetaAppVerifyApplyEvent : WechatApiEvent, WechatApiEvent.Serialization.IXmlSerializable
public class BetaAppVerifyApplyEvent : WechatApiEvent
{
public static class Types
{
@ -13,30 +13,40 @@
/// <summary>
/// 获取或设置小程序的 AppId。
/// </summary>
[Newtonsoft.Json.JsonProperty("appid")]
[System.Text.Json.Serialization.JsonPropertyName("appid")]
[System.Xml.Serialization.XmlElement("appid")]
public string MiniProgramAppId { get; set; } = default!;
/// <summary>
/// 获取或设置公众号的 AppId。
/// </summary>
[Newtonsoft.Json.JsonProperty("mp_appid")]
[System.Text.Json.Serialization.JsonPropertyName("mp_appid")]
[System.Xml.Serialization.XmlElement("mp_appid")]
public string MediaPlatformAppId { get; set; } = default!;
/// <summary>
/// 获取或设置操作时间字符串格式yyyy-MM-dd HH:mm
/// </summary>
[Newtonsoft.Json.JsonProperty("operation_time")]
[System.Text.Json.Serialization.JsonPropertyName("operation_time")]
[System.Xml.Serialization.XmlElement("operation_time")]
public string OperateTimeString { get; set; } = default!;
/// <summary>
/// 获取或设置错误码。
/// </summary>
[Newtonsoft.Json.JsonProperty("status")]
[System.Text.Json.Serialization.JsonPropertyName("status")]
[System.Xml.Serialization.XmlElement("status")]
public int ErrorCode { get; set; }
/// <summary>
/// 获取或设置错误信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("msg")]
[System.Text.Json.Serialization.JsonPropertyName("msg")]
[System.Xml.Serialization.XmlElement("msg", IsNullable = true)]
public string? ErrorMessage { get; set; }
}
@ -45,6 +55,8 @@
/// <summary>
/// 获取或设置事件数据。
/// </summary>
[Newtonsoft.Json.JsonProperty("ApplyAuthorizationInfoNoitfy")]
[System.Text.Json.Serialization.JsonPropertyName("ApplyAuthorizationInfoNoitfy")]
[System.Xml.Serialization.XmlElement("ApplyAuthorizationInfoNoitfy")]
public Types.EventData EventData { get; set; } = default!;
}

Some files were not shown because too many files have changed in this diff Show More