feat(tenpayv3): 新增商户管理与交易拦截记录相关接口
Some checks failed
CodeQL / Analyze (csharp) (push) Has been cancelled
CodeLint / Lint (push) Has been cancelled

This commit is contained in:
Fu Diwei
2025-10-10 09:32:07 +08:00
parent 442708063b
commit fbf21c20b1
30 changed files with 1125 additions and 0 deletions

View File

@@ -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
{
/// <summary>
/// <para>异步调用 [GET] /mch-manage/mch-manage-records/sub-mchid/{sub_mchid} 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4014940381 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.QueryMerchantManageRecordsResponse> 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<Models.QueryMerchantManageRecordsResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [GET] /mch-manage/mch-manage-records/{manage_record_id} 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4014940383 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.GetMerchantManageRecordResponse> 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<Models.GetMerchantManageRecordResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /mch-manage/mch-manage-records/{manage_record_id}/mch-manage-submissions 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4014940417 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CreateMerchantManageRecordSubmissionResponse> 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<Models.CreateMerchantManageRecordSubmissionResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /mch-manage/submission-files/sub-mchid/{sub_mchid}/upload 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4014940425 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.UploadMerchantManageSubmissionFileResponse> 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<Models.UploadMerchantManageSubmissionFileResponse>(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken).ConfigureAwait(false);
}
}
}

View File

@@ -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
{
/// <summary>
/// <para>异步调用 [GET] /transaction-block/transaction-block-records/sub-mchid/{sub_mchid} 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4014940432 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.QueryTransactionBlockRecordsResponse> 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<Models.QueryTransactionBlockRecordsResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [GET] /transaction-block/transaction-block-records/{block_record_id} 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4014940435 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.GetTransactionBlockRecordResponse> 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<Models.GetTransactionBlockRecordResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /transaction-block/transaction-block-submissions/sub-mchid/{sub_mchid} 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4014940446 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CreateTransactionBlockSubmissionResponse> 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<Models.CreateTransactionBlockSubmissionResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [GET] /transaction-block/transaction-block-submissions/{block_submission_id} 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4014940449 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.GetTransactionBlockSubmissionResponse> 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<Models.GetTransactionBlockSubmissionResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
}
}

View File

@@ -0,0 +1,29 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /mch-manage/mch-manage-records/{manage_record_id}/mch-manage-submissions 接口的请求。</para>
/// </summary>
public class CreateMerchantManageRecordSubmissionRequest : WechatTenpayRequest
{
/// <summary>
/// 获取或设置子商户号。
/// </summary>
[Newtonsoft.Json.JsonProperty("sub_mchid")]
[System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
public string SubMerchantId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置商户管理记录 ID。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string ManageRecordId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置提交数据JSON 格式)。
/// </summary>
[Newtonsoft.Json.JsonProperty("submit_data")]
[System.Text.Json.Serialization.JsonPropertyName("submit_data")]
public string SubmitData { get; set; } = "{}";
}
}

View File

@@ -0,0 +1,15 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /mch-manage/mch-manage-records/{manage_record_id}/mch-manage-submissions 接口的响应。</para>
/// </summary>
public class CreateMerchantManageRecordSubmissionResponse : WechatTenpayResponse
{
/// <summary>
/// 获取或设置商户管理提交资料记录 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("manage_submission_id")]
[System.Text.Json.Serialization.JsonPropertyName("manage_submission_id")]
public string ManageSubmissionId { get; set; } = default!;
}
}

View File

@@ -0,0 +1,22 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [GET] /mch-manage/mch-manage-records/{manage_record_id} 接口的请求。</para>
/// </summary>
public class GetMerchantManageRecordRequest : WechatTenpayRequest
{
/// <summary>
/// 获取或设置子商户号。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string SubMerchantId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置商户管理记录 ID。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string ManageRecordId { get; set; } = string.Empty;
}
}

View File

