From 9d5fa9b09f21371eecb79a3101ff25e55d94c5fa Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Sun, 28 Apr 2024 16:17:44 +0800 Subject: [PATCH] =?UTF-8?q?feat(tenpayv3):=20=E6=96=B0=E5=A2=9E=E5=95=86?= =?UTF-8?q?=E5=AE=B6=E8=BD=AC=E8=B4=A6=E5=88=B0=E9=9B=B6=E9=92=B1=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E5=9B=9E=E8=B0=83=E9=80=9A=E7=9F=A5=E6=A8=A1=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MerchantTransferBatchClosedResource.cs | 72 ++++++++++++++ .../MerchantTransferBatchFinishedResource.cs | 93 +++++++++++++++++++ .../MerchantTransferBillFinishedResource.cs | 81 ++++++++++++++++ .../MerchantTransferBatchClosedResource.json | 10 ++ ...MerchantTransferBatchFinishedResource.json | 13 +++ .../MerchantTransferBillFinishedResource.json | 11 +++ 6 files changed, 280 insertions(+) create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/Transfer/MerchantTransferBatchClosedResource.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/Transfer/MerchantTransferBatchFinishedResource.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/Transfer/MerchantTransferBillFinishedResource.cs create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/Transfer/MerchantTransferBatchClosedResource.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/Transfer/MerchantTransferBatchFinishedResource.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/Transfer/MerchantTransferBillFinishedResource.json diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/Transfer/MerchantTransferBatchClosedResource.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/Transfer/MerchantTransferBatchClosedResource.cs new file mode 100644 index 00000000..e28f2f73 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/Transfer/MerchantTransferBatchClosedResource.cs @@ -0,0 +1,72 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Events +{ + /// + /// 表示 MCHTRANSFER.BATCH.CLOSED 通知的数据。 + /// + /// REF:
+ ///
+ ///
+ ///
+ public class MerchantTransferBatchClosedResource : WechatTenpayEvent.Types.IDecryptedResource + { + /// + /// 获取或设置微信商户号。 + /// + [Newtonsoft.Json.JsonProperty("mchid")] + [System.Text.Json.Serialization.JsonPropertyName("mchid")] + public string MerchantId { get; set; } = default!; + + /// + /// 获取或设置商户批次单号。 + /// + [Newtonsoft.Json.JsonProperty("out_batch_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_batch_no")] + public string OutTradeNumber { get; set; } = default!; + + /// + /// 获取或设置微信批次单号。 + /// + [Newtonsoft.Json.JsonProperty("batch_id")] + [System.Text.Json.Serialization.JsonPropertyName("batch_id")] + public string BatchId { get; set; } = default!; + + /// + /// 获取或设置批次状态。 + /// + [Newtonsoft.Json.JsonProperty("batch_status")] + [System.Text.Json.Serialization.JsonPropertyName("batch_status")] + public string BatchStatus { get; set; } = default!; + + /// + /// 获取或设置转账总金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("total_amount")] + [System.Text.Json.Serialization.JsonPropertyName("total_amount")] + public int TotalAmount { get; set; } + + /// + /// 获取或设置转账总笔数。 + /// + [Newtonsoft.Json.JsonProperty("total_num")] + [System.Text.Json.Serialization.JsonPropertyName("total_num")] + public int TotalNumber { get; set; } + + /// + /// 获取或设置批次关闭原因。 + /// + [Newtonsoft.Json.JsonProperty("close_reason")] + [System.Text.Json.Serialization.JsonPropertyName("close_reason")] + public string CloseReason { get; set; } = default!; + + /// + /// 获取或设置批次更新时间。 + /// + [Newtonsoft.Json.JsonProperty("update_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("update_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))] + public DateTimeOffset UpdateTime { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/Transfer/MerchantTransferBatchFinishedResource.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/Transfer/MerchantTransferBatchFinishedResource.cs new file mode 100644 index 00000000..010f03ef --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/Transfer/MerchantTransferBatchFinishedResource.cs @@ -0,0 +1,93 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Events +{ + /// + /// 表示 MCHTRANSFER.BATCH.FINISHED 通知的数据。 + /// + /// REF:
+ ///
+ ///
+ ///
+ public class MerchantTransferBatchFinishedResource : WechatTenpayEvent.Types.IDecryptedResource + { + /// + /// 获取或设置微信商户号。 + /// + [Newtonsoft.Json.JsonProperty("mchid")] + [System.Text.Json.Serialization.JsonPropertyName("mchid")] + public string MerchantId { get; set; } = default!; + + /// + /// 获取或设置商户批次单号。 + /// + [Newtonsoft.Json.JsonProperty("out_batch_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_batch_no")] + public string OutTradeNumber { get; set; } = default!; + + /// + /// 获取或设置微信批次单号。 + /// + [Newtonsoft.Json.JsonProperty("batch_id")] + [System.Text.Json.Serialization.JsonPropertyName("batch_id")] + public string BatchId { get; set; } = default!; + + /// + /// 获取或设置批次状态。 + /// + [Newtonsoft.Json.JsonProperty("batch_status")] + [System.Text.Json.Serialization.JsonPropertyName("batch_status")] + public string BatchStatus { get; set; } = default!; + + /// + /// 获取或设置转账总金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("total_amount")] + [System.Text.Json.Serialization.JsonPropertyName("total_amount")] + public int TotalAmount { get; set; } + + /// + /// 获取或设置转账总笔数。 + /// + [Newtonsoft.Json.JsonProperty("total_num")] + [System.Text.Json.Serialization.JsonPropertyName("total_num")] + public int TotalNumber { get; set; } + + /// + /// 获取或设置转账成功金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("success_amount")] + [System.Text.Json.Serialization.JsonPropertyName("success_amount")] + public int SuccessAmount { get; set; } + + /// + /// 获取或设置转账成功笔数。 + /// + [Newtonsoft.Json.JsonProperty("success_num")] + [System.Text.Json.Serialization.JsonPropertyName("success_num")] + public int SuccessNumber { get; set; } + + /// + /// 获取或设置转账失败金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("fail_amount")] + [System.Text.Json.Serialization.JsonPropertyName("fail_amount")] + public int FailAmount { get; set; } + + /// + /// 获取或设置转账失败笔数。 + /// + [Newtonsoft.Json.JsonProperty("fail_num")] + [System.Text.Json.Serialization.JsonPropertyName("fail_num")] + public int FailNumber { get; set; } + + /// + /// 获取或设置批次更新时间。 + /// + [Newtonsoft.Json.JsonProperty("update_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("update_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))] + public DateTimeOffset UpdateTime { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/Transfer/MerchantTransferBillFinishedResource.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/Transfer/MerchantTransferBillFinishedResource.cs new file mode 100644 index 00000000..d7728c4e --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/Transfer/MerchantTransferBillFinishedResource.cs @@ -0,0 +1,81 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Events +{ + /// + /// 表示 MCHTRANSFER.BILL.FINISHED 通知的数据。 + /// + /// REF:
+ ///
+ ///
+ ///
+ public class MerchantTransferBillFinishedResource : WechatTenpayEvent.Types.IDecryptedResource + { + /// + /// 获取或设置微信商户号。 + /// + [Newtonsoft.Json.JsonProperty("mchid")] + [System.Text.Json.Serialization.JsonPropertyName("mchid")] + public string MerchantId { get; set; } = default!; + + /// + /// 获取或设置商户转账单号 + /// + [Newtonsoft.Json.JsonProperty("out_bill_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_bill_no")] + public string OutBillNumber { get; set; } = default!; + + /// + /// 获取或设置微信转账单号。 + /// + [Newtonsoft.Json.JsonProperty("transfer_bill_no")] + [System.Text.Json.Serialization.JsonPropertyName("transfer_bill_no")] + public string TransferBillNumber { get; set; } = default!; + + /// + /// 获取或设置单据状态。 + /// + [Newtonsoft.Json.JsonProperty("state")] + [System.Text.Json.Serialization.JsonPropertyName("state")] + public string State { get; set; } = default!; + + /// + /// 获取或设置转账金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("transfer_amount")] + [System.Text.Json.Serialization.JsonPropertyName("transfer_amount")] + public int TransferAmount { get; set; } + + /// + /// 获取或设置收款用户的 OpenId。 + /// + [Newtonsoft.Json.JsonProperty("openid")] + [System.Text.Json.Serialization.JsonPropertyName("openid")] + public string? OpenId { get; set; } + + /// + /// 获取或设置失败原因。 + /// + [Newtonsoft.Json.JsonProperty("fail_reason")] + [System.Text.Json.Serialization.JsonPropertyName("fail_reason")] + public string? FailReason { get; set; } + + /// + /// 获取或设置更新时间。 + /// + [Newtonsoft.Json.JsonProperty("update_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("update_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))] + public DateTimeOffset UpdateTime { get; set; } + + /// + /// 获取或设置创建时间。 + /// + [Newtonsoft.Json.JsonProperty("create_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("create_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))] + public DateTimeOffset CreateTime { get; set; } + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/Transfer/MerchantTransferBatchClosedResource.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/Transfer/MerchantTransferBatchClosedResource.json new file mode 100644 index 00000000..7e6b708b --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/Transfer/MerchantTransferBatchClosedResource.json @@ -0,0 +1,10 @@ +{ + "out_batch_no": "bfatestnotify000033", + "batch_id": "131000007026709999520922023081519403795655", + "batch_status": "FINISHED", + "total_num": 2, + "total_amount": 200, + "close_reason": "批次关闭原因", + "mchid": "2483775951", + "update_time": "2023-08-15T20:33:22+08:00" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/Transfer/MerchantTransferBatchFinishedResource.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/Transfer/MerchantTransferBatchFinishedResource.json new file mode 100644 index 00000000..53509823 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/Transfer/MerchantTransferBatchFinishedResource.json @@ -0,0 +1,13 @@ +{ + "out_batch_no": "bfatestnotify000033", + "batch_id": "131000007026709999520922023081519403795655", + "batch_status": "FINISHED", + "total_num": 2, + "total_amount": 200, + "success_amount": 100, + "success_num": 1, + "fail_amount": 100, + "fail_num": 1, + "mchid": "2483775951", + "update_time": "2023-08-15T20:33:22+08:00" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/Transfer/MerchantTransferBillFinishedResource.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/Transfer/MerchantTransferBillFinishedResource.json new file mode 100644 index 00000000..67e78755 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/Transfer/MerchantTransferBillFinishedResource.json @@ -0,0 +1,11 @@ +{ + "mchid": "1900001109", + "out_bill_no": "plfk2020042013", + "transfer_bill_no": "1330000071100999991182020050700019480001", + "state": "ACCEPTED", + "transfer_amount": 400000, + "fail_reason": "PAYEE_ACCOUNT_ABNORMAL", + "openid": "o-MYE42l80oelYMDE34nYD456Xoy", + "create_time": "2015-05-20T13:29:35.120+08:00", + "update_time": "example_update_time" +}