diff --git a/docs/WechatTenpayV3/Basic_ModelDefinition.md b/docs/WechatTenpayV3/Basic_ModelDefinition.md
index 80473643..986be92e 100644
--- a/docs/WechatTenpayV3/Basic_ModelDefinition.md
+++ b/docs/WechatTenpayV3/Basic_ModelDefinition.md
@@ -70,6 +70,7 @@
| √ | 商户管理:商户开户意愿确认 | 合作伙伴 | |
| √ | 商户管理:商户平台处置通知 | 合作伙伴 | |
| √ | 商户管理:不活跃商户身份核实 | 合作伙伴 | |
+| √ | 商户管理:商户管理记录 | 合作伙伴 | |
| √ | 其他:消费卡 | 直连商户 & 合作伙伴 | |
| √ | 其他:代扣服务切卡组件 | 直连商户 & 合作伙伴 | |
| √ | 其他:图片上传(营销专用) | 直连商户 & 合作伙伴 | |
@@ -1524,6 +1525,24 @@
- 查询不活跃商户身份核实结果:`GetComplianceInactiveMerchantIdentityVerificationByVerificationId`
+ - 商户管理记录
+
+ - 分页查询子商户名下的商户管理记录:`QueryMerchantManageRecords`
+
+ - 查询子商户下指定商户管理记录:`GetMerchantManageRecord`
+
+ - 对指定商户管理记录提交资料:`CreateMerchantManageRecordSubmission`
+
+ - 上传商户提交资料文件:`UploadMerchantManageSubmissionFile`
+
+ - 分页查询子商户名下的交易拦截记录:`QueryTransactionBlockRecords`
+
+ - 查询子商户交易拦截记录详情:`GetTransactionBlockRecord`
+
+ - 发起交易拦截申诉:`CreateTransactionBlockSubmission`
+
+ - 查询交易拦截申诉详情:`GetTransactionBlockSubmission`
+
- 扩展工具
- 电商订单实名校验
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantManageExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantManageExtensions.cs
new file mode 100644
index 00000000..7d19e2c3
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantManageExtensions.cs
@@ -0,0 +1,117 @@
+using System;
+using System.Net.Http;
+using System.Threading;
+using System.Threading.Tasks;
+using Flurl.Http;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
+{
+ using SKIT.FlurlHttpClient.Primitives;
+
+ public static class WechatTenpayClientExecuteMerchantManageExtensions
+ {
+ ///
+ /// 异步调用 [GET] /mch-manage/mch-manage-records/sub-mchid/{sub_mchid} 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteQueryMerchantManageRecordsAsync(this WechatTenpayClient client, Models.QueryMerchantManageRecordsRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Get, "mch-manage", "mch-manage-records", "sub-mchid", request.SubMerchantId)
+ .SetQueryParam("manage_record_type", request.ManageRecordType)
+ .SetQueryParam("manage_record_state", request.ManageRecordState)
+ .SetQueryParam("limit", request.Limit)
+ .SetQueryParam("offset", request.Offset);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [GET] /mch-manage/mch-manage-records/{manage_record_id} 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteGetMerchantManageRecordAsync(this WechatTenpayClient client, Models.GetMerchantManageRecordRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Get, "mch-manage", "mch-manage-records", request.ManageRecordId)
+ .SetQueryParam("sub_mchid", request.SubMerchantId);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /mch-manage/mch-manage-records/{manage_record_id}/mch-manage-submissions 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCreateMerchantManageRecordSubmissionAsync(this WechatTenpayClient client, Models.CreateMerchantManageRecordSubmissionRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Post, "mch-manage", "mch-manage-records", request.ManageRecordId, "mch-manage-submissions");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /mch-manage/submission-files/sub-mchid/{sub_mchid}/upload 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteUploadMerchantManageSubmissionFileAsync(this WechatTenpayClient client, Models.UploadMerchantManageSubmissionFileRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ if (request.FileName is null)
+ request.FileName = Guid.NewGuid().ToString("N").ToLower();
+
+ if (request.FileHash is null)
+ request.FileHash = EncodedString.ToHexString(Utilities.SHA256Utility.Hash(request.FileBytes)).Value!.ToLower();
+
+ if (request.FileContentType is null)
+ request.FileContentType = MimeTypes.GetMimeMapping(request.FileName!);
+
+ IFlurlRequest flurlReq = client
+ .CreateFlurlRequest(request, HttpMethod.Post, "mch-manage", "submission-files", "sub-mchid", request.SubMerchantId, "upload");
+
+ using var httpContent = Utilities.HttpContentBuilder.BuildWithFile(fileName: request.FileName, fileBytes: request.FileBytes, fileContentType: request.FileContentType, fileMetaJson: client.JsonSerializer.Serialize(request), formDataName: "submission_file");
+ httpContent.Add(new StringContent(request.ItemId), "item_id");
+ return await client.SendFlurlRequestAsync(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteTransactionBlockExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteTransactionBlockExtensions.cs
new file mode 100644
index 00000000..ea9d382f
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteTransactionBlockExtensions.cs
@@ -0,0 +1,104 @@
+using System;
+using System.Net.Http;
+using System.Threading;
+using System.Threading.Tasks;
+using Flurl.Http;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
+{
+ using SKIT.FlurlHttpClient.Primitives;
+
+ public static class WechatTenpayClientExecuteTransactionBlockExtensions
+ {
+ ///
+ /// 异步调用 [GET] /transaction-block/transaction-block-records/sub-mchid/{sub_mchid} 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteQueryTransactionBlockRecordsAsync(this WechatTenpayClient client, Models.QueryTransactionBlockRecordsRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Get, "transaction-block", "transaction-block-records", "sub-mchid", request.SubMerchantId)
+ .SetQueryParam("limit", request.Limit)
+ .SetQueryParam("offset", request.Offset);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [GET] /transaction-block/transaction-block-records/{block_record_id} 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteGetTransactionBlockRecordAsync(this WechatTenpayClient client, Models.GetTransactionBlockRecordRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Get, "transaction-block", "transaction-block-records", request.BlockRecordId)
+ .SetQueryParam("sub_mchid", request.SubMerchantId);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /transaction-block/transaction-block-submissions/sub-mchid/{sub_mchid} 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCreateTransactionBlockSubmissionAsync(this WechatTenpayClient client, Models.CreateTransactionBlockSubmissionRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Post, "transaction-block", "transaction-block-submissions", "sub-mchid", request.SubMerchantId);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [GET] /transaction-block/transaction-block-submissions/{block_submission_id} 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteGetTransactionBlockSubmissionAsync(this WechatTenpayClient client, Models.GetTransactionBlockSubmissionRequest 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
+ .CreateFlurlRequest(request, HttpMethod.Get, "transaction-block", "transaction-block-submissions", request.BlockSubmissionId);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantManage/CreateMerchantManageRecordSubmissionRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantManage/CreateMerchantManageRecordSubmissionRequest.cs
new file mode 100644
index 00000000..4157c1be
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantManage/CreateMerchantManageRecordSubmissionRequest.cs
@@ -0,0 +1,29 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /mch-manage/mch-manage-records/{manage_record_id}/mch-manage-submissions 接口的请求。
+ ///
+ public class CreateMerchantManageRecordSubmissionRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置子商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
+ public string SubMerchantId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户管理记录 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string ManageRecordId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置提交数据(JSON 格式)。
+ ///
+ [Newtonsoft.Json.JsonProperty("submit_data")]
+ [System.Text.Json.Serialization.JsonPropertyName("submit_data")]
+ public string SubmitData { get; set; } = "{}";
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantManage/CreateMerchantManageRecordSubmissionResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantManage/CreateMerchantManageRecordSubmissionResponse.cs
new file mode 100644
index 00000000..9eea396a
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantManage/CreateMerchantManageRecordSubmissionResponse.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /mch-manage/mch-manage-records/{manage_record_id}/mch-manage-submissions 接口的响应。
+ ///
+ public class CreateMerchantManageRecordSubmissionResponse : WechatTenpayResponse
+ {
+ ///
+ /// 获取或设置商户管理提交资料记录 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("manage_submission_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("manage_submission_id")]
+ public string ManageSubmissionId { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantManage/GetMerchantManageRecordRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantManage/GetMerchantManageRecordRequest.cs
new file mode 100644
index 00000000..40e2e549
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantManage/GetMerchantManageRecordRequest.cs
@@ -0,0 +1,22 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /mch-manage/mch-manage-records/{manage_record_id} 接口的请求。
+ ///
+ public class GetMerchantManageRecordRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置子商户号。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string SubMerchantId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户管理记录 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string ManageRecordId { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantManage/GetMerchantManageRecordResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantManage/GetMerchantManageRecordResponse.cs
new file mode 100644
index 00000000..b2d5990c
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantManage/GetMerchantManageRecordResponse.cs
@@ -0,0 +1,139 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /mch-manage/mch-manage-records/{manage_record_id} 接口的响应。
+ ///
+ public class GetMerchantManageRecordResponse : WechatTenpayResponse
+ {
+ ///
+ /// 获取或设置子商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
+ public string SubMerchantId { get; set; } = default!;
+
+ ///
+ /// 获取或设置商户管理记录 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("manage_record_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("manage_record_id")]
+ public string ManageRecordId { get; set; } = default!;
+
+ ///
+ /// 获取或设置商户管理记录类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("manage_record_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("manage_record_type")]
+ public string ManageRecordType { get; set; } = default!;
+
+ ///
+ /// 获取或设置商户管理记录状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("manage_record_state")]
+ [System.Text.Json.Serialization.JsonPropertyName("manage_record_state")]
+ public string ManageRecordState { get; set; } = default!;
+
+ ///
+ /// 获取或设置管控时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("manage_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("manage_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset ManageTime { get; set; }
+
+ ///
+ /// 获取或设置管控原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("manage_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("manage_reason")]
+ public string ManageReason { get; set; } = default!;
+
+ ///
+ /// 获取或设置限制功能。
+ ///
+ [Newtonsoft.Json.JsonProperty("limit_ability")]
+ [System.Text.Json.Serialization.JsonPropertyName("limit_ability")]
+ public string? LimitAbility { get; set; }
+
+ ///
+ /// 获取或设置解除管控方式。
+ ///
+ [Newtonsoft.Json.JsonProperty("recover_way")]
+ [System.Text.Json.Serialization.JsonPropertyName("recover_way")]
+ public string? RecoverWay { get; set; }
+
+ ///
+ /// 获取或设置是否允许提交资料。
+ ///
+ [Newtonsoft.Json.JsonProperty("allow_submit")]
+ [System.Text.Json.Serialization.JsonPropertyName("allow_submit")]
+ public bool IsAllowSubmit { get; set; }
+
+ ///
+ /// 获取或设置禁止提交资料原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("forbid_submit_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("forbid_submit_reason")]
+ public string? ForbidSubmitReason { get; set; }
+
+ ///
+ /// 获取或设置可提交资料开始时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("submit_start_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("submit_start_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? SubmitStartTime { get; set; }
+
+ ///
+ /// 获取或设置可提交资料结束时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("submit_end_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("submit_end_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? SubmitEndTime { get; set; }
+
+ ///
+ /// 获取或设置要求提交的资料(JSON 格式)。
+ ///
+ [Newtonsoft.Json.JsonProperty("requested_item_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("requested_item_info")]
+ public string? RequestedData { get; set; }
+
+ ///
+ /// 获取或设置解除管控原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("recover_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("recover_reason")]
+ public string? RecoverReason { get; set; }
+
+ ///
+ /// 获取或设置解除管控时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("recover_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("recover_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? RecoverTime { get; set; }
+
+ ///
+ /// 获取或设置申诉驳回原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("reject_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("reject_reason")]
+ public string? RejectReason { get; set; }
+
+ ///
+ /// 获取或设置审核时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("approve_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("approve_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? ApproveTime { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantManage/QueryMerchantManageRecordsRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantManage/QueryMerchantManageRecordsRequest.cs
new file mode 100644
index 00000000..4cc1f12c
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantManage/QueryMerchantManageRecordsRequest.cs
@@ -0,0 +1,44 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /mch-manage/mch-manage-records/sub-mchid/{sub_mchid} 接口的请求。
+ ///
+ public class QueryMerchantManageRecordsRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置子商户号。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string SubMerchantId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户管理记录类型。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string? ManageRecordType { get; set; }
+
+ ///
+ /// 获取或设置商户管理记录状态。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string? ManageRecordState { get; set; }
+
+ ///
+ /// 获取或设置分页大小。
+ /// 默认值:10
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public int Limit { get; set; }
+
+ ///
+ /// 获取或设置分页开始位置。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public int? Offset { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantManage/QueryMerchantManageRecordsResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantManage/QueryMerchantManageRecordsResponse.cs
new file mode 100644
index 00000000..51bd5819
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantManage/QueryMerchantManageRecordsResponse.cs
@@ -0,0 +1,173 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /mch-manage/mch-manage-records/sub-mchid/{sub_mchid} 接口的响应。
+ ///
+ public class QueryMerchantManageRecordsResponse : WechatTenpayResponse
+ {
+ public static class Types
+ {
+ public class Record
+ {
+ ///
+ /// 获取或设置子商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
+ public string SubMerchantId { get; set; } = default!;
+
+ ///
+ /// 获取或设置商户管理记录 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("manage_record_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("manage_record_id")]
+ public string ManageRecordId { get; set; } = default!;
+
+ ///
+ /// 获取或设置商户管理记录类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("manage_record_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("manage_record_type")]
+ public string ManageRecordType { get; set; } = default!;
+
+ ///
+ /// 获取或设置商户管理记录状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("manage_record_state")]
+ [System.Text.Json.Serialization.JsonPropertyName("manage_record_state")]
+ public string ManageRecordState { get; set; } = default!;
+
+ ///
+ /// 获取或设置管控时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("manage_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("manage_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset ManageTime { get; set; }
+
+ ///
+ /// 获取或设置管控原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("manage_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("manage_reason")]
+ public string ManageReason { get; set; } = default!;
+
+ ///
+ /// 获取或设置限制功能。
+ ///
+ [Newtonsoft.Json.JsonProperty("limit_ability")]
+ [System.Text.Json.Serialization.JsonPropertyName("limit_ability")]
+ public string? LimitAbility { get; set; }
+
+ ///
+ /// 获取或设置解除管控方式。
+ ///
+ [Newtonsoft.Json.JsonProperty("recover_way")]
+ [System.Text.Json.Serialization.JsonPropertyName("recover_way")]
+ public string? RecoverWay { get; set; }
+
+ ///
+ /// 获取或设置是否允许提交资料。
+ ///
+ [Newtonsoft.Json.JsonProperty("allow_submit")]
+ [System.Text.Json.Serialization.JsonPropertyName("allow_submit")]
+ public bool IsAllowSubmit { get; set; }
+
+ ///
+ /// 获取或设置禁止提交资料原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("forbid_submit_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("forbid_submit_reason")]
+ public string? ForbidSubmitReason { get; set; }
+
+ ///
+ /// 获取或设置可提交资料开始时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("submit_start_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("submit_start_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? SubmitStartTime { get; set; }
+
+ ///
+ /// 获取或设置可提交资料结束时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("submit_end_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("submit_end_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? SubmitEndTime { get; set; }
+
+ ///
+ /// 获取或设置要求提交的资料(JSON 格式)。
+ ///
+ [Newtonsoft.Json.JsonProperty("requested_item_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("requested_item_info")]
+ public string? RequestedData { get; set; }
+
+ ///
+ /// 获取或设置解除管控原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("recover_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("recover_reason")]
+ public string? RecoverReason { get; set; }
+
+ ///
+ /// 获取或设置解除管控时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("recover_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("recover_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? RecoverTime { get; set; }
+
+ ///
+ /// 获取或设置申诉驳回原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("reject_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("reject_reason")]
+ public string? RejectReason { get; set; }
+
+ ///
+ /// 获取或设置审核时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("approve_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("approve_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? ApproveTime { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置商户管理记录列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("data")]
+ [System.Text.Json.Serialization.JsonPropertyName("data")]
+ public Types.Record[] RecordList { get; set; } = default!;
+
+ ///
+ /// 获取或设置分页大小。
+ ///
+ [Newtonsoft.Json.JsonProperty("limit")]
+ [System.Text.Json.Serialization.JsonPropertyName("limit")]
+ public int Limit { get; set; }
+
+ ///
+ /// 获取或设置分页开始位置。
+ ///
+ [Newtonsoft.Json.JsonProperty("offset")]
+ [System.Text.Json.Serialization.JsonPropertyName("offset")]
+ public int Offset { get; set; }
+
+ ///
+ /// 获取或设置券总数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("total_count")]
+ [System.Text.Json.Serialization.JsonPropertyName("total_count")]
+ public int TotalCount { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantManage/UploadMerchantManageSubmissionFileRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantManage/UploadMerchantManageSubmissionFileRequest.cs
new file mode 100644
index 00000000..d1257c14
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantManage/UploadMerchantManageSubmissionFileRequest.cs
@@ -0,0 +1,52 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /mch-manage/submission-files/sub-mchid/{sub_mchid}/upload 接口的请求。
+ ///
+ public class UploadMerchantManageSubmissionFileRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置子商户号。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string SubMerchantId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置资料项 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string ItemId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置文件字节数组。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public byte[] FileBytes { get; set; } = Array.Empty();
+
+ ///
+ /// 获取或设置文件名。如果不指定将由系统自动生成。
+ ///
+ [Newtonsoft.Json.JsonProperty("file_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("file_name")]
+ public string? FileName { get; set; }
+
+ ///
+ /// 获取或设置文件摘要。如果不指定将由系统自动生成。
+ ///
+ [Newtonsoft.Json.JsonProperty("file_digest")]
+ [System.Text.Json.Serialization.JsonPropertyName("file_digest")]
+ public string? FileHash { get; set; }
+
+ ///
+ /// 获取或设置文件 Conent-Type。如果不指定将由系统自动生成。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string? FileContentType { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantManage/UploadMerchantManageSubmissionFileResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantManage/UploadMerchantManageSubmissionFileResponse.cs
new file mode 100644
index 00000000..5d8c709a
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantManage/UploadMerchantManageSubmissionFileResponse.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /mch-manage/submission-files/sub-mchid/{sub_mchid}/upload 接口的响应。
+ ///
+ public class UploadMerchantManageSubmissionFileResponse : WechatTenpayResponse
+ {
+ ///
+ /// 获取或设置文件 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("file_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("file_id")]
+ public string FileId { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/TransactionBlock/CreateTransactionBlockSubmissionRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/TransactionBlock/CreateTransactionBlockSubmissionRequest.cs
new file mode 100644
index 00000000..90633d0b
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/TransactionBlock/CreateTransactionBlockSubmissionRequest.cs
@@ -0,0 +1,29 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /transaction-block/transaction-block-submissions/sub-mchid/{sub_mchid} 接口的请求。
+ ///
+ public class CreateTransactionBlockSubmissionRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置子商户号。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string SubMerchantId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户申诉单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("merchant_submit_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("merchant_submit_id")]
+ public string MerchantSubmitId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置提交数据(JSON 格式)。
+ ///
+ [Newtonsoft.Json.JsonProperty("submit_data")]
+ [System.Text.Json.Serialization.JsonPropertyName("submit_data")]
+ public string SubmitData { get; set; } = "{}";
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/TransactionBlock/CreateTransactionBlockSubmissionResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/TransactionBlock/CreateTransactionBlockSubmissionResponse.cs
new file mode 100644
index 00000000..94125685
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/TransactionBlock/CreateTransactionBlockSubmissionResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /transaction-block/transaction-block-submissions/sub-mchid/{sub_mchid} 接口的响应。
+ ///
+ public class CreateTransactionBlockSubmissionResponse : GetTransactionBlockSubmissionResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/TransactionBlock/GetTransactionBlockRecordRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/TransactionBlock/GetTransactionBlockRecordRequest.cs
new file mode 100644
index 00000000..e6682b9c
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/TransactionBlock/GetTransactionBlockRecordRequest.cs
@@ -0,0 +1,22 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /transaction-block/transaction-block-records/{block_record_id} 接口的请求。
+ ///
+ public class GetTransactionBlockRecordRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置子商户号。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string SubMerchantId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置交易拦截记录 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string BlockRecordId { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/TransactionBlock/GetTransactionBlockRecordResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/TransactionBlock/GetTransactionBlockRecordResponse.cs
new file mode 100644
index 00000000..bc16c556
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/TransactionBlock/GetTransactionBlockRecordResponse.cs
@@ -0,0 +1,54 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /transaction-block/transaction-block-records/{block_record_id} 接口的响应。
+ ///
+ public class GetTransactionBlockRecordResponse : WechatTenpayResponse
+ {
+ ///
+ /// 获取或设置交易拦截记录 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("block_record_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("block_record_id")]
+ public string BlockRecordId { get; set; } = default!;
+
+ ///
+ /// 获取或设置拦截时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("block_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("block_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset BlockTime { get; set; }
+
+ ///
+ /// 获取或设置拦截原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("block_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("block_reason")]
+ public string BlockReason { get; set; } = default!;
+
+ ///
+ /// 获取或设置拦截笔数。
+ ///
+ [Newtonsoft.Json.JsonProperty("number_of_block")]
+ [System.Text.Json.Serialization.JsonPropertyName("number_of_block")]
+ public string? NumberOfBlock { get; set; }
+
+ ///
+ /// 获取或设置解除管控方式。
+ ///
+ [Newtonsoft.Json.JsonProperty("recover_way")]
+ [System.Text.Json.Serialization.JsonPropertyName("recover_way")]
+ public string? RecoverWay { get; set; }
+
+ ///
+ /// 获取或设置要求提交的资料(JSON 格式)。
+ ///
+ [Newtonsoft.Json.JsonProperty("requested_item_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("requested_item_info")]
+ public string? RequestedData { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/TransactionBlock/GetTransactionBlockSubmissionRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/TransactionBlock/GetTransactionBlockSubmissionRequest.cs
new file mode 100644
index 00000000..fc01b6b6
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/TransactionBlock/GetTransactionBlockSubmissionRequest.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /transaction-block/transaction-block-submissions/{block_submission_id} 接口的请求。
+ ///
+ public class GetTransactionBlockSubmissionRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置交易拦截申诉 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string BlockSubmissionId { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/TransactionBlock/GetTransactionBlockSubmissionResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/TransactionBlock/GetTransactionBlockSubmissionResponse.cs
new file mode 100644
index 00000000..1e5826ff
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/TransactionBlock/GetTransactionBlockSubmissionResponse.cs
@@ -0,0 +1,49 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /transaction-block/transaction-block-submissions/{block_submission_id} 接口的响应。
+ ///
+ public class GetTransactionBlockSubmissionResponse : WechatTenpayResponse
+ {
+ ///
+ /// 获取或设置交易拦截申诉 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("block_submission_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("block_submission_id")]
+ public string BlockSubmissionId { get; set; } = default!;
+
+ ///
+ /// 获取或设置提交时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("submit_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("submit_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset SubmitTime { get; set; }
+
+ ///
+ /// 获取或设置审核结果。
+ ///
+ [Newtonsoft.Json.JsonProperty("review_result")]
+ [System.Text.Json.Serialization.JsonPropertyName("review_result")]
+ public string? ReviewResult { get; set; }
+
+ ///
+ /// 获取或设置审核时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("review_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("review_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? ReviewTime { get; set; }
+
+ ///
+ /// 获取或设置审核驳回原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("review_reject_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("review_reject_reason")]
+ public string? ReviewRejectReason { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/TransactionBlock/QueryTransactionBlockRecordsRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/TransactionBlock/QueryTransactionBlockRecordsRequest.cs
new file mode 100644
index 00000000..5e32a4b9
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/TransactionBlock/QueryTransactionBlockRecordsRequest.cs
@@ -0,0 +1,30 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /transaction-block/transaction-block-records/sub-mchid/{sub_mchid} 接口的请求。
+ ///
+ public class QueryTransactionBlockRecordsRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置子商户号。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string SubMerchantId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置分页大小。
+ /// 默认值:10
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public int Limit { get; set; }
+
+ ///
+ /// 获取或设置分页开始位置。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public int? Offset { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/TransactionBlock/QueryTransactionBlockRecordsResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/TransactionBlock/QueryTransactionBlockRecordsResponse.cs
new file mode 100644
index 00000000..7fbc54bc
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/TransactionBlock/QueryTransactionBlockRecordsResponse.cs
@@ -0,0 +1,88 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /transaction-block/transaction-block-records/sub-mchid/{sub_mchid} 接口的响应。
+ ///
+ public class QueryTransactionBlockRecordsResponse : WechatTenpayResponse
+ {
+ public static class Types
+ {
+ public class Record
+ {
+ ///
+ /// 获取或设置交易拦截记录 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("block_record_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("block_record_id")]
+ public string BlockRecordId { get; set; } = default!;
+
+ ///
+ /// 获取或设置拦截时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("block_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("block_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset BlockTime { get; set; }
+
+ ///
+ /// 获取或设置拦截原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("block_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("block_reason")]
+ public string BlockReason { get; set; } = default!;
+
+ ///
+ /// 获取或设置拦截笔数。
+ ///
+ [Newtonsoft.Json.JsonProperty("number_of_block")]
+ [System.Text.Json.Serialization.JsonPropertyName("number_of_block")]
+ public string? NumberOfBlock { get; set; }
+
+ ///
+ /// 获取或设置解除管控方式。
+ ///
+ [Newtonsoft.Json.JsonProperty("recover_way")]
+ [System.Text.Json.Serialization.JsonPropertyName("recover_way")]
+ public string? RecoverWay { get; set; }
+
+ ///
+ /// 获取或设置要求提交的资料(JSON 格式)。
+ ///
+ [Newtonsoft.Json.JsonProperty("requested_item_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("requested_item_info")]
+ public string? RequestedData { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置交易拦截记录列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("data")]
+ [System.Text.Json.Serialization.JsonPropertyName("data")]
+ public Types.Record[] RecordList { get; set; } = default!;
+
+ ///
+ /// 获取或设置分页大小。
+ ///
+ [Newtonsoft.Json.JsonProperty("limit")]
+ [System.Text.Json.Serialization.JsonPropertyName("limit")]
+ public int Limit { get; set; }
+
+ ///
+ /// 获取或设置分页开始位置。
+ ///
+ [Newtonsoft.Json.JsonProperty("offset")]
+ [System.Text.Json.Serialization.JsonPropertyName("offset")]
+ public int Offset { get; set; }
+
+ ///
+ /// 获取或设置券总数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("total_count")]
+ [System.Text.Json.Serialization.JsonPropertyName("total_count")]
+ public int TotalCount { get; set; }
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MerchantManage/CreateMerchantManageRecordSubmissionRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MerchantManage/CreateMerchantManageRecordSubmissionRequest.json
new file mode 100644
index 00000000..7c424200
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MerchantManage/CreateMerchantManageRecordSubmissionRequest.json
@@ -0,0 +1,4 @@
+{
+ "submit_data": "{ \t\"record_fields\": [{ \t\t\"item_id\": 100001, \t\t\"name\": \"身份证号\", \t\t\"type\": 1, \t\t\"field_name\": \"FCertCardId\", \t\t\"repeated_field_data\": [\"ri8U5FUSmHh1peGNBUvG+VwGHl31ymiLms5V1yhTbBWUApJDInme1b+ndtrlAielJYpQE41sSxj46ePMto2mySBIJjgCIyChLCTQ580M5pNKglAkjTnXwzJXyPhpyzkpdeFfUDjWc+qd6G4UwrL70br/EEqfQbGNaUKX6jAGjB8wd8wndImMB3iB2vUuAOL+6giLWCBBaC50QRfCTDlGi0c41Gt92tCrRSI7pWzU1cxxJwng7M53/J5PhI+eikLqbhUYlRPHYl6j0ouRItWHCRORYKuz6enluXyFwUCaaR3IeINSM8CwjHp6spnTIo70UaRJWAcZ0jQp/lwX2JVxaw==\"] \t}, { \t\t\"item_id\": 100002, \t\t\"name\": \"门店照片\", \t\t\"type\": 2, \t\t\"field_name\": \"FImages\", \t\t\"repeated_field_data\": [\"xxx1.jpg\"] \t}, { \t\t\"item_id\": 100003, \t\t\"name\": \"身份证照片\", \t\t\"type\": 2, \t\t\"field_name\": \"FImages\", \t\t\"repeated_field_data\": [\"xxx1.jpg\", \"xxx2.jpg\"] \t}, { \t\t\"item_id\": 100004, \t\t\"name\": \"店铺地址\", \t\t\"type\": 3, \t\t\"field_name\": \"FAddRess\", \t\t\"repeated_field_data\": [\"{\\\"longitude\\\":\\\"37.5\\\",\\\"latitude\\\":\\\"123.5\\\",\\\"province\\\":\\\"广东省\\\",\\\"city\\\":\\\"深圳市\\\",\\\"area\\\":\\\"南山区\\\",\\\"street\\\":\\\"XX街道\\\",\\\"address\\\":\\\"XX路XX号\\\",\\\"name\\\":\\\"XXXX公司\\\"}\"] \t}, { \t\t\"item_id\": 100005, \t\t\"name\": \"经营场景\", \t\t\"type\": 4, \t\t\"field_name\": \"FBusinessScenarios\", \t\t\"repeated_field_data\": [\"线上经营\", \"线上线下经营\"] \t}, { \t\t\"item_id\": 100006, \t\t\"name\": \"营业时间\", \t\t\"type\": 4, \t\t\"field_name\": \"FOpeningHours\", \t\t\"repeated_field_data\": [\"09:00:00\", \"20:00:00\"] \t}] }",
+ "sub_mchid": "123000110"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MerchantManage/CreateMerchantManageRecordSubmissionResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MerchantManage/CreateMerchantManageRecordSubmissionResponse.json
new file mode 100644
index 00000000..441a9acc
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MerchantManage/CreateMerchantManageRecordSubmissionResponse.json
@@ -0,0 +1,3 @@
+{
+ "manage_submission_id": "S0120190217140201012345672111223"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MerchantManage/GetMerchantManageRecordResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MerchantManage/GetMerchantManageRecordResponse.json
new file mode 100644
index 00000000..ac3085ac
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MerchantManage/GetMerchantManageRecordResponse.json
@@ -0,0 +1,19 @@
+{
+ "sub_mchid": "123000110",
+ "manage_record_id": "M1210999900435123451697535102441",
+ "manage_record_type": "FUNCTIONAL_LIMIT_RECORD",
+ "manage_time": "2018-06-08T10:34:56+08:00",
+ "manage_reason": "涉嫌信用卡套现",
+ "limit_ability": "关闭支付权限,关闭体现权限",
+ "recover_way": "SUBMIT_INFORMATION",
+ "allow_submit": true,
+ "forbid_submit_reason": "应平台管理要求,此单据不支持申诉",
+ "submit_start_time": "2018-06-08T10:34:56+08:00",
+ "submit_end_time": "2018-06-08T10:34:56+08:00",
+ "requested_item_info": "{ \t\"record_fields\": [{ \t\t\t\"item_id\": \"100004\", \t\t\t\"field_name\": \"legal_person_card_id\", \t\t\t\"name\": \"企业法人身份证号\", \t\t\t\"type\": 1, \t\t\t\"tips\": \"\", \t\t\t\"placeholder\": \"请输入企业法人身份证号\", \t\t\t\"tooltip\": \"需要填写完整身份证号\", \t\t\t\"required\": 1, \t\t\t\"string_check_rule\": { \t\t\t\t\"min_string_length\": 1, \t\t\t\t\"max_string_length\": 50, \t\t\t\t\"validator\": \"idcard\" \t\t\t}, \t\t\t\"need_encrypt\": true \t\t}, \t\t{ \t\t\t\"item_id\": \"100005\", \t\t\t\"field_name\": \"legal_person_cert_type\", \t\t\t\"name\": \"企业法人证件类型\", \t\t\t\"type\": 4, \t\t\t\"tips\": \"\", \t\t\t\"placeholder\": \"请选择证件类型\", \t\t\t\"tooltip\": \"\", \t\t\t\"required\": 0, \t\t\t\"enum_check_rule\": { \t\t\t\t\"min_list_length\": 1, \t\t\t\t\"max_list_length\": 1, \t\t\t\t\"enum_values\": [\"大陆居民身份证\", \"港澳台通行证\"] \t\t\t}, \t\t\t\"need_encrypt\": false \t\t}, \t\t{ \t\t\t\"item_id\": \"100006\", \t\t\t\"field_name\": \"inland_cert_card_image\", \t\t\t\"name\": \"大陆居民身份证照片\", \t\t\t\"type\": 2, \t\t\t\"tips\": \"请上传图片\", \t\t\t\"placeholder\": \"\", \t\t\t\"tooltip\": \"需要正面和反面两张照片\", \t\t\t\"required\": 1, \t\t\t\"need_encrypt\": false, \t\t\t\"file_check_rule\": { \t\t\t\t\"min_list_length\": 2, \t\t\t\t\"max_list_length\": 2, \t\t\t\t\"enum_file_exts\": [\"png\", \"jpg\", \"jpeg\"], \t\t\t\t\"max_file_size\": 5 \t\t\t}, \t\t\t\"relations\": [{ \t\t\t\t\"source_key\": 100005, \t\t\t\t\"source_value\": \"大陆居民身份证\" \t\t\t}] \t\t} \t] }",
+ "manage_record_state": "PENDING",
+ "recover_time": "2018-06-08T10:34:56+08:00",
+ "recover_reason": "MERCHANT_SUBMIT_RECOVER",
+ "reject_reason": "身份证信息遮挡,请上传清晰的身份证图片",
+ "approve_time": "2018-06-08T10:34:56+08:00"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MerchantManage/QueryMerchantManageRecordsResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MerchantManage/QueryMerchantManageRecordsResponse.json
new file mode 100644
index 00000000..7224383b
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MerchantManage/QueryMerchantManageRecordsResponse.json
@@ -0,0 +1,26 @@
+{
+ "data": [
+ {
+ "sub_mchid": "123000110",
+ "manage_record_id": "M1210999900435123451697535102441",
+ "manage_record_type": "FUNCTIONAL_LIMIT_RECORD",
+ "manage_time": "2018-06-08T10:34:56+08:00",
+ "manage_reason": "涉嫌信用卡套现",
+ "limit_ability": "关闭支付权限,关闭体现权限",
+ "recover_way": "SUBMIT_INFORMATION",
+ "allow_submit": true,
+ "forbid_submit_reason": "应平台管理要求,此单据不支持申诉",
+ "submit_start_time": "2018-06-08T10:34:56+08:00",
+ "submit_end_time": "2018-06-08T10:34:56+08:00",
+ "requested_item_info": "{ \t\"record_fields\": [{ \t\t\t\"item_id\": \"100004\", \t\t\t\"field_name\": \"legal_person_card_id\", \t\t\t\"name\": \"企业法人身份证号\", \t\t\t\"type\": 1, \t\t\t\"tips\": \"\", \t\t\t\"placeholder\": \"请输入企业法人身份证号\", \t\t\t\"tooltip\": \"需要填写完整身份证号\", \t\t\t\"required\": 1, \t\t\t\"string_check_rule\": { \t\t\t\t\"min_string_length\": 1, \t\t\t\t\"max_string_length\": 50, \t\t\t\t\"validator\": \"idcard\" \t\t\t}, \t\t\t\"need_encrypt\": true \t\t}, \t\t{ \t\t\t\"item_id\": \"100005\", \t\t\t\"field_name\": \"legal_person_cert_type\", \t\t\t\"name\": \"企业法人证件类型\", \t\t\t\"type\": 4, \t\t\t\"tips\": \"\", \t\t\t\"placeholder\": \"请选择证件类型\", \t\t\t\"tooltip\": \"\", \t\t\t\"required\": 0, \t\t\t\"enum_check_rule\": { \t\t\t\t\"min_list_length\": 1, \t\t\t\t\"max_list_length\": 1, \t\t\t\t\"enum_values\": [\"大陆居民身份证\", \"港澳台通行证\"] \t\t\t}, \t\t\t\"need_encrypt\": false \t\t}, \t\t{ \t\t\t\"item_id\": \"100006\", \t\t\t\"field_name\": \"inland_cert_card_image\", \t\t\t\"name\": \"大陆居民身份证照片\", \t\t\t\"type\": 2, \t\t\t\"tips\": \"请上传图片\", \t\t\t\"placeholder\": \"\", \t\t\t\"tooltip\": \"需要正面和反面两张照片\", \t\t\t\"required\": 1, \t\t\t\"need_encrypt\": false, \t\t\t\"file_check_rule\": { \t\t\t\t\"min_list_length\": 2, \t\t\t\t\"max_list_length\": 2, \t\t\t\t\"enum_file_exts\": [\"png\", \"jpg\", \"jpeg\"], \t\t\t\t\"max_file_size\": 5 \t\t\t}, \t\t\t\"relations\": [{ \t\t\t\t\"source_key\": 100005, \t\t\t\t\"source_value\": \"大陆居民身份证\" \t\t\t}] \t\t} \t] }",
+ "manage_record_state": "PENDING",
+ "recover_time": "2018-06-08T10:34:56+08:00",
+ "recover_reason": "MERCHANT_SUBMIT_RECOVER",
+ "reject_reason": "身份证信息遮挡,请上传清晰的身份证图片",
+ "approve_time": "2018-06-08T10:34:56+08:00"
+ }
+ ],
+ "offset": 10,
+ "limit": 5,
+ "total_count": 1234
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MerchantManage/UploadMerchantManageSubmissionFileRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MerchantManage/UploadMerchantManageSubmissionFileRequest.json
new file mode 100644
index 00000000..7b097835
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MerchantManage/UploadMerchantManageSubmissionFileRequest.json
@@ -0,0 +1,4 @@
+{
+ "file_name": "filea.jpg",
+ "file_digest": "B94D27B9934D3E08A52E52D7DA7DABFAC484EFE37A5380EE9088F7ACE2EFCDE9"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MerchantManage/UploadMerchantManageSubmissionFileResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MerchantManage/UploadMerchantManageSubmissionFileResponse.json
new file mode 100644
index 00000000..c812d0e4
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MerchantManage/UploadMerchantManageSubmissionFileResponse.json
@@ -0,0 +1,3 @@
+{
+ "file_id": "dklfjaljdflakjfkljasdf.jpg"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/TransactionBlock/CreateTransactionBlockSubmissionRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/TransactionBlock/CreateTransactionBlockSubmissionRequest.json
new file mode 100644
index 00000000..77e23b70
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/TransactionBlock/CreateTransactionBlockSubmissionRequest.json
@@ -0,0 +1,4 @@
+{
+ "submit_data": "{ \t\"record_fields\": [{ \t\t\"item_id\": 100001, \t\t\"name\": \"身份证号\", \t\t\"type\": 1, \t\t\"field_name\": \"FCertCardId\", \t\t\"repeated_field_data\": [\"ri8U5FUSmHh1peGNBUvG+VwGHl31ymiLms5V1yhTbBWUApJDInme1b+ndtrlAielJYpQE41sSxj46ePMto2mySBIJjgCIyChLCTQ580M5pNKglAkjTnXwzJXyPhpyzkpdeFfUDjWc+qd6G4UwrL70br/EEqfQbGNaUKX6jAGjB8wd8wndImMB3iB2vUuAOL+6giLWCBBaC50QRfCTDlGi0c41Gt92tCrRSI7pWzU1cxxJwng7M53/J5PhI+eikLqbhUYlRPHYl6j0ouRItWHCRORYKuz6enluXyFwUCaaR3IeINSM8CwjHp6spnTIo70UaRJWAcZ0jQp/lwX2JVxaw==\"] \t}, { \t\t\"item_id\": 100002, \t\t\"name\": \"门店照片\", \t\t\"type\": 2, \t\t\"field_name\": \"FImages\", \t\t\"repeated_field_data\": [\"xxx1.jpg\"] \t}, { \t\t\"item_id\": 100003, \t\t\"name\": \"身份证照片\", \t\t\"type\": 2, \t\t\"field_name\": \"FImages\", \t\t\"repeated_field_data\": [\"xxx1.jpg\", \"xxx2.jpg\"] \t}, { \t\t\"item_id\": 100004, \t\t\"name\": \"店铺地址\", \t\t\"type\": 3, \t\t\"field_name\": \"FAddRess\", \t\t\"repeated_field_data\": [\"{\\\"longitude\\\":\\\"37.5\\\",\\\"latitude\\\":\\\"123.5\\\",\\\"province\\\":\\\"广东省\\\",\\\"city\\\":\\\"深圳市\\\",\\\"area\\\":\\\"南山区\\\",\\\"street\\\":\\\"XX街道\\\",\\\"address\\\":\\\"XX路XX号\\\",\\\"name\\\":\\\"XXXX公司\\\"}\"] \t}, { \t\t\"item_id\": 100005, \t\t\"name\": \"经营场景\", \t\t\"type\": 4, \t\t\"field_name\": \"FBusinessScenarios\", \t\t\"repeated_field_data\": [\"线上经营\", \"线上线下经营\"] \t}, { \t\t\"item_id\": 100006, \t\t\"name\": \"营业时间\", \t\t\"type\": 4, \t\t\"field_name\": \"FOpeningHours\", \t\t\"repeated_field_data\": [\"09:00:00\", \"20:00:00\"] \t}] }",
+ "merchant_submit_id": "ABC123456789"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/TransactionBlock/CreateTransactionBlockSubmissionResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/TransactionBlock/CreateTransactionBlockSubmissionResponse.json
new file mode 100644
index 00000000..a18ad3c5
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/TransactionBlock/CreateTransactionBlockSubmissionResponse.json
@@ -0,0 +1,7 @@
+{
+ "block_submission_id": "B021234566799876aacsecd",
+ "submit_time": "2018-06-08T10:34:56+08:00",
+ "review_result": "EMPTY",
+ "review_time": "2018-06-08T10:34:56+08:00",
+ "review_reject_reason": "身份证图片有遮挡,请上传清晰的身份证图片"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/TransactionBlock/GetTransactionBlockRecordResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/TransactionBlock/GetTransactionBlockRecordResponse.json
new file mode 100644
index 00000000..c104feca
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/TransactionBlock/GetTransactionBlockRecordResponse.json
@@ -0,0 +1,8 @@
+{
+ "block_record_id": "23400",
+ "block_time": "2018-06-08T10:34:56+08:00",
+ "block_reason": "涉嫌信用卡套现",
+ "number_of_block": "LESS_THAN_TWENTY",
+ "recover_way": "SUBMIT_INFORMATION",
+ "requested_item_info": "{ \t\"record_fields\": [{ \t\t\t\"item_id\": \"100004\", \t\t\t\"field_name\": \"legal_person_card_id\", \t\t\t\"name\": \"企业法人身份证号\", \t\t\t\"type\": 1, \t\t\t\"tips\": \"\", \t\t\t\"placeholder\": \"请输入企业法人身份证号\", \t\t\t\"tooltip\": \"需要填写完整身份证号\", \t\t\t\"required\": 1, \t\t\t\"string_check_rule\": { \t\t\t\t\"min_string_length\": 1, \t\t\t\t\"max_string_length\": 50, \t\t\t\t\"validator\": \"idcard\" \t\t\t}, \t\t\t\"need_encrypt\": true \t\t}, \t\t{ \t\t\t\"item_id\": \"100005\", \t\t\t\"field_name\": \"legal_person_cert_type\", \t\t\t\"name\": \"企业法人证件类型\", \t\t\t\"type\": 4, \t\t\t\"tips\": \"\", \t\t\t\"placeholder\": \"请选择证件类型\", \t\t\t\"tooltip\": \"\", \t\t\t\"required\": 0, \t\t\t\"enum_check_rule\": { \t\t\t\t\"min_list_length\": 1, \t\t\t\t\"max_list_length\": 1, \t\t\t\t\"enum_values\": [\"大陆居民身份证\", \"港澳台通行证\"] \t\t\t}, \t\t\t\"need_encrypt\": false \t\t}, \t\t{ \t\t\t\"item_id\": \"100006\", \t\t\t\"field_name\": \"inland_cert_card_image\", \t\t\t\"name\": \"大陆居民身份证照片\", \t\t\t\"type\": 2, \t\t\t\"tips\": \"请上传图片\", \t\t\t\"placeholder\": \"\", \t\t\t\"tooltip\": \"需要正面和反面两张照片\", \t\t\t\"required\": 1, \t\t\t\"need_encrypt\": false, \t\t\t\"file_check_rule\": { \t\t\t\t\"min_list_length\": 2, \t\t\t\t\"max_list_length\": 2, \t\t\t\t\"enum_file_exts\": [\"png\", \"jpg\", \"jpeg\"], \t\t\t\t\"max_file_size\": 5 \t\t\t}, \t\t\t\"relations\": [{ \t\t\t\t\"source_key\": 100005, \t\t\t\t\"source_value\": \"大陆居民身份证\" \t\t\t}] \t\t} \t] }"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/TransactionBlock/GetTransactionBlockSubmissionResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/TransactionBlock/GetTransactionBlockSubmissionResponse.json
new file mode 100644
index 00000000..a18ad3c5
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/TransactionBlock/GetTransactionBlockSubmissionResponse.json
@@ -0,0 +1,7 @@
+{
+ "block_submission_id": "B021234566799876aacsecd",
+ "submit_time": "2018-06-08T10:34:56+08:00",
+ "review_result": "EMPTY",
+ "review_time": "2018-06-08T10:34:56+08:00",
+ "review_reject_reason": "身份证图片有遮挡,请上传清晰的身份证图片"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/TransactionBlock/QueryTransactionBlockRecordsResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/TransactionBlock/QueryTransactionBlockRecordsResponse.json
new file mode 100644
index 00000000..96921931
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/TransactionBlock/QueryTransactionBlockRecordsResponse.json
@@ -0,0 +1,15 @@
+{
+ "data": [
+ {
+ "block_record_id": "23400",
+ "block_time": "2018-06-08T10:34:56+08:00",
+ "block_reason": "涉嫌信用卡套现",
+ "number_of_block": "LESS_THAN_TWENTY",
+ "recover_way": "SUBMIT_INFORMATION",
+ "requested_item_info": "{ \t\"record_fields\": [{ \t\t\t\"item_id\": \"100004\", \t\t\t\"field_name\": \"legal_person_card_id\", \t\t\t\"name\": \"企业法人身份证号\", \t\t\t\"type\": 1, \t\t\t\"tips\": \"\", \t\t\t\"placeholder\": \"请输入企业法人身份证号\", \t\t\t\"tooltip\": \"需要填写完整身份证号\", \t\t\t\"required\": 1, \t\t\t\"string_check_rule\": { \t\t\t\t\"min_string_length\": 1, \t\t\t\t\"max_string_length\": 50, \t\t\t\t\"validator\": \"idcard\" \t\t\t}, \t\t\t\"need_encrypt\": true \t\t}, \t\t{ \t\t\t\"item_id\": \"100005\", \t\t\t\"field_name\": \"legal_person_cert_type\", \t\t\t\"name\": \"企业法人证件类型\", \t\t\t\"type\": 4, \t\t\t\"tips\": \"\", \t\t\t\"placeholder\": \"请选择证件类型\", \t\t\t\"tooltip\": \"\", \t\t\t\"required\": 0, \t\t\t\"enum_check_rule\": { \t\t\t\t\"min_list_length\": 1, \t\t\t\t\"max_list_length\": 1, \t\t\t\t\"enum_values\": [\"大陆居民身份证\", \"港澳台通行证\"] \t\t\t}, \t\t\t\"need_encrypt\": false \t\t}, \t\t{ \t\t\t\"item_id\": \"100006\", \t\t\t\"field_name\": \"inland_cert_card_image\", \t\t\t\"name\": \"大陆居民身份证照片\", \t\t\t\"type\": 2, \t\t\t\"tips\": \"请上传图片\", \t\t\t\"placeholder\": \"\", \t\t\t\"tooltip\": \"需要正面和反面两张照片\", \t\t\t\"required\": 1, \t\t\t\"need_encrypt\": false, \t\t\t\"file_check_rule\": { \t\t\t\t\"min_list_length\": 2, \t\t\t\t\"max_list_length\": 2, \t\t\t\t\"enum_file_exts\": [\"png\", \"jpg\", \"jpeg\"], \t\t\t\t\"max_file_size\": 5 \t\t\t}, \t\t\t\"relations\": [{ \t\t\t\t\"source_key\": 100005, \t\t\t\t\"source_value\": \"大陆居民身份证\" \t\t\t}] \t\t} \t] }"
+ }
+ ],
+ "offset": 10,
+ "limit": 5,
+ "total_count": 1234
+}