@@ -0,0 +1,139 @@
using System;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [GET] /mch-manage/mch-manage-records/{manage_record_id} 接口的响应。</para>
/// </summary>
public class GetMerchantManageRecordResponse : WechatTenpayResponse
{
/// <summary>
/// 获取或设置子商户号。
/// </summary>
[Newtonsoft.Json.JsonProperty("sub_mchid")]
[System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
public string SubMerchantId { get; set; } = default!;
/// <summary>
/// 获取或设置商户管理记录 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("manage_record_id")]
[System.Text.Json.Serialization.JsonPropertyName("manage_record_id")]
public string ManageRecordId { get; set; } = default!;
/// <summary>
/// 获取或设置商户管理记录类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("manage_record_type")]
[System.Text.Json.Serialization.JsonPropertyName("manage_record_type")]
public string ManageRecordType { get; set; } = default!;
/// <summary>
/// 获取或设置商户管理记录状态。
/// </summary>
[Newtonsoft.Json.JsonProperty("manage_record_state")]
[System.Text.Json.Serialization.JsonPropertyName("manage_record_state")]
public string ManageRecordState { get; set; } = default!;
/// <summary>
/// 获取或设置管控时间。
/// </summary>
[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; }
/// <summary>
/// 获取或设置管控原因。
/// </summary>
[Newtonsoft.Json.JsonProperty("manage_reason")]
[System.Text.Json.Serialization.JsonPropertyName("manage_reason")]
public string ManageReason { get; set; } = default!;
/// <summary>
/// 获取或设置限制功能。
/// </summary>
[Newtonsoft.Json.JsonProperty("limit_ability")]
[System.Text.Json.Serialization.JsonPropertyName("limit_ability")]
public string? LimitAbility { get; set; }
/// <summary>
/// 获取或设置解除管控方式。
/// </summary>
[Newtonsoft.Json.JsonProperty("recover_way")]
[System.Text.Json.Serialization.JsonPropertyName("recover_way")]
public string? RecoverWay { get; set; }
/// <summary>
/// 获取或设置是否允许提交资料。
/// </summary>
[Newtonsoft.Json.JsonProperty("allow_submit")]
[System.Text.Json.Serialization.JsonPropertyName("allow_submit")]
public bool IsAllowSubmit { get; set; }
/// <summary>
/// 获取或设置禁止提交资料原因。
/// </summary>
[Newtonsoft.Json.JsonProperty("forbid_submit_reason")]
[System.Text.Json.Serialization.JsonPropertyName("forbid_submit_reason")]
public string? ForbidSubmitReason { get; set; }
/// <summary>
/// 获取或设置可提交资料开始时间。
/// </summary>
[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; }
/// <summary>
/// 获取或设置可提交资料结束时间。
/// </summary>
[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; }
/// <summary>
/// 获取或设置要求提交的资料JSON 格式)。
/// </summary>
[Newtonsoft.Json.JsonProperty("requested_item_info")]
[System.Text.Json.Serialization.JsonPropertyName("requested_item_info")]
public string? RequestedData { get; set; }
/// <summary>
/// 获取或设置解除管控原因。
/// </summary>
[Newtonsoft.Json.JsonProperty("recover_reason")]
[System.Text.Json.Serialization.JsonPropertyName("recover_reason")]
public string? RecoverReason { get; set; }
/// <summary>
/// 获取或设置解除管控时间。
/// </summary>
[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; }
/// <summary>
/// 获取或设置申诉驳回原因。
/// </summary>
[Newtonsoft.Json.JsonProperty("reject_reason")]
[System.Text.Json.Serialization.JsonPropertyName("reject_reason")]
public string? RejectReason { get; set; }
/// <summary>
/// 获取或设置审核时间。
/// </summary>
[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; }
}
}

View File

@@ -0,0 +1,44 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [GET] /mch-manage/mch-manage-records/sub-mchid/{sub_mchid} 接口的请求。</para>
/// </summary>
public class QueryMerchantManageRecordsRequest : WechatTenpayRequest
{
/// <summary>
/// 获取或设置子商户号。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string SubMerchantId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置商户管理记录类型。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string? ManageRecordType { get; set; }
/// <summary>
/// 获取或设置商户管理记录状态。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string? ManageRecordState { get; set; }
/// <summary>
/// 获取或设置分页大小。
/// <para>默认值10</para>
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public int Limit { get; set; }
/// <summary>
/// 获取或设置分页开始位置。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public int? Offset { get; set; }
}
}

View File

