diff --git a/docs/WechatApi/Basic_ModelDefinition.md b/docs/WechatApi/Basic_ModelDefinition.md
index 399f0505..98032cb4 100644
--- a/docs/WechatApi/Basic_ModelDefinition.md
+++ b/docs/WechatApi/Basic_ModelDefinition.md
@@ -162,6 +162,7 @@
| :-: | :----------------: | :--: |
| √ | 视频号小店开放接口 | |
| √ | 视频号助手开放接口 | |
+| √ | 接口管理 | |
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Events/WxaAuth/NotifyThirdPartyWxaAuthEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Events/WxaAuth/NotifyThirdPartyWxaAuthEvent.cs
new file mode 100644
index 00000000..77f27f33
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Events/WxaAuth/NotifyThirdPartyWxaAuthEvent.cs
@@ -0,0 +1,69 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Events
+{
+ ///
+ /// 表示 INFO.notify_3rd_wxa_auth 事件的数据。
+ /// https://developers.weixin.qq.com/doc/oplatform/openApi/OpenApiDoc/miniprogram-management/weapp-wxverify/secwxaapi_wxaauth.html
+ ///
+ public class NotifyThirdPartyWxaAuthEvent : WechatApiEvent, WechatApiEvent.Serialization.IXmlSerializable
+ {
+ public static class Types
+ {
+ public class DispatchInfo
+ {
+ ///
+ /// 获取或设置审核机构名称。
+ ///
+ [System.Xml.Serialization.XmlElement("provider")]
+ public string Provider { get; set; } = default!;
+
+ ///
+ /// 获取或设置审核机构联系方式。
+ ///
+ [System.Xml.Serialization.XmlElement("contact")]
+ public string Contact { get; set; } = default!;
+
+ ///
+ /// 获取或设置派单时间戳。
+ ///
+ [System.Xml.Serialization.XmlElement("dispatch_time")]
+ public long DispatchTimestamp { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置小程序 AppId。
+ ///
+ [System.Xml.Serialization.XmlElement("appid")]
+ public string AuthorizerAppId { get; set; } = default!;
+
+ ///
+ /// 获取或设置认证任务 ID。
+ ///
+ [System.Xml.Serialization.XmlElement("taskid")]
+ public string TaskId { get; set; } = default!;
+
+ ///
+ /// 获取或设置认证任务状态。
+ ///
+ [System.Xml.Serialization.XmlElement("task_status")]
+ public int TaskStatus { get; set; }
+
+ ///
+ /// 获取或设置申请单状态。
+ ///
+ [System.Xml.Serialization.XmlElement("apply_status")]
+ public int ApplyStatus { get; set; }
+
+ ///
+ /// 获取或设置提醒消息内容。
+ ///
+ [System.Xml.Serialization.XmlElement("message", IsNullable = true)]
+ public string? Message { get; set; }
+
+ ///
+ /// 获取或设置派单信息。
+ ///
+ [System.Xml.Serialization.XmlElement("dispatch_info", IsNullable = true)]
+ public Types.DispatchInfo? DispatchInfo { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Events/WxaAuth/NotifyThirdPartyWxaVerifyEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Events/WxaAuth/NotifyThirdPartyWxaVerifyEvent.cs
new file mode 100644
index 00000000..23086fa2
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Events/WxaAuth/NotifyThirdPartyWxaVerifyEvent.cs
@@ -0,0 +1,27 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Events
+{
+ ///
+ /// 表示 INFO.notify_3rd_wxa_wxverify 事件的数据。
+ /// https://developers.weixin.qq.com/doc/oplatform/openApi/OpenApiDoc/miniprogram-management/weapp-wxverify/secwxaapi_wxaauth.html
+ ///
+ public class NotifyThirdPartyWxaVerifyEvent : WechatApiEvent, WechatApiEvent.Serialization.IXmlSerializable
+ {
+ ///
+ /// 获取或设置小程序 AppId。
+ ///
+ [System.Xml.Serialization.XmlElement("appid")]
+ public string AuthorizerAppId { get; set; } = default!;
+
+ ///
+ /// 获取或设置认证过期时间戳。
+ ///
+ [System.Xml.Serialization.XmlElement("expired")]
+ public long ExpireTimestamp { get; set; }
+
+ ///
+ /// 获取或设置提醒消息内容。
+ ///
+ [System.Xml.Serialization.XmlElement("message", IsNullable = true)]
+ public string? Message { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteWxaSecExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteWxaSecExtensions.cs
index 9e78eb03..fc509163 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteWxaSecExtensions.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteWxaSecExtensions.cs
@@ -9,6 +9,109 @@ namespace SKIT.FlurlHttpClient.Wechat.Api
{
public static class WechatApiClientExecuteWxaSecExtensions
{
+ #region Auth
+ ///
+ /// 异步调用 [POST] /wxa/sec/wxaauth 接口。
+ /// REF: https://developers.weixin.qq.com/doc/oplatform/openApi/OpenApiDoc/miniprogram-management/weapp-wxverify/secwxaapi_wxaauth.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteWxaSecWxaAuthAsync(this WechatApiClient client, Models.WxaSecWxaAuthRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateRequest(request, HttpMethod.Post, "wxa", "sec", "wxaauth")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /wxa/sec/reauth 接口。
+ /// REF: https://developers.weixin.qq.com/doc/oplatform/openApi/OpenApiDoc/miniprogram-management/weapp-wxverify/secwxaapi_reauth.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteWxaSecReauthAsync(this WechatApiClient client, Models.WxaSecReauthRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateRequest(request, HttpMethod.Post, "wxa", "sec", "reauth")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /wxa/sec/queryauth 接口。
+ /// REF: https://developers.weixin.qq.com/doc/oplatform/openApi/OpenApiDoc/miniprogram-management/weapp-wxverify/secwxaapi_queryauth.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteWxaSecQueryAuthAsync(this WechatApiClient client, Models.WxaSecQueryAuthRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateRequest(request, HttpMethod.Post, "wxa", "sec", "queryauth")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /wxa/sec/uploadauthmaterial 接口。
+ /// REF: https://developers.weixin.qq.com/doc/oplatform/openApi/OpenApiDoc/miniprogram-management/weapp-wxverify/secwxaapi_uploadauthmaterial.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteWxaSecUploadAuthMaterialAsync(this WechatApiClient client, Models.WxaSecUploadAuthMaterialRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateRequest(request, HttpMethod.Post, "wxa", "sec", "uploadauthmaterial")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ using var httpContent = Utilities.FileHttpContentBuilder.Build(fileName: "media.png", fileBytes: request.FileBytes, fileContentType: "image/png", formDataName: "media");
+ return await client.SendRequestAsync(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /wxa/sec/authidentitytree 接口。
+ /// REF: https://developers.weixin.qq.com/doc/oplatform/openApi/OpenApiDoc/miniprogram-management/weapp-wxverify/secwxaapi_authidentitytree.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteWxaSecAuthIdentityTreeAsync(this WechatApiClient client, Models.WxaSecAuthIdentityTreeRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateRequest(request, HttpMethod.Post, "wxa", "sec", "authidentitytree")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+ #endregion
+
#region Order
///
/// 异步调用 [POST] /wxa/sec/order/upload_shipping_info 接口。
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaSec/Auth/WxaSecAuthIdentityTreeRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaSec/Auth/WxaSecAuthIdentityTreeRequest.cs
new file mode 100644
index 00000000..350c8113
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaSec/Auth/WxaSecAuthIdentityTreeRequest.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /wxa/sec/authidentitytree 接口的请求。
+ ///
+ public class WxaSecAuthIdentityTreeRequest : WechatApiRequest, IInferable
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaSec/Auth/WxaSecAuthIdentityTreeResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaSec/Auth/WxaSecAuthIdentityTreeResponse.cs
new file mode 100644
index 00000000..0f6f57f7
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaSec/Auth/WxaSecAuthIdentityTreeResponse.cs
@@ -0,0 +1,79 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /wxa/sec/authidentitytree 接口的响应。
+ ///
+ public class WxaSecAuthIdentityTreeResponse : WechatApiResponse
+ {
+ public static class Types
+ {
+ public class IdentityTreeNode
+ {
+ public static class Types
+ {
+ public class RootInfo
+ {
+ ///
+ /// 获取或设置类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("type")]
+ [System.Text.Json.Serialization.JsonPropertyName("type")]
+ public int Type { get; set; }
+ }
+
+ public class LeafInfo
+ {
+ ///
+ /// 获取或设置需求。
+ ///
+ [Newtonsoft.Json.JsonProperty("requirement")]
+ [System.Text.Json.Serialization.JsonPropertyName("requirement")]
+ public string? Requirement { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置节点 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("node_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("node_id")]
+ public int NodeId { get; set; }
+
+ ///
+ /// 获取或设置节点名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("name")]
+ [System.Text.Json.Serialization.JsonPropertyName("name")]
+ public string NodeName { get; set; } = default!;
+
+ ///
+ /// 获取或设置子节点列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("node_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("node_list")]
+ public IdentityTreeNode[]? NodeList { get; set; }
+
+ ///
+ /// 获取或设置根节点信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("root_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("root_info")]
+ public Types.RootInfo? RootInfo { get; set; }
+
+ ///
+ /// 获取或设置叶子节点信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("leaf_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("leaf_info")]
+ public Types.LeafInfo? LeafInfo { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置职业树节点列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("identity_tree_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("identity_tree_list")]
+ public Types.IdentityTreeNode[] IdentityTreeList { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaSec/Auth/WxaSecQueryAuthRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaSec/Auth/WxaSecQueryAuthRequest.cs
new file mode 100644
index 00000000..f1a32eee
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaSec/Auth/WxaSecQueryAuthRequest.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /wxa/sec/queryauth 接口的请求。
+ ///
+ public class WxaSecQueryAuthRequest : WechatApiRequest, IInferable
+ {
+ ///
+ /// 获取或设置认证任务 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("taskid")]
+ [System.Text.Json.Serialization.JsonPropertyName("taskid")]
+ public string TaskId { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaSec/Auth/WxaSecQueryAuthResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaSec/Auth/WxaSecQueryAuthResponse.cs
new file mode 100644
index 00000000..ad8b4c6d
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaSec/Auth/WxaSecQueryAuthResponse.cs
@@ -0,0 +1,43 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /wxa/sec/queryauth 接口的响应。
+ ///
+ public class WxaSecQueryAuthResponse : WechatApiResponse
+ {
+ ///
+ /// 获取或设置认证任务状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("task_status")]
+ [System.Text.Json.Serialization.JsonPropertyName("task_status")]
+ public int TaskStatus { get; set; }
+
+ ///
+ /// 获取或设置审核单状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("apply_status")]
+ [System.Text.Json.Serialization.JsonPropertyName("apply_status")]
+ public int ApplyStatus { get; set; }
+
+ ///
+ /// 获取或设置小程序 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("appid")]
+ public string AppId { get; set; } = default!;
+
+ ///
+ /// 获取或设置打回重填原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("refill_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("refill_reason")]
+ public string? RefillReason { get; set; }
+
+ ///
+ /// 获取或设置审核失败原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("fail_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("fail_reason")]
+ public string? FailReason { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaSec/Auth/WxaSecReauthRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaSec/Auth/WxaSecReauthRequest.cs
new file mode 100644
index 00000000..2e2d8f8b
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaSec/Auth/WxaSecReauthRequest.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /wxa/sec/reauth 接口的请求。
+ ///
+ public class WxaSecReauthRequest : WxaSecWxaAuthRequest, IInferable
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaSec/Auth/WxaSecReauthResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaSec/Auth/WxaSecReauthResponse.cs
new file mode 100644
index 00000000..e0fc0246
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaSec/Auth/WxaSecReauthResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /wxa/sec/reauth 接口的响应。
+ ///
+ public class WxaSecReauthResponse : WxaSecWxaAuthResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaSec/Auth/WxaSecUploadAuthMaterialRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaSec/Auth/WxaSecUploadAuthMaterialRequest.cs
new file mode 100644
index 00000000..9650fc79
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaSec/Auth/WxaSecUploadAuthMaterialRequest.cs
@@ -0,0 +1,17 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /wxa/sec/uploadauthmaterial 接口的请求。
+ ///
+ public class WxaSecUploadAuthMaterialRequest : WechatApiRequest, IInferable
+ {
+ ///
+ /// 获取或设置文件字节数组。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public byte[] FileBytes { get; set; } = Array.Empty();
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaSec/Auth/WxaSecUploadAuthMaterialResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaSec/Auth/WxaSecUploadAuthMaterialResponse.cs
new file mode 100644
index 00000000..d2569070
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaSec/Auth/WxaSecUploadAuthMaterialResponse.cs
@@ -0,0 +1,22 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /wxa/sec/uploadauthmaterial 接口的响应。
+ ///
+ public class WxaSecUploadAuthMaterialResponse : WechatApiResponse
+ {
+ ///
+ /// 获取或设置类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("type")]
+ [System.Text.Json.Serialization.JsonPropertyName("type")]
+ public string? Type { get; set; }
+
+ ///
+ /// 获取或设置 MediaId。
+ ///
+ [Newtonsoft.Json.JsonProperty("mediaid")]
+ [System.Text.Json.Serialization.JsonPropertyName("mediaid")]
+ public string MediaId { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaSec/Auth/WxaSecWxaAuthRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaSec/Auth/WxaSecWxaAuthRequest.cs
new file mode 100644
index 00000000..2003f912
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaSec/Auth/WxaSecWxaAuthRequest.cs
@@ -0,0 +1,286 @@
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /wxa/sec/wxaauth 接口的请求。
+ ///
+ public class WxaSecWxaAuthRequest : WechatApiRequest, IInferable
+ {
+ public static class Types
+ {
+ public class AuthData
+ {
+ public static class Types
+ {
+ public class Contact
+ {
+ ///
+ /// 获取或设置认证联系人姓名。
+ ///
+ [Newtonsoft.Json.JsonProperty("name")]
+ [System.Text.Json.Serialization.JsonPropertyName("name")]
+ public string Name { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置认证联系人邮箱。
+ ///
+ [Newtonsoft.Json.JsonProperty("email")]
+ [System.Text.Json.Serialization.JsonPropertyName("email")]
+ public string Email { get; set; } = string.Empty;
+ }
+
+ public class Invoice
+ {
+ public static class Types
+ {
+ public class ElectronicInfo
+ {
+ ///
+ /// 获取或设置纳税识别号。
+ ///
+ [Newtonsoft.Json.JsonProperty("id")]
+ [System.Text.Json.Serialization.JsonPropertyName("id")]
+ public string TaxNumber { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置发票备注。
+ ///
+ [Newtonsoft.Json.JsonProperty("desc")]
+ [System.Text.Json.Serialization.JsonPropertyName("desc")]
+ public string? Description { get; set; }
+ }
+
+ public class VATInfo
+ {
+ ///
+ /// 获取或设置纳税识别号。
+ ///
+ [Newtonsoft.Json.JsonProperty("id")]
+ [System.Text.Json.Serialization.JsonPropertyName("id")]
+ public string TaxNumber { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置企业电话。
+ ///
+ [Newtonsoft.Json.JsonProperty("enterprise_phone")]
+ [System.Text.Json.Serialization.JsonPropertyName("enterprise_phone")]
+ public string EnterprisePhoneNumber { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置企业注册地址。
+ ///
+ [Newtonsoft.Json.JsonProperty("enterprise_address")]
+ [System.Text.Json.Serialization.JsonPropertyName("enterprise_address")]
+ public string EnterpriseAddress { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置企业开户银行。
+ ///
+ [Newtonsoft.Json.JsonProperty("bank_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("bank_name")]
+ public string BankName { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置企业银行账号。
+ ///
+ [Newtonsoft.Json.JsonProperty("bank_account")]
+ [System.Text.Json.Serialization.JsonPropertyName("bank_account")]
+ public string BankAccount { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置邮寄地址邮编。
+ ///
+ [Newtonsoft.Json.JsonProperty("mailing_address")]
+ [System.Text.Json.Serialization.JsonPropertyName("mailing_address")]
+ public string? MailingPostcode { get; set; }
+
+ ///
+ /// 获取或设置邮寄地址省份。
+ ///
+ [Newtonsoft.Json.JsonProperty("province")]
+ [System.Text.Json.Serialization.JsonPropertyName("province")]
+ public string? MailingProvince { get; set; }
+
+ ///
+ /// 获取或设置邮寄地址城市。
+ ///
+ [Newtonsoft.Json.JsonProperty("city")]
+ [System.Text.Json.Serialization.JsonPropertyName("city")]
+ public string? MailingCity { get; set; }
+
+ ///
+ /// 获取或设置邮寄地址区县。
+ ///
+ [Newtonsoft.Json.JsonProperty("district")]
+ [System.Text.Json.Serialization.JsonPropertyName("district")]
+ public string? MailingDistrict { get; set; }
+
+ ///
+ /// 获取或设置邮寄地址。
+ ///
+ [Newtonsoft.Json.JsonProperty("address")]
+ [System.Text.Json.Serialization.JsonPropertyName("address")]
+ public string? MailingAddress { get; set; }
+
+ ///
+ /// 获取或设置邮寄联系人。
+ ///
+ [Newtonsoft.Json.JsonProperty("name")]
+ [System.Text.Json.Serialization.JsonPropertyName("name")]
+ public string? MailingContactName { get; set; }
+
+ ///
+ /// 获取或设置邮寄联系电话。
+ ///
+ [Newtonsoft.Json.JsonProperty("phone")]
+ [System.Text.Json.Serialization.JsonPropertyName("phone")]
+ public string? MailingContactPhoneNumber { get; set; }
+
+ ///
+ /// 获取或设置发票备注。
+ ///
+ [Newtonsoft.Json.JsonProperty("desc")]
+ [System.Text.Json.Serialization.JsonPropertyName("desc")]
+ public string? Description { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置发票类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("invoice_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("invoice_type")]
+ public int InvoiceType { get; set; }
+
+ ///
+ /// 获取或设置发票抬头。
+ ///
+ [Newtonsoft.Json.JsonProperty("invoice_title")]
+ [System.Text.Json.Serialization.JsonPropertyName("invoice_title")]
+ public string? InvoiceTitle { get; set; }
+
+ ///
+ /// 获取或设置电子发票开票信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("electronic")]
+ [System.Text.Json.Serialization.JsonPropertyName("electronic")]
+ public Types.ElectronicInfo? ElectronicInfo { get; set; }
+
+ ///
+ /// 获取或设置增值税专票开票信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("vat")]
+ [System.Text.Json.Serialization.JsonPropertyName("vat")]
+ public Types.VATInfo? VATInfo { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置客户类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("customer_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("customer_type")]
+ public int CustomerType { get; set; }
+
+ ///
+ /// 获取或设置认证任务 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("taskid")]
+ [System.Text.Json.Serialization.JsonPropertyName("taskid")]
+ public string? TaskId { get; set; }
+
+ ///
+ /// 获取或设置联系人信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("contact_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("contact_info")]
+ public Types.Contact Contact { get; set; } = new Types.Contact();
+
+ ///
+ /// 获取或设置主体资质材料 MediaId。
+ ///
+ [Newtonsoft.Json.JsonProperty("qualification")]
+ [System.Text.Json.Serialization.JsonPropertyName("qualification")]
+ public string? QualificationMediaId { get; set; }
+
+ ///
+ /// 获取或设置主体资质其他材料 MediaId 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("qualification_other")]
+ [System.Text.Json.Serialization.JsonPropertyName("qualification_other")]
+ public IList? QualificationOtherMediaIdList { get; set; }
+
+ ///
+ /// 获取或设置小程序账号名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("account_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("account_name")]
+ public string AccountName { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置小程序账号名称命名类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("account_name_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("account_name_type")]
+ public int AccountNameType { get; set; }
+
+ ///
+ /// 获取或设置名称命中关键词补充材料 MediaId 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("account_supplemental")]
+ [System.Text.Json.Serialization.JsonPropertyName("account_supplemental")]
+ public IList? AccountSupplementalMediaIdList { get; set; }
+
+ ///
+ /// 获取或设置支付方式。
+ ///
+ [Newtonsoft.Json.JsonProperty("pay_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("pay_type")]
+ public int PayType { get; set; }
+
+ ///
+ /// 获取或设置发票信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("invoice_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("invoice_info")]
+ public Types.Invoice? Invoice { get; set; }
+
+ ///
+ /// 获取或设置要认证的身份。
+ ///
+ [Newtonsoft.Json.JsonProperty("auth_identification")]
+ [System.Text.Json.Serialization.JsonPropertyName("auth_identification")]
+ public string? AuthIdentification { get; set; }
+
+ ///
+ /// 获取或设置身份证明材料 MediaId 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("auth_ident_material")]
+ [System.Text.Json.Serialization.JsonPropertyName("auth_ident_material")]
+ public IList? AuthIdentificationMaterialIdList { get; set; }
+
+ ///
+ /// 获取或设置第三方联系电话。
+ ///
+ [Newtonsoft.Json.JsonProperty("third_party_phone")]
+ [System.Text.Json.Serialization.JsonPropertyName("third_party_phone")]
+ public string? ThirdPartyPhoneNumber { get; set; }
+
+ ///
+ /// 获取或设置服务市场 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("service_appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("service_appid")]
+ public string? ServiceAppId { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置认证信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("auth_data")]
+ [System.Text.Json.Serialization.JsonPropertyName("auth_data")]
+ public Types.AuthData AuthData { get; set; } = new Types.AuthData();
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaSec/Auth/WxaSecWxaAuthResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaSec/Auth/WxaSecWxaAuthResponse.cs
new file mode 100644
index 00000000..35bd8eaa
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/WxaSec/Auth/WxaSecWxaAuthResponse.cs
@@ -0,0 +1,22 @@
+namespace SKIT.FlurlHttpClient.Wechat.Api.Models
+{
+ ///
+ /// 表示 [POST] /wxa/sec/wxaauth 接口的响应。
+ ///
+ public class WxaSecWxaAuthResponse : WechatApiResponse
+ {
+ ///
+ /// 获取或设置认证任务 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("taskid")]
+ [System.Text.Json.Serialization.JsonPropertyName("taskid")]
+ public string TaskId { get; set; } = default!;
+
+ ///
+ /// 获取或设置授权链接。
+ ///
+ [Newtonsoft.Json.JsonProperty("auth_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("auth_url")]
+ public string? AuthUrl { get; set; }
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/EventSamples/WxaAuth/NotifyThirdPartyWxaAuthEvent.xml b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/EventSamples/WxaAuth/NotifyThirdPartyWxaAuthEvent.xml
new file mode 100644
index 00000000..edee42a5
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/EventSamples/WxaAuth/NotifyThirdPartyWxaAuthEvent.xml
@@ -0,0 +1,15 @@
+
+
+ 1700634212
+
+
+ 0
+
+
+ 0
+
+
+
+ 1700619300
+
+
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/EventSamples/WxaAuth/NotifyThirdPartyWxaVerifyEvent.xml b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/EventSamples/WxaAuth/NotifyThirdPartyWxaVerifyEvent.xml
new file mode 100644
index 00000000..05e6306c
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/EventSamples/WxaAuth/NotifyThirdPartyWxaVerifyEvent.xml
@@ -0,0 +1,12 @@
+
+
+ 1700634212
+
+
+ 1704162245
+
+
+
+
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WxaSec/Auth/WxaSecAuthIdentityTreeResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WxaSec/Auth/WxaSecAuthIdentityTreeResponse.json
new file mode 100644
index 00000000..a76d3974
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WxaSec/Auth/WxaSecAuthIdentityTreeResponse.json
@@ -0,0 +1,54 @@
+{
+ "identity_tree_list": [
+ {
+ "name": "职业身份认证",
+ "node_id": 1,
+ "node_list": [
+ {
+ "name": "娱乐",
+ "node_id": 2,
+ "node_list": [
+ {
+ "name": "影视",
+ "node_id": 3,
+ "node_list": [
+ {
+ "leaf_info": {
+ "requirement": "认证需上传本人有效身份证件,同时提供以下任一材料1、获得导演相关职称..."
+ },
+ "name": "导演",
+ "node_id": 4
+ },
+ {
+ "leaf_info": {
+ "requirement": "认证需上传本人有效身份证件,同时提供以下任一材料..."
+ },
+ "name": "编导",
+ "node_id": 5
+ }
+ ]
+ },
+ {
+ "name": "音乐",
+ "node_id": 17,
+ "node_list": [
+ {
+ "leaf_info": {
+ "requirement": "认证需上传本人有效身份证件,同时提供以下任一材料1、唱片公司或演艺公司签约歌手..."
+ },
+ "name": "歌手",
+ "node_id": 18
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "root_info": {
+ "type": 1
+ }
+ }
+ ],
+ "errcode": 0,
+ "errmsg": ""
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WxaSec/Auth/WxaSecQueryAuthRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WxaSec/Auth/WxaSecQueryAuthRequest.json
new file mode 100644
index 00000000..92408ace
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WxaSec/Auth/WxaSecQueryAuthRequest.json
@@ -0,0 +1,3 @@
+{
+ "taskid": "xxxx"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WxaSec/Auth/WxaSecQueryAuthResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WxaSec/Auth/WxaSecQueryAuthResponse.json
new file mode 100644
index 00000000..33b02c8c
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WxaSec/Auth/WxaSecQueryAuthResponse.json
@@ -0,0 +1,7 @@
+{
+ "errcode": 0,
+ "errmsg": "",
+ "task_status": 15,
+ "apply_status": 0,
+ "appid": "wx123123123123123"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WxaSec/Auth/WxaSecReauthRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WxaSec/Auth/WxaSecReauthRequest.json
new file mode 100644
index 00000000..49bcc7d8
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WxaSec/Auth/WxaSecReauthRequest.json
@@ -0,0 +1,42 @@
+{
+
+ "auth_data": {
+ "taskid": "xxxxxx",
+ "account_name": "",
+ "account_name_type": 0,
+ "account_supplemental": [ "", "" ],
+ "auth_ident_material": [ "", "" ],
+ "auth_identification": "",
+ "contact_info": {
+ "email": "认证联系人电子信箱",
+ "name": "认证联系人姓名"
+ },
+ "invoice_info": {
+ "electronic": {
+ "desc": "电子发票信息-发票备注(选填)",
+ "id": "电子发票信息-纳税识别号(15位、17、18或20位)"
+ },
+ "invoice_type": 0,
+ "vat": {
+ "address": "增值税专票-街道地址(xx省xx市xx区xxxx)",
+ "bank_account": "增值税专票-企业银行账号",
+ "bank_name": "增值税专票-企业开户银行",
+ "enterprise_address": "增值税专票-企业注册地址",
+ "enterprise_phone": "增值税专票-企业电话",
+ "id": "增值税专票-纳税识别号(15位、17、18或20位)",
+ "mailing_address": "增值税专票-发票邮寄地址邮编",
+ "name": "增值税专票-联系人",
+ "phone": "增值税专票-联系电话",
+ "province": "广东省",
+ "city": "广州市",
+ "district": "海珠区",
+ "desc": "发票备注,选填"
+
+ }
+ },
+ "pay_type": 0,
+ "qualification": "",
+ "qualification_other": [ "", "" ],
+ "third_party_phone": ""
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WxaSec/Auth/WxaSecReauthResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WxaSec/Auth/WxaSecReauthResponse.json
new file mode 100644
index 00000000..1acfe081
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WxaSec/Auth/WxaSecReauthResponse.json
@@ -0,0 +1,5 @@
+{
+ "errcode": 0,
+ "errmsg": "",
+ "taskid": ""
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WxaSec/Auth/WxaSecUploadAuthMaterialResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WxaSec/Auth/WxaSecUploadAuthMaterialResponse.json
new file mode 100644
index 00000000..949a0c02
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WxaSec/Auth/WxaSecUploadAuthMaterialResponse.json
@@ -0,0 +1,5 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "mediaid": "xxxxxxxxxxxxxxxxx"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WxaSec/Auth/WxaSecWxaAuthRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WxaSec/Auth/WxaSecWxaAuthRequest.json
new file mode 100644
index 00000000..0e59db15
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WxaSec/Auth/WxaSecWxaAuthRequest.json
@@ -0,0 +1,41 @@
+{
+ "auth_data": {
+ "account_name": "",
+ "account_name_type": 0,
+ "account_supplemental": [ "", "" ],
+ "auth_ident_material": [ "", "" ],
+ "auth_identification": "",
+ "customer_type": 15,
+ "contact_info": {
+ "email": "认证联系人电子信箱",
+ "name": "认证联系人姓名"
+ },
+ "invoice_info": {
+ "electronic": {
+ "desc": "电子发票信息-发票备注(选填)",
+ "id": "电子发票信息-纳税识别号(15位、17、18或20位)"
+ },
+ "invoice_type": 0,
+ "vat": {
+ "address": "增值税专票-街道地址(xx省xx市xx区xxxx)",
+ "bank_account": "增值税专票-企业银行账号",
+ "bank_name": "增值税专票-企业开户银行",
+ "enterprise_address": "增值税专票-企业注册地址",
+ "enterprise_phone": "增值税专票-企业电话",
+ "id": "增值税专票-纳税识别号(15位、17、18或20位)",
+ "mailing_address": "增值税专票-发票邮寄地址邮编",
+ "name": "增值税专票-联系人",
+ "phone": "增值税专票-联系电话",
+ "province": "广东省",
+ "city": "广州市",
+ "district": "海珠区",
+ "desc": "发票备注,选填"
+ }
+ },
+ "pay_type": 0,
+ "qualification": "",
+ "qualification_other": [ "", "" ],
+ "service_appid": "",
+ "third_party_phone": ""
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WxaSec/Auth/WxaSecWxaAuthResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WxaSec/Auth/WxaSecWxaAuthResponse.json
new file mode 100644
index 00000000..4835a6be
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/WxaSec/Auth/WxaSecWxaAuthResponse.json
@@ -0,0 +1,5 @@
+{
+ "errcode": 0,
+ "errmsg": "",
+ "taskid": ""
+}