From f0e032849b70b9638b7a6dd28aefe5b12e2dc5cd Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Tue, 11 Apr 2023 15:27:07 +0800 Subject: [PATCH] =?UTF-8?q?feat(tenpaybusiness):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E9=80=80=E6=AC=BE=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Events/Payment/PaymentEvent.cs | 2 +- .../Events/Refund/RefundEvent.cs | 90 +++++++++++++++++++ ...yBusinessClientExecuteRefundsExtensions.cs | 68 ++++++++++++++ .../GetPaymentByOutPaymentIdResponse.cs | 1 - .../Payments/GetPaymentByPaymentIdResponse.cs | 6 +- .../Models/Refunds/CreateRefundRequest.cs | 64 +++++++++++++ .../Models/Refunds/CreateRefundResponse.cs | 9 ++ .../Refunds/GetRefundByOutRefundIdRequest.cs | 15 ++++ .../Refunds/GetRefundByOutRefundIdResponse.cs | 9 ++ .../Refunds/GetRefundByRefundIdRequest.cs | 15 ++++ .../Refunds/GetRefundByRefundIdResponse.cs | 84 +++++++++++++++++ .../EventSamples/Refund/RefundEvent.json | 20 +++++ .../GetPaymentByPaymentIdResponse.json | 2 +- .../Refunds/CreateRefundRequest.json | 10 +++ .../Refunds/CreateRefundResponse.json | 12 +++ .../GetRefundByOutRefundIdResponse.json | 12 +++ .../Refunds/GetRefundByRefundIdResponse.json | 12 +++ 17 files changed, 425 insertions(+), 6 deletions(-) create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Events/Refund/RefundEvent.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Extensions/WechatTenpayBusinessClientExecuteRefundsExtensions.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Models/Refunds/CreateRefundRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Models/Refunds/CreateRefundResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Models/Refunds/GetRefundByOutRefundIdRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Models/Refunds/GetRefundByOutRefundIdResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Models/Refunds/GetRefundByRefundIdRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Models/Refunds/GetRefundByRefundIdResponse.cs create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayBusiness.UnitTests/EventSamples/Refund/RefundEvent.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayBusiness.UnitTests/ModelSamples/Refunds/CreateRefundRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayBusiness.UnitTests/ModelSamples/Refunds/CreateRefundResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayBusiness.UnitTests/ModelSamples/Refunds/GetRefundByOutRefundIdResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayBusiness.UnitTests/ModelSamples/Refunds/GetRefundByRefundIdResponse.json diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Events/Payment/PaymentEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Events/Payment/PaymentEvent.cs index eafcfdb3..a978ae54 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Events/Payment/PaymentEvent.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Events/Payment/PaymentEvent.cs @@ -69,7 +69,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayBusiness.Events [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339NullableDateTimeOffsetConverter))] [System.Text.Json.Serialization.JsonPropertyName("pay_succ_time")] [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339NullableDateTimeOffsetConverter))] - public DateTimeOffset? PaySuccessTime { get; set; } + public DateTimeOffset? SucceedTime { get; set; } } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Events/Refund/RefundEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Events/Refund/RefundEvent.cs new file mode 100644 index 00000000..c8d1708a --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Events/Refund/RefundEvent.cs @@ -0,0 +1,90 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayBusiness.Events +{ + /// + /// 表示 mse_refund.succeeded 通知的数据。 + /// + public class RefundEvent : WechatTenpayBusinessEvent + { + public static class Types + { + public class EventContent + { + /// + /// 获取或设置平台退款单号。 + /// + [Newtonsoft.Json.JsonProperty("out_refund_id")] + [System.Text.Json.Serialization.JsonPropertyName("out_refund_id")] + public string OutRefundId { get; set; } = default!; + + /// + /// 获取或设置微企付退款单号。 + /// + [Newtonsoft.Json.JsonProperty("refund_id")] + [System.Text.Json.Serialization.JsonPropertyName("refund_id")] + public string RefundId { get; set; } = default!; + + /// + /// 获取或设置平台支付单号。 + /// + [Newtonsoft.Json.JsonProperty("out_payment_id")] + [System.Text.Json.Serialization.JsonPropertyName("out_payment_id")] + public string OutPaymentId { get; set; } = default!; + + /// + /// 获取或设置微企付支付单号。 + /// + [Newtonsoft.Json.JsonProperty("payment_id")] + [System.Text.Json.Serialization.JsonPropertyName("payment_id")] + public string PaymentId { get; set; } = default!; + + /// + /// 获取或设置原支付金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("total_amount")] + [System.Text.Json.Serialization.JsonPropertyName("total_amount")] + public int TotalAmount { get; set; } + + /// + /// 获取或设置退款金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("refund_amount")] + [System.Text.Json.Serialization.JsonPropertyName("refund_amount")] + public int RefundAmount { get; set; } + + /// + /// 获取或设置退款原因。 + /// + [Newtonsoft.Json.JsonProperty("refund_reason")] + [System.Text.Json.Serialization.JsonPropertyName("refund_reason")] + public string? RefundReason { get; set; } + + /// + /// 获取或设置退款状态。 + /// + [Newtonsoft.Json.JsonProperty("status")] + [System.Text.Json.Serialization.JsonPropertyName("status")] + public string Status { get; set; } = default!; + + /// + /// 获取或设置退款成功时间。 + /// + [Newtonsoft.Json.JsonProperty("succeeded_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339NullableDateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("succeeded_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339NullableDateTimeOffsetConverter))] + public DateTimeOffset? SucceedTime { get; set; } + + /// + /// 获取或设置退款创建时间。 + /// + [Newtonsoft.Json.JsonProperty("created_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("created_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339DateTimeOffsetConverter))] + public DateTimeOffset CreateTime { get; set; } + } + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Extensions/WechatTenpayBusinessClientExecuteRefundsExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Extensions/WechatTenpayBusinessClientExecuteRefundsExtensions.cs new file mode 100644 index 00000000..95a45c26 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Extensions/WechatTenpayBusinessClientExecuteRefundsExtensions.cs @@ -0,0 +1,68 @@ +using System; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using Flurl.Http; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayBusiness +{ + public static class WechatTenpayBusinessClientExecuteRefundsExtensions + { + /// + /// 异步调用 [POST] /mse-pay/refunds 接口。 + /// REF: https://businesspay.qq.com/p/doc/mse/api/server.html#%E9%80%80%E6%AC%BE%E7%94%B3%E8%AF%B7 + /// + /// + /// + /// + /// + public static async Task ExecuteCreateRefundAsync(this WechatTenpayBusinessClient client, Models.CreateRefundRequest 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, "mse-pay", "refunds"); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /mse-pay/refunds/out-refund-id/{out_refund_id} 接口。 + /// REF: https://businesspay.qq.com/p/doc/mse/api/server.html#%E9%80%80%E6%AC%BE%E6%9F%A5%E8%AF%A2-%E5%A4%96%E5%8D%95%E5%8F%B7 + /// + /// + /// + /// + /// + public static async Task ExecuteGetRefundByOutRefundIdAsync(this WechatTenpayBusinessClient client, Models.GetRefundByOutRefundIdRequest 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, "mse-pay", "refunds", "out-refund-id", request.OutRefundId); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /mse-pay/refunds/refund-id/{refund_id} 接口。 + /// REF: https://businesspay.qq.com/p/doc/mse/api/server.html#%E9%80%80%E6%AC%BE%E6%9F%A5%E8%AF%A2-%E5%86%85%E5%8D%95%E5%8F%B7 + /// + /// + /// + /// + /// + public static async Task ExecuteGetRefundByRefundIdAsync(this WechatTenpayBusinessClient client, Models.GetRefundByRefundIdRequest 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, "mse-pay", "refunds", "refund-id", request.RefundId); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Models/Payments/GetPaymentByOutPaymentIdResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Models/Payments/GetPaymentByOutPaymentIdResponse.cs index 8e38295d..49576e37 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Models/Payments/GetPaymentByOutPaymentIdResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Models/Payments/GetPaymentByOutPaymentIdResponse.cs @@ -3,7 +3,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayBusiness.Models /// /// 表示 [GET] /mse-pay/payments/out-payment-id/{out_payment_id} 接口的响应。 /// - [WechatTenpayBusinessSensitive] public class GetPaymentByOutPaymentIdResponse : GetPaymentByPaymentIdResponse { } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Models/Payments/GetPaymentByPaymentIdResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Models/Payments/GetPaymentByPaymentIdResponse.cs index 5db197e1..6a6199b5 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Models/Payments/GetPaymentByPaymentIdResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Models/Payments/GetPaymentByPaymentIdResponse.cs @@ -125,9 +125,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayBusiness.Models /// 获取或设置付款时间。 /// [Newtonsoft.Json.JsonProperty("pay_time")] - [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RegularNullableDateTimeOffsetConverter))] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339NullableDateTimeOffsetConverter))] [System.Text.Json.Serialization.JsonPropertyName("pay_time")] - [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RegularNullableDateTimeOffsetConverter))] - public DateTimeOffset? PayTime { get; set; } + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339NullableDateTimeOffsetConverter))] + public DateTimeOffset? SucceedTime { get; set; } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Models/Refunds/CreateRefundRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Models/Refunds/CreateRefundRequest.cs new file mode 100644 index 00000000..eefb34fc --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Models/Refunds/CreateRefundRequest.cs @@ -0,0 +1,64 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayBusiness.Models +{ + /// + /// 表示 [POST] /mse-pay/refunds 接口的请求。 + /// + public class CreateRefundRequest : WechatTenpayBusinessRequest + { + /// + /// 获取或设置企业 ID。 + /// + [Newtonsoft.Json.JsonProperty("ent_id")] + [System.Text.Json.Serialization.JsonPropertyName("ent_id")] + public string EnterpriseId { get; set; } = string.Empty; + + /// + /// 获取或设置平台退款单号。 + /// + [Newtonsoft.Json.JsonProperty("out_refund_id")] + [System.Text.Json.Serialization.JsonPropertyName("out_refund_id")] + public string OutRefundId { get; set; } = string.Empty; + + /// + /// 获取或设置平台支付单号。与字段 二选一。 + /// + [Newtonsoft.Json.JsonProperty("out_payment_id")] + [System.Text.Json.Serialization.JsonPropertyName("out_payment_id")] + public string? OutPaymentId { get; set; } + + /// + /// 获取或设置微企付支付单号。与字段 二选一。 + /// + [Newtonsoft.Json.JsonProperty("payment_id")] + [System.Text.Json.Serialization.JsonPropertyName("payment_id")] + public string? PaymentId { get; set; } + + /// + /// 获取或设置原支付金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("total_amount")] + [System.Text.Json.Serialization.JsonPropertyName("total_amount")] + public int TotalAmount { get; set; } + + /// + /// 获取或设置退款金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("refund_amount")] + [System.Text.Json.Serialization.JsonPropertyName("refund_amount")] + public int RefundAmount { get; set; } + + /// + /// 获取或设置退款原因。 + /// + [Newtonsoft.Json.JsonProperty("refund_reason")] + [System.Text.Json.Serialization.JsonPropertyName("refund_reason")] + public string? RefundReason { get; set; } + + /// + /// 获取或设置退款结果通知 URL。 + /// + [Newtonsoft.Json.JsonProperty("server_notify_url")] + [System.Text.Json.Serialization.JsonPropertyName("server_notify_url")] + public string ServerNotifyUrl { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Models/Refunds/CreateRefundResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Models/Refunds/CreateRefundResponse.cs new file mode 100644 index 00000000..8194d1b9 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Models/Refunds/CreateRefundResponse.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayBusiness.Models +{ + /// + /// 表示 [POST] /mse-pay/refunds 接口的响应。 + /// + public class CreateRefundResponse : GetRefundByRefundIdResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Models/Refunds/GetRefundByOutRefundIdRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Models/Refunds/GetRefundByOutRefundIdRequest.cs new file mode 100644 index 00000000..fdee7a2c --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Models/Refunds/GetRefundByOutRefundIdRequest.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayBusiness.Models +{ + /// + /// 表示 [GET] /mse-pay/refunds/out-refund-id/{out_refund_id} 接口的请求。 + /// + public class GetRefundByOutRefundIdRequest : WechatTenpayBusinessRequest + { + /// + /// 获取或设置平台退款单号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string OutRefundId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Models/Refunds/GetRefundByOutRefundIdResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Models/Refunds/GetRefundByOutRefundIdResponse.cs new file mode 100644 index 00000000..8319589e --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Models/Refunds/GetRefundByOutRefundIdResponse.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayBusiness.Models +{ + /// + /// 表示 [GET] /mse-pay/refunds/out-refund-id/{out_refund_id} 接口的响应。 + /// + public class GetRefundByOutRefundIdResponse : GetRefundByRefundIdResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Models/Refunds/GetRefundByRefundIdRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Models/Refunds/GetRefundByRefundIdRequest.cs new file mode 100644 index 00000000..8a1bf576 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Models/Refunds/GetRefundByRefundIdRequest.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayBusiness.Models +{ + /// + /// 表示 [GET] /mse-pay/refunds/refund-id/{refund_id} 接口的请求。 + /// + public class GetRefundByRefundIdRequest : WechatTenpayBusinessRequest + { + /// + /// 获取或设置微企付退款单号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string RefundId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Models/Refunds/GetRefundByRefundIdResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Models/Refunds/GetRefundByRefundIdResponse.cs new file mode 100644 index 00000000..98e1708c --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayBusiness/Models/Refunds/GetRefundByRefundIdResponse.cs @@ -0,0 +1,84 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayBusiness.Models +{ + /// + /// 表示 [GET] /mse-pay/refunds/refund-id/{refund_id} 接口的响应。 + /// + public class GetRefundByRefundIdResponse : WechatTenpayBusinessResponse + { + /// + /// 获取或设置平台退款单号。 + /// + [Newtonsoft.Json.JsonProperty("out_refund_id")] + [System.Text.Json.Serialization.JsonPropertyName("out_refund_id")] + public string OutRefundId { get; set; } = default!; + + /// + /// 获取或设置微企付退款单号。 + /// + [Newtonsoft.Json.JsonProperty("refund_id")] + [System.Text.Json.Serialization.JsonPropertyName("refund_id")] + public string RefundId { get; set; } = default!; + + /// + /// 获取或设置平台支付单号。 + /// + [Newtonsoft.Json.JsonProperty("out_payment_id")] + [System.Text.Json.Serialization.JsonPropertyName("out_payment_id")] + public string OutPaymentId { get; set; } = default!; + + /// + /// 获取或设置微企付支付单号。 + /// + [Newtonsoft.Json.JsonProperty("payment_id")] + [System.Text.Json.Serialization.JsonPropertyName("payment_id")] + public string PaymentId { get; set; } = default!; + + /// + /// 获取或设置原支付金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("total_amount")] + [System.Text.Json.Serialization.JsonPropertyName("total_amount")] + public int TotalAmount { get; set; } + + /// + /// 获取或设置退款金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("refund_amount")] + [System.Text.Json.Serialization.JsonPropertyName("refund_amount")] + public int RefundAmount { get; set; } + + /// + /// 获取或设置退款原因。 + /// + [Newtonsoft.Json.JsonProperty("refund_reason")] + [System.Text.Json.Serialization.JsonPropertyName("refund_reason")] + public string? RefundReason { get; set; } + + /// + /// 获取或设置退款状态。 + /// + [Newtonsoft.Json.JsonProperty("status")] + [System.Text.Json.Serialization.JsonPropertyName("status")] + public string Status { get; set; } = default!; + + /// + /// 获取或设置退款成功时间。 + /// + [Newtonsoft.Json.JsonProperty("succeeded_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339NullableDateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("succeeded_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339NullableDateTimeOffsetConverter))] + public DateTimeOffset? SucceedTime { get; set; } + + /// + /// 获取或设置退款创建时间。 + /// + [Newtonsoft.Json.JsonProperty("created_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RFC3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("created_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RFC3339DateTimeOffsetConverter))] + public DateTimeOffset CreateTime { get; set; } + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayBusiness.UnitTests/EventSamples/Refund/RefundEvent.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayBusiness.UnitTests/EventSamples/Refund/RefundEvent.json new file mode 100644 index 00000000..5eeec963 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayBusiness.UnitTests/EventSamples/Refund/RefundEvent.json @@ -0,0 +1,20 @@ +{ + "api_version": "", + "event_id": "", + "event_type": "pay.succeeded", + "live_mode": false, + "pending_webhooks": 0, + "create_time": "2020-01-01T01:02:03+08:00", + "event_content": { + "refund_id": "", + "out_refund_id": "", + "payment_id": "", + "out_payment_id": "", + "total_amount": 0, + "refund_amount": 0, + "refund_reason": "", + "status": "", + "succeeded_time": "2021-06-08T10:34:56+08:00", + "created_time": "2021-06-08T10:34:56+08:00" + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayBusiness.UnitTests/ModelSamples/Payments/GetPaymentByPaymentIdResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayBusiness.UnitTests/ModelSamples/Payments/GetPaymentByPaymentIdResponse.json index 56a06669..41258419 100644 --- a/test/SKIT.FlurlHttpClient.Wechat.TenpayBusiness.UnitTests/ModelSamples/Payments/GetPaymentByPaymentIdResponse.json +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayBusiness.UnitTests/ModelSamples/Payments/GetPaymentByPaymentIdResponse.json @@ -15,5 +15,5 @@ "pay_status": "PROCESSING", "memo": "string", "attachment": "string", - "pay_time": "2022-11-15 13:25:18" + "pay_time": "2019-08-24T14:15:22Z" } diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayBusiness.UnitTests/ModelSamples/Refunds/CreateRefundRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayBusiness.UnitTests/ModelSamples/Refunds/CreateRefundRequest.json new file mode 100644 index 00000000..598a9680 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayBusiness.UnitTests/ModelSamples/Refunds/CreateRefundRequest.json @@ -0,0 +1,10 @@ +{ + "ent_id": "string", + "out_refund_id": "string", + "payment_id": "string", + "out_payment_id": "string", + "total_amount": 0, + "refund_amount": 0, + "refund_reason": "string", + "server_notify_url": "string" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayBusiness.UnitTests/ModelSamples/Refunds/CreateRefundResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayBusiness.UnitTests/ModelSamples/Refunds/CreateRefundResponse.json new file mode 100644 index 00000000..56be7144 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayBusiness.UnitTests/ModelSamples/Refunds/CreateRefundResponse.json @@ -0,0 +1,12 @@ +{ + "refund_id": "string", + "out_refund_id": "string", + "payment_id": "string", + "out_payment_id": "string", + "total_amount": 0, + "refund_amount": 0, + "status": "INIT", + "refund_reason": "string", + "succeeded_time": "2019-08-24T14:15:22Z", + "created_time": "2019-08-24T14:15:22Z" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayBusiness.UnitTests/ModelSamples/Refunds/GetRefundByOutRefundIdResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayBusiness.UnitTests/ModelSamples/Refunds/GetRefundByOutRefundIdResponse.json new file mode 100644 index 00000000..56be7144 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayBusiness.UnitTests/ModelSamples/Refunds/GetRefundByOutRefundIdResponse.json @@ -0,0 +1,12 @@ +{ + "refund_id": "string", + "out_refund_id": "string", + "payment_id": "string", + "out_payment_id": "string", + "total_amount": 0, + "refund_amount": 0, + "status": "INIT", + "refund_reason": "string", + "succeeded_time": "2019-08-24T14:15:22Z", + "created_time": "2019-08-24T14:15:22Z" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayBusiness.UnitTests/ModelSamples/Refunds/GetRefundByRefundIdResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayBusiness.UnitTests/ModelSamples/Refunds/GetRefundByRefundIdResponse.json new file mode 100644 index 00000000..56be7144 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayBusiness.UnitTests/ModelSamples/Refunds/GetRefundByRefundIdResponse.json @@ -0,0 +1,12 @@ +{ + "refund_id": "string", + "out_refund_id": "string", + "payment_id": "string", + "out_payment_id": "string", + "total_amount": 0, + "refund_amount": 0, + "status": "INIT", + "refund_reason": "string", + "succeeded_time": "2019-08-24T14:15:22Z", + "created_time": "2019-08-24T14:15:22Z" +}