@@ -0,0 +1,173 @@
using System;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [GET] /mch-manage/mch-manage-records/sub-mchid/{sub_mchid} 接口的响应。</para>
/// </summary>
public class QueryMerchantManageRecordsResponse : WechatTenpayResponse
{
public static class Types
{
public class Record
{
/// <summary>
/// 获取或设置子商户号。
/// </summary>
[Newtonsoft.Json.JsonProperty("sub_mchid")]
[System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
public string SubMerchantId { get; set; } = default!;
/// <summary>
/// 获取或设置商户管理记录 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("manage_record_id")]
[System.Text.Json.Serialization.JsonPropertyName("manage_record_id")]
public string ManageRecordId { get; set; } = default!;
/// <summary>
/// 获取或设置商户管理记录类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("manage_record_type")]
[System.Text.Json.Serialization.JsonPropertyName("manage_record_type")]
public string ManageRecordType { get; set; } = default!;
/// <summary>
/// 获取或设置商户管理记录状态。
/// </summary>
[Newtonsoft.Json.JsonProperty("manage_record_state")]
[System.Text.Json.Serialization.JsonPropertyName("manage_record_state")]
public string ManageRecordState { get; set; } = default!;
/// <summary>
/// 获取或设置管控时间。
/// </summary>
[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; }
/// <summary>
/// 获取或设置管控原因。
/// </summary>
[Newtonsoft.Json.JsonProperty("manage_reason")]
[System.Text.Json.Serialization.JsonPropertyName("manage_reason")]
public string ManageReason { get; set; } = default!;
/// <summary>
/// 获取或设置限制功能。
/// </summary>
[Newtonsoft.Json.JsonProperty("limit_ability")]
[System.Text.Json.Serialization.JsonPropertyName("limit_ability")]
public string? LimitAbility { get; set; }
/// <summary>
/// 获取或设置解除管控方式。
/// </summary>
[Newtonsoft.Json.JsonProperty("recover_way")]
[System.Text.Json.Serialization.JsonPropertyName("recover_way")]
public string? RecoverWay { get; set; }
/// <summary>
/// 获取或设置是否允许提交资料。
/// </summary>
[Newtonsoft.Json.JsonProperty("allow_submit")]
[System.Text.Json.Serialization.JsonPropertyName("allow_submit")]
public bool IsAllowSubmit { get; set; }
/// <summary>
/// 获取或设置禁止提交资料原因。
/// </summary>
[Newtonsoft.Json.JsonProperty("forbid_submit_reason")]
[System.Text.Json.Serialization.JsonPropertyName("forbid_submit_reason")]
public string? ForbidSubmitReason { get; set; }
/// <summary>
/// 获取或设置可提交资料开始时间。
/// </summary>
[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; }
/// <summary>
/// 获取或设置可提交资料结束时间。
/// </summary>
[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; }
/// <summary>
/// 获取或设置要求提交的资料JSON 格式)。
/// </summary>
[Newtonsoft.Json.JsonProperty("requested_item_info")]
[System.Text.Json.Serialization.JsonPropertyName("requested_item_info")]
public string? RequestedData { get; set; }
/// <summary>
/// 获取或设置解除管控原因。
/// </summary>
[Newtonsoft.Json.JsonProperty("recover_reason")]
[System.Text.Json.Serialization.JsonPropertyName("recover_reason")]
public string? RecoverReason { get; set; }
/// <summary>
/// 获取或设置解除管控时间。
/// </summary>
[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; }
/// <summary>
/// 获取或设置申诉驳回原因。
/// </summary>
[Newtonsoft.Json.JsonProperty("reject_reason")]
[System.Text.Json.Serialization.JsonPropertyName("reject_reason")]
public string? RejectReason { get; set; }
/// <summary>
/// 获取或设置审核时间。
/// </summary>
[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; }
}
}
/// <summary>
/// 获取或设置商户管理记录列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("data")]
[System.Text.Json.Serialization.JsonPropertyName("data")]
public Types.Record[] RecordList { get; set; } = default!;
/// <summary>
/// 获取或设置分页大小。
/// </summary>
[Newtonsoft.Json.JsonProperty("limit")]
[System.Text.Json.Serialization.JsonPropertyName("limit")]
public int Limit { get; set; }
/// <summary>
/// 获取或设置分页开始位置。
/// </summary>
[Newtonsoft.Json.JsonProperty("offset")]
[System.Text.Json.Serialization.JsonPropertyName("offset")]
public int Offset { get; set; }
/// <summary>
/// 获取或设置券总数量。
/// </summary>
[Newtonsoft.Json.JsonProperty("total_count")]
[System.Text.Json.Serialization.JsonPropertyName("total_count")]
public int TotalCount { get; set; }
}
}

View File

