diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteComplianceExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteComplianceExtensions.cs new file mode 100644 index 00000000..5a8fb9e0 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteComplianceExtensions.cs @@ -0,0 +1,49 @@ +using System; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using Flurl.Http; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 +{ + public static class WechatTenpayClientExecuteComplianceExtensions + { + /// + /// 异步调用 [POST] /compliance/inactive-merchant-identity-verification/merchants 接口。 + /// REF: https://pay.weixin.qq.com/docs/partner/apis/inactive-merchant-identity-verification/inactive-mch-identity-verification/create-inactive-merchant-identity-verification.html + /// + /// + /// + /// + /// + public static async Task ExecuteCreateComplianceInactiveMerchantIdentityVerificationAsync(this WechatTenpayClient client, Models.CreateComplianceInactiveMerchantIdentityVerificationRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateRequest(request, HttpMethod.Post, "compliance", "inactive-merchant-identity-verification", "merchants"); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /compliance/inactive-merchant-identity-verification/merchants/{sub_mchid}/verifications/{verification_id} 接口。 + /// REF: https://pay.weixin.qq.com/docs/partner/apis/inactive-merchant-identity-verification/inactive-mch-identity-verification/query-inactive-merchant-identity-verification.html + /// + /// + /// + /// + /// + public static async Task ExecuteGetComplianceInactiveMerchantIdentityVerificationByVerificationIdAsync(this WechatTenpayClient client, Models.GetComplianceInactiveMerchantIdentityVerificationByVerificationIdRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateRequest(request, HttpMethod.Get, "compliance", "inactive-merchant-identity-verification", "merchants", request.SubMerchantId, "verifications", request.VerificationId); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Compliance/CreateComplianceInactiveMerchantIdentityVerificationRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Compliance/CreateComplianceInactiveMerchantIdentityVerificationRequest.cs new file mode 100644 index 00000000..ac9c74f6 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Compliance/CreateComplianceInactiveMerchantIdentityVerificationRequest.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /compliance/inactive-merchant-identity-verification/merchants 接口的请求。 + /// + public class CreateComplianceInactiveMerchantIdentityVerificationRequest : WechatTenpayRequest + { + /// + /// 获取或设置微信二级商户号。 + /// + [Newtonsoft.Json.JsonProperty("sub_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")] + public string SubMerchantId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Compliance/CreateComplianceInactiveMerchantIdentityVerificationResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Compliance/CreateComplianceInactiveMerchantIdentityVerificationResponse.cs new file mode 100644 index 00000000..f22ca9db --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Compliance/CreateComplianceInactiveMerchantIdentityVerificationResponse.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /compliance/inactive-merchant-identity-verification/merchants 接口的响应。 + /// + public class CreateComplianceInactiveMerchantIdentityVerificationResponse : WechatTenpayResponse + { + /// + /// 获取或设置核实单号。 + /// + [Newtonsoft.Json.JsonProperty("verification_id")] + [System.Text.Json.Serialization.JsonPropertyName("verification_id")] + public string VerificationId { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Compliance/GetComplianceInactiveMerchantIdentityVerificationByVerificationIdRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Compliance/GetComplianceInactiveMerchantIdentityVerificationByVerificationIdRequest.cs new file mode 100644 index 00000000..ded897e9 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Compliance/GetComplianceInactiveMerchantIdentityVerificationByVerificationIdRequest.cs @@ -0,0 +1,22 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /compliance/inactive-merchant-identity-verification/merchants/{sub_mchid}/verifications/{verification_id} 接口的请求。 + /// + public class GetComplianceInactiveMerchantIdentityVerificationByVerificationIdRequest : 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 VerificationId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Compliance/GetComplianceInactiveMerchantIdentityVerificationByVerificationIdResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Compliance/GetComplianceInactiveMerchantIdentityVerificationByVerificationIdResponse.cs new file mode 100644 index 00000000..94d9f666 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Compliance/GetComplianceInactiveMerchantIdentityVerificationByVerificationIdResponse.cs @@ -0,0 +1,56 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /compliance/inactive-merchant-identity-verification/merchants/{sub_mchid}/verifications/{verification_id} 接口的响应。 + /// + public class GetComplianceInactiveMerchantIdentityVerificationByVerificationIdResponse : WechatTenpayResponse + { + /// + /// 获取或设置微信二级商户号。 + /// + [Newtonsoft.Json.JsonProperty("sub_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")] + public string SubMerchantId { get; set; } = default!; + + /// + /// 获取或设置核实单号。 + /// + [Newtonsoft.Json.JsonProperty("verification_id")] + [System.Text.Json.Serialization.JsonPropertyName("verification_id")] + public string VerificationId { get; set; } = default!; + + /// + /// 获取或设置核实单状态。 + /// + [Newtonsoft.Json.JsonProperty("state")] + [System.Text.Json.Serialization.JsonPropertyName("state")] + public string State { get; set; } = default!; + + /// + /// 获取或设置失败原因。 + /// + [Newtonsoft.Json.JsonProperty("fail_reason")] + [System.Text.Json.Serialization.JsonPropertyName("fail_reason")] + public string? FailReason { get; set; } + + /// + /// 获取或设置创建时间。 + /// + [Newtonsoft.Json.JsonProperty("create_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("create_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339DateTimeOffsetConverter))] + public DateTimeOffset CreateTime { get; set; } + + /// + /// 获取或设置完成时间。 + /// + [Newtonsoft.Json.JsonProperty("finish_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339NullableDateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("finish_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339NullableDateTimeOffsetConverter))] + public DateTimeOffset? FinishTime { get; set; } + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/Compliance/CreateComplianceInactiveMerchantIdentityVerificationRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/Compliance/CreateComplianceInactiveMerchantIdentityVerificationRequest.json new file mode 100644 index 00000000..654b0957 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/Compliance/CreateComplianceInactiveMerchantIdentityVerificationRequest.json @@ -0,0 +1,3 @@ +{ + "sub_mchid": "1900000000" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/Compliance/CreateComplianceInactiveMerchantIdentityVerificationResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/Compliance/CreateComplianceInactiveMerchantIdentityVerificationResponse.json new file mode 100644 index 00000000..d82be159 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/Compliance/CreateComplianceInactiveMerchantIdentityVerificationResponse.json @@ -0,0 +1,3 @@ +{ + "verification_id": "28011678863778000000123124312" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/Compliance/GetComplianceInactiveMerchantIdentityVerificationByVerificationIdResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/Compliance/GetComplianceInactiveMerchantIdentityVerificationByVerificationIdResponse.json new file mode 100644 index 00000000..acd28b1d --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/Compliance/GetComplianceInactiveMerchantIdentityVerificationByVerificationIdResponse.json @@ -0,0 +1,8 @@ +{ + "sub_mchid": "1900000000", + "verification_id": "28011678863778000000123124312", + "state": "PROCESSING", + "fail_reason": "MATERIALS_ABNORMAL", + "create_time": "2020-01-01T00:00:00+08:00", + "finish_time": "2020-01-01T00:00:00+08:00" +}