diff --git a/docs/WechatTenpayV3/Basic_ModelDefinition.md b/docs/WechatTenpayV3/Basic_ModelDefinition.md
index 770ed0cf..8e189b16 100644
--- a/docs/WechatTenpayV3/Basic_ModelDefinition.md
+++ b/docs/WechatTenpayV3/Basic_ModelDefinition.md
@@ -994,6 +994,14 @@
- 微信支付预约单号查询预约商家转账记录:`GetPlatformSolutionMerchantTransferReservationByReservationId`
+ - 平台收付通(商家充值)
+
+ - 申请充值:`ApplyPlatformSolutionEcommerceRecharge`
+
+ - 查询充值结果:`GetPlatformSolutionEcommerceRechargeByOutRechargeNumber`
+
+ - 关闭充值:`ClosePlatformSolutionEcommerceRecharge`
+
- 代金券
- 创建代金券批次:`CreateMarketingFavorStock`
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/_Partner/PlatformSolution/PlatformSolutionRechargeResource.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/_Partner/PlatformSolution/PlatformSolutionRechargeResource.cs
new file mode 100644
index 00000000..3b8bb304
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/_Partner/PlatformSolution/PlatformSolutionRechargeResource.cs
@@ -0,0 +1,148 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Events
+{
+ ///
+ /// 表示 RECHARGE.SUCCESS (仅限服务商)通知的数据。
+ /// 表示 RECHARGE.CLOSED (仅限服务商)通知的数据。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ public class PlatformSolutionRechargeResource : WechatTenpayEvent.Types.IDecryptedResource
+ {
+ public static class Types
+ {
+ public class RechargeAmount : Models.GetPlatformSolutionEcommerceRechargeByOutRechargeNumberResponse.Types.RechargeAmount
+ {
+ }
+
+ public class BankTransferInfo : Models.GetPlatformSolutionEcommerceRechargeByOutRechargeNumberResponse.Types.BankTransferInfo
+ {
+ }
+
+ public class QrRechargeInfo : Models.GetPlatformSolutionEcommerceRechargeByOutRechargeNumberResponse.Types.QrRechargeInfo
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置微信商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("sp_mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sp_mchid")]
+ public string MerchantId { get; set; } = default!;
+
+ ///
+ /// 获取或设置二级商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
+ public string SubMerchantId { get; set; } = default!;
+
+ ///
+ /// 获取或设置商户充值单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_recharge_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_recharge_no")]
+ public string OutRechargeNumber { get; set; } = default!;
+
+ ///
+ /// 获取或设置微信充值单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("recharge_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("recharge_id")]
+ public string RechargeId { get; set; } = default!;
+
+ ///
+ /// 获取或设置充值渠道。
+ ///
+ [Newtonsoft.Json.JsonProperty("recharge_channel")]
+ [System.Text.Json.Serialization.JsonPropertyName("recharge_channel")]
+ public string? RechargeChannel { get; set; }
+
+ ///
+ /// 获取或设置充值场景。
+ ///
+ [Newtonsoft.Json.JsonProperty("recharge_scene")]
+ [System.Text.Json.Serialization.JsonPropertyName("recharge_scene")]
+ public string RechargeScene { get; set; } = default!;
+
+ ///
+ /// 获取或设置充值状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("recharge_state")]
+ [System.Text.Json.Serialization.JsonPropertyName("recharge_state")]
+ public string RechargeState { get; set; } = default!;
+
+ ///
+ /// 获取或设置充值状态描述。
+ ///
+ [Newtonsoft.Json.JsonProperty("recharge_state_desc")]
+ [System.Text.Json.Serialization.JsonPropertyName("recharge_state_desc")]
+ public string? RechargeSceneDescription { get; set; }
+
+ ///
+ /// 获取或设置充值入账账户。
+ ///
+ [Newtonsoft.Json.JsonProperty("account_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("account_type")]
+ public string AccountType { get; set; } = default!;
+
+ ///
+ /// 获取或设置充值金额信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("recharge_amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("recharge_amount")]
+ public Types.RechargeAmount RechargeAmount { get; set; } = default!;
+
+ ///
+ /// 获取或设置转账充值的付款信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("bank_transfer_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("bank_transfer_info")]
+ public Types.BankTransferInfo? BankTransferInfo { get; set; }
+
+ ///
+ /// 获取或设置扫码充值的付款信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("qr_recharge_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("qr_recharge_info")]
+ public Types.QrRechargeInfo? QrRechargeInfo { get; set; }
+
+ ///
+ /// 获取或设置充值受理时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("accept_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("accept_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? AcceptTime { get; set; }
+
+ ///
+ /// 获取或设置充值成功时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("success_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("success_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? SuccessTime { get; set; }
+
+ ///
+ /// 获取或设置充值关闭时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("close_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("close_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? CloseTime { get; set; }
+
+ ///
+ /// 获取或设置备注。
+ ///
+ [Newtonsoft.Json.JsonProperty("remark")]
+ [System.Text.Json.Serialization.JsonPropertyName("remark")]
+ public string? Remark { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePlatformSolutionExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePlatformSolutionExtensions.cs
index 202d5ee9..4630f018 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePlatformSolutionExtensions.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePlatformSolutionExtensions.cs
@@ -8,6 +8,76 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
{
public static class WechatTenpayClientExecutePlatformSolutionExtensions
{
+ #region EcommerceRecharges
+ ///
+ /// 异步调用 [POST] /platsolution/ecommerce/recharges/apply 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteApplyPlatformSolutionEcommerceRechargeAsync(this WechatTenpayClient client, Models.ApplyPlatformSolutionEcommerceRechargeRequest 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, "platsolution", "ecommerce", "recharges", "apply");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [GET] /platsolution/ecommerce/recharges/out-recharge-no/{out_recharge_no} 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteGetPlatformSolutionEcommerceRechargeByOutRechargeNumberAsync(this WechatTenpayClient client, Models.GetPlatformSolutionEcommerceRechargeByOutRechargeNumberRequest 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, "platsolution", "ecommerce", "recharges", "out-recharge-no", request.OutRechargeNumber)
+ .SetQueryParam("sub_mchid", request.SubMerchantId);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /platsolution/ecommerce/recharges/out-recharge-no/{out_recharge_no}/close 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteClosePlatformSolutionEcommerceRechargeAsync(this WechatTenpayClient client, Models.ClosePlatformSolutionEcommerceRechargeRequest 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, "platsolution", "ecommerce", "recharges", "out-recharge-no", request.OutRechargeNumber, "close")
+ .SetQueryParam("sub_mchid", request.SubMerchantId);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+ #endregion
+
#region MerchantTransfer
///
/// 异步调用 [POST] /platsolution/mch-transfer/batches/apply 接口。
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/EcommerceRecharges/ApplyPlatformSolutionEcommerceRechargeRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/EcommerceRecharges/ApplyPlatformSolutionEcommerceRechargeRequest.cs
new file mode 100644
index 00000000..d21b3cd8
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/EcommerceRecharges/ApplyPlatformSolutionEcommerceRechargeRequest.cs
@@ -0,0 +1,70 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /platsolution/ecommerce/recharges/apply 接口的请求。
+ ///
+ public class ApplyPlatformSolutionEcommerceRechargeRequest : WechatTenpayRequest
+ {
+ public static class Types
+ {
+ public class RechargeAmount
+ {
+ ///
+ /// 获取或设置金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("amount")]
+ public int? Amount { get; set; }
+
+ ///
+ /// 获取或设置币种。
+ ///
+ [Newtonsoft.Json.JsonProperty("currency")]
+ [System.Text.Json.Serialization.JsonPropertyName("currency")]
+ public string? Currency { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置二级商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
+ public string SubMerchantId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户充值单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_recharge_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_recharge_no")]
+ public string OutRechargeNumber { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置充值场景。
+ ///
+ [Newtonsoft.Json.JsonProperty("recharge_scene")]
+ [System.Text.Json.Serialization.JsonPropertyName("recharge_scene")]
+ public string RechargeScene { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置充值入账账户。
+ ///
+ [Newtonsoft.Json.JsonProperty("account_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("account_type")]
+ public string AccountType { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置充值金额信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("recharge_amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("recharge_amount")]
+ public Types.RechargeAmount RechargeAmount { get; set; } = new Types.RechargeAmount();
+
+ ///
+ /// 获取或设置回调通知地址。
+ ///
+ [Newtonsoft.Json.JsonProperty("notify_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("notify_url")]
+ public string? NotifyUrl { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/EcommerceRecharges/ApplyPlatformSolutionEcommerceRechargeResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/EcommerceRecharges/ApplyPlatformSolutionEcommerceRechargeResponse.cs
new file mode 100644
index 00000000..dc3ff8c0
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/EcommerceRecharges/ApplyPlatformSolutionEcommerceRechargeResponse.cs
@@ -0,0 +1,31 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /platsolution/ecommerce/recharges/apply 接口的响应。
+ ///
+ public class ApplyPlatformSolutionEcommerceRechargeResponse : WechatTenpayResponse
+ {
+ ///
+ /// 获取或设置商户充值单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_recharge_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_recharge_no")]
+ public string OutRechargeNumber { get; set; } = default!;
+
+ ///
+ /// 获取或设置微信充值单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("recharge_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("recharge_id")]
+ public string RechargeId { get; set; } = default!;
+
+ ///
+ /// 获取或设置充值链接。
+ ///
+ [Newtonsoft.Json.JsonProperty("recharge_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("recharge_url")]
+ public string RechargeUrl { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/EcommerceRecharges/ClosePlatformSolutionEcommerceRechargeRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/EcommerceRecharges/ClosePlatformSolutionEcommerceRechargeRequest.cs
new file mode 100644
index 00000000..b00a8494
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/EcommerceRecharges/ClosePlatformSolutionEcommerceRechargeRequest.cs
@@ -0,0 +1,22 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /platsolution/ecommerce/recharges/out-recharge-no/{out_recharge_no}/close 接口的请求。
+ ///
+ public class ClosePlatformSolutionEcommerceRechargeRequest : 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 OutRechargeNumber { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/EcommerceRecharges/ClosePlatformSolutionEcommerceRechargeResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/EcommerceRecharges/ClosePlatformSolutionEcommerceRechargeResponse.cs
new file mode 100644
index 00000000..9ce68c08
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/EcommerceRecharges/ClosePlatformSolutionEcommerceRechargeResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /platsolution/ecommerce/recharges/out-recharge-no/{out_recharge_no}/close 接口的响应。
+ ///
+ public class ClosePlatformSolutionEcommerceRechargeResponse : GetPlatformSolutionEcommerceRechargeByOutRechargeNumberResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/EcommerceRecharges/GetPlatformSolutionEcommerceRechargeByOutRechargeNumberRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/EcommerceRecharges/GetPlatformSolutionEcommerceRechargeByOutRechargeNumberRequest.cs
new file mode 100644
index 00000000..0e1d4a22
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/EcommerceRecharges/GetPlatformSolutionEcommerceRechargeByOutRechargeNumberRequest.cs
@@ -0,0 +1,22 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /platsolution/ecommerce/recharges/out-recharge-no/{out_recharge_no} 接口的请求。
+ ///
+ public class GetPlatformSolutionEcommerceRechargeByOutRechargeNumberRequest : 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 OutRechargeNumber { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/EcommerceRecharges/GetPlatformSolutionEcommerceRechargeByOutRechargeNumberResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/EcommerceRecharges/GetPlatformSolutionEcommerceRechargeByOutRechargeNumberResponse.cs
new file mode 100644
index 00000000..dde2b203
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PlatformSolution/EcommerceRecharges/GetPlatformSolutionEcommerceRechargeByOutRechargeNumberResponse.cs
@@ -0,0 +1,198 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /platsolution/ecommerce/recharges/out-recharge-no/{out_recharge_no} 接口的响应。
+ ///
+ public class GetPlatformSolutionEcommerceRechargeByOutRechargeNumberResponse : WechatTenpayResponse
+ {
+ public static class Types
+ {
+ public class RechargeAmount
+ {
+ ///
+ /// 获取或设置金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("amount")]
+ public int? Amount { get; set; }
+
+ ///
+ /// 获取或设置币种。
+ ///
+ [Newtonsoft.Json.JsonProperty("currency")]
+ [System.Text.Json.Serialization.JsonPropertyName("currency")]
+ public string? Currency { get; set; }
+ }
+
+ public class BankTransferInfo
+ {
+ ///
+ /// 获取或设置转入的银行流水单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("bill_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("bill_no")]
+ public string? BillNumber { get; set; }
+
+ ///
+ /// 获取或设置转账充值附言。
+ ///
+ [Newtonsoft.Json.JsonProperty("memo")]
+ [System.Text.Json.Serialization.JsonPropertyName("memo")]
+ public string? Memo { get; set; }
+
+ ///
+ /// 获取或设置银行转账退回时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("return_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("return_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? ReturnTime { get; set; }
+
+ ///
+ /// 获取或设置银行转账退回原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("return_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("return_reason")]
+ public string? ReturnReason { get; set; }
+
+ ///
+ /// 获取或设置开户银行名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("bank_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("bank_name")]
+ public string? BankName { get; set; }
+
+ ///
+ /// 获取或设置银行卡号后四位。
+ ///
+ [Newtonsoft.Json.JsonProperty("bank_card_tail")]
+ [System.Text.Json.Serialization.JsonPropertyName("bank_card_tail")]
+ public string? BankCardNumberTail { get; set; }
+ }
+
+ public class QrRechargeInfo
+ {
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string? OpenId { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置微信商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("sp_mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sp_mchid")]
+ public string MerchantId { get; set; } = default!;
+
+ ///
+ /// 获取或设置二级商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
+ public string SubMerchantId { get; set; } = default!;
+
+ ///
+ /// 获取或设置商户充值单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_recharge_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_recharge_no")]
+ public string OutRechargeNumber { get; set; } = default!;
+
+ ///
+ /// 获取或设置微信充值单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("recharge_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("recharge_id")]
+ public string RechargeId { get; set; } = default!;
+
+ ///
+ /// 获取或设置充值渠道。
+ ///
+ [Newtonsoft.Json.JsonProperty("recharge_channel")]
+ [System.Text.Json.Serialization.JsonPropertyName("recharge_channel")]
+ public string? RechargeChannel { get; set; }
+
+ ///
+ /// 获取或设置充值场景。
+ ///
+ [Newtonsoft.Json.JsonProperty("recharge_scene")]
+ [System.Text.Json.Serialization.JsonPropertyName("recharge_scene")]
+ public string RechargeScene { get; set; } = default!;
+
+ ///
+ /// 获取或设置充值状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("recharge_state")]
+ [System.Text.Json.Serialization.JsonPropertyName("recharge_state")]
+ public string RechargeState { get; set; } = default!;
+
+ ///
+ /// 获取或设置充值状态描述。
+ ///
+ [Newtonsoft.Json.JsonProperty("recharge_state_desc")]
+ [System.Text.Json.Serialization.JsonPropertyName("recharge_state_desc")]
+ public string? RechargeSceneDescription { get; set; }
+
+ ///
+ /// 获取或设置充值入账账户。
+ ///
+ [Newtonsoft.Json.JsonProperty("account_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("account_type")]
+ public string AccountType { get; set; } = default!;
+
+ ///
+ /// 获取或设置充值金额信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("recharge_amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("recharge_amount")]
+ public Types.RechargeAmount RechargeAmount { get; set; } = default!;
+
+ ///
+ /// 获取或设置转账充值的付款信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("bank_transfer_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("bank_transfer_info")]
+ public Types.BankTransferInfo? BankTransferInfo { get; set; }
+
+ ///
+ /// 获取或设置扫码充值的付款信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("qr_recharge_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("qr_recharge_info")]
+ public Types.QrRechargeInfo? QrRechargeInfo { get; set; }
+
+ ///
+ /// 获取或设置充值受理时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("accept_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("accept_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? AcceptTime { get; set; }
+
+ ///
+ /// 获取或设置充值成功时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("success_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("success_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? SuccessTime { get; set; }
+
+ ///
+ /// 获取或设置充值关闭时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("close_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("close_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? CloseTime { get; set; }
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/_/_Partner/PlatformSolution/PlatformSolutionRechargeResource.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/_/_Partner/PlatformSolution/PlatformSolutionRechargeResource.json
new file mode 100644
index 00000000..aa9563cb
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/_/_Partner/PlatformSolution/PlatformSolutionRechargeResource.json
@@ -0,0 +1,28 @@
+{
+ "sp_mchid": "1900001109",
+ "sub_mchid": "1900001121",
+ "out_recharge_no": "cz202407181234",
+ "recharge_id": "100000202405180012345678",
+ "recharge_scene": "ECOMMERCE_DEPOSIT",
+ "account_type": "DEPOSIT",
+ "recharge_channel": "QR_RECHARGE",
+ "recharge_amount": {
+ "amount": 500000,
+ "currency": "CNY"
+ },
+ "recharge_state": "SUCCESS",
+ "recharge_state_desc": "充值成功",
+ "accept_time": "2015-05-19T13:29:35+08:00",
+ "success_time": "2015-05-20T14:29:35+08:00",
+ "close_time": "2015-05-20T14:29:35+08:00",
+ "remark": "备注",
+ "qr_recharge_info": {
+ "openid": "owYiu0WOJdGCYxoHrPabGhI39uT4"
+ },
+ "bank_transfer_info": {
+ "bill_no": "111111",
+ "memo": "转账充值附言",
+ "bank_name": "中国银行",
+ "bank_card_tail": "0722"
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/EcommerceRecharges/ApplyPlatformSolutionEcommerceRechargeRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/EcommerceRecharges/ApplyPlatformSolutionEcommerceRechargeRequest.json
new file mode 100644
index 00000000..93aaeece
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/EcommerceRecharges/ApplyPlatformSolutionEcommerceRechargeRequest.json
@@ -0,0 +1,11 @@
+{
+ "sub_mchid": "1900001109",
+ "out_recharge_no": "cz202407181234",
+ "recharge_scene": "ECOMMERCE_DEPOSIT",
+ "account_type": "DEPOSIT",
+ "recharge_amount": {
+ "amount": 500000,
+ "currency": "CNY"
+ },
+ "notify_url": "https://www.weixin.qq.com/wxpay/pay.php"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/EcommerceRecharges/ApplyPlatformSolutionEcommerceRechargeResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/EcommerceRecharges/ApplyPlatformSolutionEcommerceRechargeResponse.json
new file mode 100644
index 00000000..3295b064
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/EcommerceRecharges/ApplyPlatformSolutionEcommerceRechargeResponse.json
@@ -0,0 +1,5 @@
+{
+ "recharge_id": "172207846292553701",
+ "out_recharge_no": "cz202407181234",
+ "recharge_url": "https://www.payapp.qq.com/plat/recharge.html"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/EcommerceRecharges/ClosePlatformSolutionEcommerceRechargeResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/EcommerceRecharges/ClosePlatformSolutionEcommerceRechargeResponse.json
new file mode 100644
index 00000000..2b271d85
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/EcommerceRecharges/ClosePlatformSolutionEcommerceRechargeResponse.json
@@ -0,0 +1,29 @@
+{
+ "sp_mchid": "1900001109",
+ "sub_mchid": "1900001121",
+ "recharge_id": "172234484162395401",
+ "out_recharge_no": "cz2020042013",
+ "recharge_channel": "BANK_TRANSFER",
+ "account_type": "DEPOSIT",
+ "recharge_state": "SUCCESS",
+ "recharge_scene": "ECOMMERCE_DEPOSIT",
+ "recharge_state_desc": "超过时间限制,系统自动关闭充值单",
+ "recharge_amount": {
+ "amount": 500000,
+ "currency": "CNY"
+ },
+ "bank_transfer_info": {
+ "bill_no": "110240620400046628001252733345",
+ "memo": "转账充值附言",
+ "return_time": "2015-05-20T13:29:35+08:00",
+ "return_reason": "银行转账充值金额与申请充值金额不一致",
+ "bank_name": "中国银行",
+ "bank_card_tail": "0722"
+ },
+ "qr_recharge_info": {
+ "openid": "owYiu0WOJdGCYxoHrPabGhI39uT4"
+ },
+ "accept_time": "2015-05-20T13:29:35+08:00",
+ "success_time": "2015-05-20T13:29:35+08:00",
+ "close_time": "2015-05-20T13:29:35+08:00"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/EcommerceRecharges/GetPlatformSolutionEcommerceRechargeByOutRechargeNumberResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/EcommerceRecharges/GetPlatformSolutionEcommerceRechargeByOutRechargeNumberResponse.json
new file mode 100644
index 00000000..2b271d85
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PlatformSolution/EcommerceRecharges/GetPlatformSolutionEcommerceRechargeByOutRechargeNumberResponse.json
@@ -0,0 +1,29 @@
+{
+ "sp_mchid": "1900001109",
+ "sub_mchid": "1900001121",
+ "recharge_id": "172234484162395401",
+ "out_recharge_no": "cz2020042013",
+ "recharge_channel": "BANK_TRANSFER",
+ "account_type": "DEPOSIT",
+ "recharge_state": "SUCCESS",
+ "recharge_scene": "ECOMMERCE_DEPOSIT",
+ "recharge_state_desc": "超过时间限制,系统自动关闭充值单",
+ "recharge_amount": {
+ "amount": 500000,
+ "currency": "CNY"
+ },
+ "bank_transfer_info": {
+ "bill_no": "110240620400046628001252733345",
+ "memo": "转账充值附言",
+ "return_time": "2015-05-20T13:29:35+08:00",
+ "return_reason": "银行转账充值金额与申请充值金额不一致",
+ "bank_name": "中国银行",
+ "bank_card_tail": "0722"
+ },
+ "qr_recharge_info": {
+ "openid": "owYiu0WOJdGCYxoHrPabGhI39uT4"
+ },
+ "accept_time": "2015-05-20T13:29:35+08:00",
+ "success_time": "2015-05-20T13:29:35+08:00",
+ "close_time": "2015-05-20T13:29:35+08:00"
+}