@@ -0,0 +1,52 @@
using System;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /mch-manage/submission-files/sub-mchid/{sub_mchid}/upload 接口的请求。</para>
/// </summary>
public class UploadMerchantManageSubmissionFileRequest : WechatTenpayRequest
{
/// <summary>
/// 获取或设置子商户号。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string SubMerchantId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置资料项 ID。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string ItemId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置文件字节数组。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public byte[] FileBytes { get; set; } = Array.Empty<byte>();
/// <summary>
/// 获取或设置文件名。如果不指定将由系统自动生成。
/// </summary>
[Newtonsoft.Json.JsonProperty("file_name")]
[System.Text.Json.Serialization.JsonPropertyName("file_name")]
public string? FileName { get; set; }
/// <summary>
/// 获取或设置文件摘要。如果不指定将由系统自动生成。
/// </summary>
[Newtonsoft.Json.JsonProperty("file_digest")]
[System.Text.Json.Serialization.JsonPropertyName("file_digest")]
public string? FileHash { get; set; }
/// <summary>
/// 获取或设置文件 Conent-Type。如果不指定将由系统自动生成。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string? FileContentType { get; set; }
}
}

View File

@@ -0,0 +1,15 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /mch-manage/submission-files/sub-mchid/{sub_mchid}/upload 接口的响应。</para>
/// </summary>
public class UploadMerchantManageSubmissionFileResponse : WechatTenpayResponse
{
/// <summary>
/// 获取或设置文件 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("file_id")]
[System.Text.Json.Serialization.JsonPropertyName("file_id")]
public string FileId { get; set; } = default!;
}
}

View File

@@ -0,0 +1,29 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /transaction-block/transaction-block-submissions/sub-mchid/{sub_mchid} 接口的请求。</para>
/// </summary>
public class CreateTransactionBlockSubmissionRequest : WechatTenpayRequest
{
/// <summary>
/// 获取或设置子商户号。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string SubMerchantId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置商户申诉单号。
/// </summary>
[Newtonsoft.Json.JsonProperty("merchant_submit_id")]
[System.Text.Json.Serialization.JsonPropertyName("merchant_submit_id")]
public string MerchantSubmitId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置提交数据JSON 格式)。
/// </summary>
[Newtonsoft.Json.JsonProperty("submit_data")]
[System.Text.Json.Serialization.JsonPropertyName("submit_data")]
public string SubmitData { get; set; } = "{}";
}
}

View File

@@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /transaction-block/transaction-block-submissions/sub-mchid/{sub_mchid} 接口的响应。</para>
/// </summary>
public class CreateTransactionBlockSubmissionResponse : GetTransactionBlockSubmissionResponse
{
}
}

View File

@@ -0,0 +1,22 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [GET] /transaction-block/transaction-block-records/{block_record_id} 接口的请求。</para>
/// </summary>
public class GetTransactionBlockRecordRequest : WechatTenpayRequest
{
/// <summary>
/// 获取或设置子商户号。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string SubMerchantId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置交易拦截记录 ID。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string BlockRecordId { get; set; } = string.Empty;
}
}

View File

@@ -0,0 +1,54 @@
using System;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [GET] /transaction-block/transaction-block-records/{block_record_id} 接口的响应。</para>
/// </summary>
public class GetTransactionBlockRecordResponse : WechatTenpayResponse
{
/// <summary>
/// 获取或设置交易拦截记录 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("block_record_id")]
[System.Text.Json.Serialization.JsonPropertyName("block_record_id")]
public string BlockRecordId { get; set; } = default!;
/// <summary>
/// 获取或设置拦截时间。
/// </summary>
[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; }
/// <summary>
/// 获取或设置拦截原因。
/// </summary>
[Newtonsoft.Json.JsonProperty("block_reason")]
[System.Text.Json.Serialization.JsonPropertyName("block_reason")]
public string BlockReason { get; set; } = default!;
/// <summary>
/// 获取或设置拦截笔数。
/// </summary>
[Newtonsoft.Json.JsonProperty("number_of_block")]
[System.Text.Json.Serialization.JsonPropertyName("number_of_block")]
public string? NumberOfBlock { get; set; }
/// <summary>
/// 获取或设置解除管控方式。
/// </summary>
[Newtonsoft.Json.JsonProperty("recover_way")]
[System.Text.Json.Serialization.JsonPropertyName("recover_way")]
public string? RecoverWay { get; set; }
/// <summary>
/// 获取或设置要求提交的资料JSON 格式)。
/// </summary>
[Newtonsoft.Json.JsonProperty("requested_item_info")]
[System.Text.Json.Serialization.JsonPropertyName("requested_item_info")]
public string? RequestedData { get; set; }
}
}

View File

@@ -0,0 +1,15 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [GET] /transaction-block/transaction-block-submissions/{block_submission_id} 接口的请求。</para>
/// </summary>
public class GetTransactionBlockSubmissionRequest : WechatTenpayRequest
{
/// <summary>
/// 获取或设置交易拦截申诉 ID。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string BlockSubmissionId { get; set; } = string.Empty;
}
}

View File

@@ -0,0 +1,49 @@
using System;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [GET] /transaction-block/transaction-block-submissions/{block_submission_id} 接口的响应。</para>
/// </summary>
public class GetTransactionBlockSubmissionResponse : WechatTenpayResponse
{
/// <summary>
/// 获取或设置交易拦截申诉 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("block_submission_id")]
[System.Text.Json.Serialization.JsonPropertyName("block_submission_id")]
public string BlockSubmissionId { get; set; } = default!;
/// <summary>
/// 获取或设置提交时间。
/// </summary>
[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; }
/// <summary>
/// 获取或设置审核结果。
/// </summary>
[Newtonsoft.Json.JsonProperty("review_result")]
[System.Text.Json.Serialization.JsonPropertyName("review_result")]
public string? ReviewResult { get; set; }
/// <summary>
/// 获取或设置审核时间。
/// </summary>
[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; }
/// <summary>
/// 获取或设置审核驳回原因。
/// </summary>
[Newtonsoft.Json.JsonProperty("review_reject_reason")]
[System.Text.Json.Serialization.JsonPropertyName("review_reject_reason")]
public string? ReviewRejectReason { get; set; }
}
}

View File

@@ -0,0 +1,30 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [GET] /transaction-block/transaction-block-records/sub-mchid/{sub_mchid} 接口的请求。</para>
/// </summary>
public class QueryTransactionBlockRecordsRequest : WechatTenpayRequest
{
/// <summary>
/// 获取或设置子商户号。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string SubMerchantId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置分页大小。
/// <para>默认值10</para>
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public int Limit { get; set; }
/// <summary>
/// 获取或设置分页开始位置。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public int? Offset { get; set; }
}
}

View File

@@ -0,0 +1,88 @@
using System;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [GET] /transaction-block/transaction-block-records/sub-mchid/{sub_mchid} 接口的响应。</para>
/// </summary>
public class QueryTransactionBlockRecordsResponse : WechatTenpayResponse
{
public static class Types
{
public class Record
{
/// <summary>
/// 获取或设置交易拦截记录 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("block_record_id")]
[System.Text.Json.Serialization.JsonPropertyName("block_record_id")]
public string BlockRecordId { get; set; } = default!;
/// <summary>
/// 获取或设置拦截时间。
/// </summary>
[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; }
/// <summary>
/// 获取或设置拦截原因。
/// </summary>
[Newtonsoft.Json.JsonProperty("block_reason")]
[System.Text.Json.Serialization.JsonPropertyName("block_reason")]
public string BlockReason { get; set; } = default!;
/// <summary>
/// 获取或设置拦截笔数。
/// </summary>
[Newtonsoft.Json.JsonProperty("number_of_block")]
[System.Text.Json.Serialization.JsonPropertyName("number_of_block")]
public string? NumberOfBlock { get; set; }
/// <summary>
/// 获取或设置解除管控方式。
/// </summary>
[Newtonsoft.Json.JsonProperty("recover_way")]
[System.Text.Json.Serialization.JsonPropertyName("recover_way")]
public string? RecoverWay { get; set; }
/// <summary>
/// 获取或设置要求提交的资料JSON 格式)。
/// </summary>
[Newtonsoft.Json.JsonProperty("requested_item_info")]
[System.Text.Json.Serialization.JsonPropertyName("requested_item_info")]
public string? RequestedData { get; set; }
}
}
/// <summary>
/// 获取或设置交易拦截记录列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("data")]
[System.Text.Json.Serialization.JsonPropertyName("data")]
public Types.Record[] RecordList { get; set; } = default!;
/// <summary>
/// 获取或设置分页大小。
/// </summary>
[Newtonsoft.Json.JsonProperty("limit")]
[System.Text.Json.Serialization.JsonPropertyName("limit")]
public int Limit { get; set; }
/// <summary>
/// 获取或设置分页开始位置。
/// </summary>
[Newtonsoft.Json.JsonProperty("offset")]
[System.Text.Json.Serialization.JsonPropertyName("offset")]
public int Offset { get; set; }
/// <summary>
/// 获取或设置券总数量。
/// </summary>
[Newtonsoft.Json.JsonProperty("total_count")]
[System.Text.Json.Serialization.JsonPropertyName("total_count")]
public int TotalCount { get; set; }
}
}