diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/CombineTransactions/CombineTransactionResource.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/CombineTransactions/CombineTransactionResource.cs index 7d7569de..dac33f80 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/CombineTransactions/CombineTransactionResource.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/CombineTransactions/CombineTransactionResource.cs @@ -4,7 +4,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Events /// 表示 TRANSACTION.SUCCESS 通知的数据。 /// /// REF:
+ ///
///
+ ///
///
/// ///
@@ -24,6 +26,10 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Events public class Payer : Models.GetCombineTransactionByCombineOutTradeNumberResponse.Types.Payer { } + + public class Installment : Models.GetCombineTransactionByCombineOutTradeNumberResponse.Types.Installment + { + } } /// @@ -74,5 +80,12 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Events [Newtonsoft.Json.JsonProperty("scene_info")] [System.Text.Json.Serialization.JsonPropertyName("scene_info")] public Types.Scene? Scene { get; set; } + + /// + /// 获取或设置分期信息。 + /// + [Newtonsoft.Json.JsonProperty("installment_info")] + [System.Text.Json.Serialization.JsonPropertyName("installment_info")] + public Types.Installment? Installment { get; set; } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/Transactions/TransactionResource.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/Transactions/TransactionResource.cs index 6a9a633e..465b377e 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/Transactions/TransactionResource.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/Transactions/TransactionResource.cs @@ -34,6 +34,10 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Events public class Promotion : Models.GetPayTransactionByOutTradeNumberResponse.Types.Promotion { } + + public class Installment : Models.GetPayTransactionByOutTradeNumberResponse.Types.Installment + { + } } /// @@ -135,5 +139,12 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Events [Newtonsoft.Json.JsonProperty("promotion_detail")] [System.Text.Json.Serialization.JsonPropertyName("promotion_detail")] public Types.Promotion[]? PromotionList { get; set; } + + /// + /// 获取或设置分期信息。 + /// + [Newtonsoft.Json.JsonProperty("installment_info")] + [System.Text.Json.Serialization.JsonPropertyName("installment_info")] + public Types.Installment? Installment { get; set; } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/_Partner/Transactions/PartnerTransactionResource.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/_Partner/Transactions/PartnerTransactionResource.cs index c498a5d7..e7951c0c 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/_Partner/Transactions/PartnerTransactionResource.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/_Partner/Transactions/PartnerTransactionResource.cs @@ -34,6 +34,10 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Events public class Promotion : Models.GetPayPartnerTransactionByOutTradeNumberResponse.Types.Promotion { } + + public class Installment : Models.GetPayPartnerTransactionByOutTradeNumberResponse.Types.Installment + { + } } /// @@ -149,5 +153,12 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Events [Newtonsoft.Json.JsonProperty("promotion_detail")] [System.Text.Json.Serialization.JsonPropertyName("promotion_detail")] public Types.Promotion[]? PromotionList { get; set; } + + /// + /// 获取或设置分期信息。 + /// + [Newtonsoft.Json.JsonProperty("installment_info")] + [System.Text.Json.Serialization.JsonPropertyName("installment_info")] + public Types.Installment? Installment { get; set; } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteCombineTransactionExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteCombineTransactionExtensions.cs index 4114869c..f12863fd 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteCombineTransactionExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteCombineTransactionExtensions.cs @@ -12,7 +12,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 /// 异步调用 [POST] /combine-transactions/app 接口。 /// /// REF:
+ ///
///
+ ///
///
///
/// @@ -49,8 +51,10 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 /// 异步调用 [POST] /combine-transactions/jsapi 接口。 /// /// REF:
+ ///
///
///
+ ///
///
///
///
@@ -88,7 +92,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 /// 异步调用 [POST] /combine-transactions/h5 接口。 /// /// REF:
+ ///
///
+ ///
///
/// ///
@@ -124,7 +130,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 /// 异步调用 [POST] /combine-transactions/native 接口。 /// /// REF:
+ ///
///
+ ///
///
/// ///
@@ -194,7 +202,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 /// 异步调用 [GET] /combine-transactions/out-trade-no/{combine_out_trade_no} 接口。 /// /// REF:
+ ///
///
+ ///
///
///
/// @@ -241,7 +251,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 /// 异步调用 [POST] /combine-transactions/out-trade-no/{combine_out_trade_no}/close 接口。 /// /// REF:
+ ///
///
+ ///
///
/// ///
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePayInstallmentExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePayInstallmentExtensions.cs new file mode 100644 index 00000000..8dce34fb --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePayInstallmentExtensions.cs @@ -0,0 +1,39 @@ +using System; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using Flurl; +using Flurl.Http; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 +{ + public static class WechatTenpayClientExecutePayInstallmentExtensions + { + #region Exposure + /// + /// 异步调用 [POST] /pay/instal/exposure 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteCreatePayInstallmentExposureAsync(this WechatTenpayClient client, Models.CreatePayInstallmentExposureRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + if (request.MerchantId is null) + request.MerchantId = client.Credentials.MerchantId; + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "pay", "instal", "exposure"); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + #endregion + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePayPartnerInstallmentExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePayPartnerInstallmentExtensions.cs new file mode 100644 index 00000000..7e82375a --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePayPartnerInstallmentExtensions.cs @@ -0,0 +1,38 @@ +using System; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using Flurl.Http; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 +{ + public static class WechatTenpayClientExecutePayPartnerInstallmentExtensions + { + #region Exposure + /// + /// 异步调用 [POST] /pay/instal/partner/exposure 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteCreatePayPartnerInstallmentExposureAsync(this WechatTenpayClient client, Models.CreatePayPartnerInstallmentExposureRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + if (request.MerchantId is null) + request.MerchantId = client.Credentials.MerchantId; + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "pay", "instal", "partner", "exposure"); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + #endregion + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/CombineTransactions/CreateCombineTransactionAppRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/CombineTransactions/CreateCombineTransactionAppRequest.cs index e8266e87..077f646a 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/CombineTransactions/CreateCombineTransactionAppRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/CombineTransactions/CreateCombineTransactionAppRequest.cs @@ -6,6 +6,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models /// /// 表示 [POST] /combine-transactions/app 接口的请求。 /// + [WechatTenpaySensitive] public class CreateCombineTransactionAppRequest : WechatTenpayRequest { public static class Types @@ -70,6 +71,13 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models [System.Text.Json.Serialization.JsonPropertyName("sub_appid")] public string? SubAppId { get; set; } + /// + /// 获取或设置商品服务类型。 + /// + [Newtonsoft.Json.JsonProperty("order_service_type")] + [System.Text.Json.Serialization.JsonPropertyName("order_service_type")] + public string? OrderServiceType { get; set; } + /// /// 获取或设置个人收款方受理授权 ID。 /// @@ -129,6 +137,37 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models public class Payer { + public static class Types + { + public class Identity + { + /// + /// 获取或设置证件类型。 + /// + [Newtonsoft.Json.JsonProperty("type")] + [System.Text.Json.Serialization.JsonPropertyName("type")] + public string? IdentityType { get; set; } + + /// + /// 获取或设置证件姓名(需使用平台公钥/证书加密)。 + /// + [Newtonsoft.Json.JsonProperty("name")] + [System.Text.Json.Serialization.JsonPropertyName("name")] + [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_RSA_2048_WITH_SHA256, algorithm: Constants.EncryptionAlgorithms.RSA_2048_ECB_PKCS8_OAEP_WITH_SHA1_AND_MGF1)] + [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_SM2_WITH_SM3, algorithm: Constants.EncryptionAlgorithms.SM2_C1C3C2_ASN1)] + public string? IdName { get; set; } + + /// + /// 获取或设置证件号码(需使用平台公钥/证书加密)。 + /// + [Newtonsoft.Json.JsonProperty("number")] + [System.Text.Json.Serialization.JsonPropertyName("number")] + [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_RSA_2048_WITH_SHA256, algorithm: Constants.EncryptionAlgorithms.RSA_2048_ECB_PKCS8_OAEP_WITH_SHA1_AND_MGF1)] + [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_SM2_WITH_SM3, algorithm: Constants.EncryptionAlgorithms.SM2_C1C3C2_ASN1)] + public string? IdNumber { get; set; } + } + } + /// /// 获取或设置用户唯一标识。 /// @@ -142,6 +181,13 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models [Newtonsoft.Json.JsonProperty("sub_openid")] [System.Text.Json.Serialization.JsonPropertyName("sub_openid")] public string? SubOpenId { get; set; } + + /// + /// 获取或设置实名支付信息。 + /// + [Newtonsoft.Json.JsonProperty("identity")] + [System.Text.Json.Serialization.JsonPropertyName("identity")] + public Types.Identity? Identity { get; set; } } public class Scene @@ -160,6 +206,10 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models [System.Text.Json.Serialization.JsonPropertyName("device_id")] public string? DeviceId { get; set; } } + + public class Subsidy : CreatePayTransactionAppRequest.Types.Subsidy + { + } } /// @@ -235,5 +285,12 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models [Newtonsoft.Json.JsonProperty("trade_scenario")] [System.Text.Json.Serialization.JsonPropertyName("trade_scenario")] public string? TradeScenario { get; set; } + + /// + /// 获取或设置贴息信息。 + /// + [Newtonsoft.Json.JsonProperty("subsidy_info")] + [System.Text.Json.Serialization.JsonPropertyName("subsidy_info")] + public Types.Subsidy? Subsidy { get; set; } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/CombineTransactions/CreateCombineTransactionH5Request.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/CombineTransactions/CreateCombineTransactionH5Request.cs index 7be30af6..198e44d0 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/CombineTransactions/CreateCombineTransactionH5Request.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/CombineTransactions/CreateCombineTransactionH5Request.cs @@ -6,6 +6,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models /// /// 表示 [POST] /combine-transactions/h5 接口的请求。 /// + [WechatTenpaySensitive] public class CreateCombineTransactionH5Request : WechatTenpayRequest { public static class Types @@ -14,6 +15,10 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models { } + public class Payer : CreateCombineTransactionAppRequest.Types.Payer + { + } + public class Scene : CreateCombineTransactionAppRequest.Types.Scene { public static class Types @@ -85,6 +90,13 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models [System.Text.Json.Serialization.JsonPropertyName("sub_orders")] public IList SubOrderList { get; set; } = new List(); + /// + /// 获取或设置支付者信息。 + /// + [Newtonsoft.Json.JsonProperty("combine_payer_info")] + [System.Text.Json.Serialization.JsonPropertyName("combine_payer_info")] + public Types.Payer? CombinePayer { get; set; } + /// /// 获取或设置场景信息。 /// diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/CombineTransactions/CreateCombineTransactionJsapiRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/CombineTransactions/CreateCombineTransactionJsapiRequest.cs index 6f5ba1c7..f2ce8552 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/CombineTransactions/CreateCombineTransactionJsapiRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/CombineTransactions/CreateCombineTransactionJsapiRequest.cs @@ -6,6 +6,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models /// /// 表示 [POST] /combine-transactions/jsapi 接口的请求。 /// + [WechatTenpaySensitive] public class CreateCombineTransactionJsapiRequest : WechatTenpayRequest { public static class Types @@ -21,6 +22,10 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models public class Scene : CreateCombineTransactionAppRequest.Types.Scene { } + + public class Subsidy : CreateCombineTransactionAppRequest.Types.Subsidy + { + } } /// @@ -96,5 +101,12 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models [Newtonsoft.Json.JsonProperty("trade_scenario")] [System.Text.Json.Serialization.JsonPropertyName("trade_scenario")] public string? TradeScenario { get; set; } + + /// + /// 获取或设置贴息信息。 + /// + [Newtonsoft.Json.JsonProperty("subsidy_info")] + [System.Text.Json.Serialization.JsonPropertyName("subsidy_info")] + public Types.Subsidy? Subsidy { get; set; } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/CombineTransactions/CreateCombineTransactionNativeRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/CombineTransactions/CreateCombineTransactionNativeRequest.cs index 0a539049..0702d772 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/CombineTransactions/CreateCombineTransactionNativeRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/CombineTransactions/CreateCombineTransactionNativeRequest.cs @@ -14,6 +14,10 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models { } + public class Payer : CreateCombineTransactionAppRequest.Types.Payer + { + } + public class Scene : CreateCombineTransactionAppRequest.Types.Scene { } @@ -72,6 +76,13 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models [System.Text.Json.Serialization.JsonPropertyName("sub_orders")] public IList SubOrderList { get; set; } = new List(); + /// + /// 获取或设置支付者信息。 + /// + [Newtonsoft.Json.JsonProperty("combine_payer_info")] + [System.Text.Json.Serialization.JsonPropertyName("combine_payer_info")] + public Types.Payer? CombinePayer { get; set; } + /// /// 获取或设置场景信息。 /// diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/CombineTransactions/GetCombineTransactionByCombineOutTradeNumberResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/CombineTransactions/GetCombineTransactionByCombineOutTradeNumberResponse.cs index 13d8a3c8..9c64b461 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/CombineTransactions/GetCombineTransactionByCombineOutTradeNumberResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/CombineTransactions/GetCombineTransactionByCombineOutTradeNumberResponse.cs @@ -172,6 +172,10 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models [System.Text.Json.Serialization.JsonPropertyName("device_id")] public string? DeviceId { get; set; } } + + public class Installment : GetPayTransactionByOutTradeNumberResponse.Types.Installment + { + } } /// @@ -229,5 +233,12 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models [Newtonsoft.Json.JsonProperty("trade_scenario")] [System.Text.Json.Serialization.JsonPropertyName("trade_scenario")] public string? TradeScenario { get; set; } + + /// + /// 获取或设置分期信息。 + /// + [Newtonsoft.Json.JsonProperty("installment_info")] + [System.Text.Json.Serialization.JsonPropertyName("installment_info")] + public Types.Installment? Installment { get; set; } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayInstallment/Exposure/CreatePayInstallmentExposureRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayInstallment/Exposure/CreatePayInstallmentExposureRequest.cs new file mode 100644 index 00000000..3ceaffaa --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayInstallment/Exposure/CreatePayInstallmentExposureRequest.cs @@ -0,0 +1,43 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /pay/instal/exposure 接口的请求。 + /// + public class CreatePayInstallmentExposureRequest : WechatTenpayRequest + { + /// + /// 获取或设置微信商户号。如果不指定将使用构造 时的 参数。 + /// + [Newtonsoft.Json.JsonProperty("mchid")] + [System.Text.Json.Serialization.JsonPropertyName("mchid")] + public string? MerchantId { get; set; } + + /// + /// 获取或设置微信 AppId。 + /// + [Newtonsoft.Json.JsonProperty("appid")] + [System.Text.Json.Serialization.JsonPropertyName("appid")] + public string AppId { get; set; } = string.Empty; + + /// + /// 获取或设置用户 ID 类型。 + /// + [Newtonsoft.Json.JsonProperty("user_id_type")] + [System.Text.Json.Serialization.JsonPropertyName("user_id_type")] + public string UserIdType { get; set; } = string.Empty; + + /// + /// 获取或设置用户唯一标识。 + /// + [Newtonsoft.Json.JsonProperty("openid")] + [System.Text.Json.Serialization.JsonPropertyName("openid")] + public string? OpenId { get; set; } + + /// + /// 获取或设置手机号哈希值。 + /// + [Newtonsoft.Json.JsonProperty("phone_number_hash")] + [System.Text.Json.Serialization.JsonPropertyName("phone_number_hash")] + public string? PhoneNumberHash { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayInstallment/Exposure/CreatePayInstallmentExposureResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayInstallment/Exposure/CreatePayInstallmentExposureResponse.cs new file mode 100644 index 00000000..096f7fe7 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayInstallment/Exposure/CreatePayInstallmentExposureResponse.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /pay/instal/exposure 接口的响应。 + /// + public class CreatePayInstallmentExposureResponse : WechatTenpayResponse + { + /// + /// 获取或设置是否建议曝光微信分付。 + /// + [Newtonsoft.Json.JsonProperty("recommend_exposure")] + [System.Text.Json.Serialization.JsonPropertyName("recommend_exposure")] + public bool IsRecommendExposed { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayTransactions/CreatePayTransactionAppRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayTransactions/CreatePayTransactionAppRequest.cs index d5696536..47ce6ffb 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayTransactions/CreatePayTransactionAppRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayTransactions/CreatePayTransactionAppRequest.cs @@ -181,6 +181,56 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models [System.Text.Json.Serialization.JsonPropertyName("subsidy_amount")] public int? SubsidyAmount { get; set; } } + + public class Subsidy + { + public static class Types + { + public class SubsidyDetail + { + public static class Types + { + public class SubsidyPlan + { + /// + /// 获取或设置贴息期数。 + /// + [Newtonsoft.Json.JsonProperty("subsidy_installment_num")] + [System.Text.Json.Serialization.JsonPropertyName("subsidy_installment_num")] + public int SubsidyInstallmentNumber { get; set; } + + /// + /// 获取或设置贴息百分比。 + /// + [Newtonsoft.Json.JsonProperty("subsidy_percent")] + [System.Text.Json.Serialization.JsonPropertyName("subsidy_percent")] + public int SubsidyPercent { get; set; } + } + } + + /// + /// 获取或设置还款类型。 + /// + [Newtonsoft.Json.JsonProperty("subsidy_period_type")] + [System.Text.Json.Serialization.JsonPropertyName("subsidy_period_type")] + public string SubsidyPeriodType { get; set; } = string.Empty; + + /// + /// 获取或设置还款计划列表。 + /// + [Newtonsoft.Json.JsonProperty("subsidy_plan")] + [System.Text.Json.Serialization.JsonPropertyName("subsidy_plan")] + public IList SubsidyPlanList { get; set; } = new List(); + } + } + + /// + /// 获取或设置贴息详情列表。 + /// + [Newtonsoft.Json.JsonProperty("subsidy_detail")] + [System.Text.Json.Serialization.JsonPropertyName("subsidy_detail")] + public IList? SubsidyDetailList { get; set; } + } } /// @@ -275,5 +325,12 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models [Newtonsoft.Json.JsonProperty("settle_info")] [System.Text.Json.Serialization.JsonPropertyName("settle_info")] public Types.Settlement? Settlement { get; set; } + + /// + /// 获取或设置贴息信息。 + /// + [Newtonsoft.Json.JsonProperty("subsidy_info")] + [System.Text.Json.Serialization.JsonPropertyName("subsidy_info")] + public Types.Subsidy? Subsidy { get; set; } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayTransactions/CreatePayTransactionJsapiRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayTransactions/CreatePayTransactionJsapiRequest.cs index f4c9c3ff..fb678c7a 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayTransactions/CreatePayTransactionJsapiRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayTransactions/CreatePayTransactionJsapiRequest.cs @@ -34,6 +34,10 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models public class Settlement : CreatePayTransactionAppRequest.Types.Settlement { } + + public class Subsidy : CreatePayTransactionAppRequest.Types.Subsidy + { + } } /// @@ -135,5 +139,12 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models [Newtonsoft.Json.JsonProperty("settle_info")] [System.Text.Json.Serialization.JsonPropertyName("settle_info")] public Types.Settlement? Settlement { get; set; } + + /// + /// 获取或设置贴息信息。 + /// + [Newtonsoft.Json.JsonProperty("subsidy_info")] + [System.Text.Json.Serialization.JsonPropertyName("subsidy_info")] + public Types.Subsidy? Subsidy { get; set; } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayTransactions/Exposure/CreatePayTransactionExposureResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayTransactions/Exposure/CreatePayTransactionExposureResponse.cs index f023da45..826416ba 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayTransactions/Exposure/CreatePayTransactionExposureResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayTransactions/Exposure/CreatePayTransactionExposureResponse.cs @@ -10,7 +10,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models /// [Newtonsoft.Json.JsonProperty("fqf_exposure")] [System.Text.Json.Serialization.JsonPropertyName("fqf_exposure")] - public bool IsExposed { get; set; } + public bool IsRecommendExposed { get; set; } /// /// 获取或设置曝光凭证。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayTransactions/GetPayTransactionByOutTradeNumberResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayTransactions/GetPayTransactionByOutTradeNumberResponse.cs index 1555544d..d8d4294f 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayTransactions/GetPayTransactionByOutTradeNumberResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayTransactions/GetPayTransactionByOutTradeNumberResponse.cs @@ -180,6 +180,23 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models [System.Text.Json.Serialization.JsonPropertyName("goods_detail")] public Types.GoodsDetail[]? GoodsList { get; set; } } + + public class Installment + { + /// + /// 获取或设置是否使用了商户贴息。 + /// + [Newtonsoft.Json.JsonProperty("use_subsidy")] + [System.Text.Json.Serialization.JsonPropertyName("use_subsidy")] + public bool IsUseSubsidy { get; set; } + + /// + /// 获取或设置用户实际选择的分期期数。 + /// + [Newtonsoft.Json.JsonProperty("selected_installment_number")] + [System.Text.Json.Serialization.JsonPropertyName("selected_installment_number")] + public int SelectedInstallmentNumber { get; set; } + } } /// @@ -281,5 +298,12 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models [Newtonsoft.Json.JsonProperty("promotion_detail")] [System.Text.Json.Serialization.JsonPropertyName("promotion_detail")] public Types.Promotion[]? PromotionList { get; set; } + + /// + /// 获取或设置分期信息。 + /// + [Newtonsoft.Json.JsonProperty("installment_info")] + [System.Text.Json.Serialization.JsonPropertyName("installment_info")] + public Types.Installment? Installment { get; set; } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayInstallment/Exposure/CreatePayPartnerInstallmentExposureRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayInstallment/Exposure/CreatePayPartnerInstallmentExposureRequest.cs new file mode 100644 index 00000000..a77a3b4b --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayInstallment/Exposure/CreatePayPartnerInstallmentExposureRequest.cs @@ -0,0 +1,56 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /pay/instal/partner/exposure 接口的请求。 + /// + public class CreatePayPartnerInstallmentExposureRequest : WechatTenpayRequest + { + public static class Types + { + public class User : CreatePayPartnerTransactionExposureRequest.Types.Payer + { + /// + /// 获取或设置用户 ID 类型。 + /// + [Newtonsoft.Json.JsonProperty("user_id_type")] + [System.Text.Json.Serialization.JsonPropertyName("user_id_type")] + public string UserIdType { get; set; } = string.Empty; + } + } + + /// + /// 获取或设置微信商户号。如果不指定将使用构造 时的 参数。 + /// + [Newtonsoft.Json.JsonProperty("sp_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sp_mchid")] + public string? MerchantId { get; set; } + + /// + /// 获取或设置子商户号。 + /// + [Newtonsoft.Json.JsonProperty("sub_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")] + public string? SubMerchantId { get; set; } + + /// + /// 获取或设置微信 AppId。 + /// + [Newtonsoft.Json.JsonProperty("sp_appid")] + [System.Text.Json.Serialization.JsonPropertyName("sp_appid")] + public string AppId { get; set; } = string.Empty; + + /// + /// 获取或设置子商户 AppId。 + /// + [Newtonsoft.Json.JsonProperty("sub_appid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_appid")] + public string? SubAppId { get; set; } + + /// + /// 获取或设置用户信息。 + /// + [Newtonsoft.Json.JsonProperty("user_id")] + [System.Text.Json.Serialization.JsonPropertyName("user_id")] + public Types.User User { get; set; } = new Types.User(); + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayInstallment/Exposure/CreatePayPartnerInstallmentExposureResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayInstallment/Exposure/CreatePayPartnerInstallmentExposureResponse.cs new file mode 100644 index 00000000..f7fa1e83 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayInstallment/Exposure/CreatePayPartnerInstallmentExposureResponse.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /pay/instal/partner/exposure 接口的响应。 + /// + public class CreatePayPartnerInstallmentExposureResponse : CreatePayInstallmentExposureResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayTransactions/CreatePayPartnerTransactionAppRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayTransactions/CreatePayPartnerTransactionAppRequest.cs index ced48696..14e17b23 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayTransactions/CreatePayPartnerTransactionAppRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayTransactions/CreatePayPartnerTransactionAppRequest.cs @@ -24,6 +24,10 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models public class Settlement : CreatePayTransactionAppRequest.Types.Settlement { } + + public class Subsidy : CreatePayTransactionAppRequest.Types.Subsidy + { + } } /// @@ -132,5 +136,12 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models [Newtonsoft.Json.JsonProperty("settle_info")] [System.Text.Json.Serialization.JsonPropertyName("settle_info")] public Types.Settlement? Settlement { get; set; } + + /// + /// 获取或设置贴息信息。 + /// + [Newtonsoft.Json.JsonProperty("subsidy_info")] + [System.Text.Json.Serialization.JsonPropertyName("subsidy_info")] + public Types.Subsidy? Subsidy { get; set; } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayTransactions/CreatePayPartnerTransactionJsapiRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayTransactions/CreatePayPartnerTransactionJsapiRequest.cs index 2e72e4d8..a712375d 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayTransactions/CreatePayPartnerTransactionJsapiRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayTransactions/CreatePayPartnerTransactionJsapiRequest.cs @@ -41,6 +41,10 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models public class Settlement : CreatePayTransactionJsapiRequest.Types.Settlement { } + + public class Subsidy : CreatePayTransactionJsapiRequest.Types.Subsidy + { + } } /// @@ -156,5 +160,12 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models [Newtonsoft.Json.JsonProperty("settle_info")] [System.Text.Json.Serialization.JsonPropertyName("settle_info")] public Types.Settlement? Settlement { get; set; } + + /// + /// 获取或设置贴息信息。 + /// + [Newtonsoft.Json.JsonProperty("subsidy_info")] + [System.Text.Json.Serialization.JsonPropertyName("subsidy_info")] + public Types.Subsidy? Subsidy { get; set; } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayTransactions/GetPayPartnerTransactionByOutTradeNumberResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayTransactions/GetPayPartnerTransactionByOutTradeNumberResponse.cs index 33907f49..8791075e 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayTransactions/GetPayPartnerTransactionByOutTradeNumberResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayTransactions/GetPayPartnerTransactionByOutTradeNumberResponse.cs @@ -37,6 +37,10 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models public class Promotion : GetPayTransactionByOutTradeNumberResponse.Types.Promotion { } + + public class Installment : GetPayTransactionByOutTradeNumberResponse.Types.Installment + { + } } /// @@ -152,5 +156,12 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models [Newtonsoft.Json.JsonProperty("promotion_detail")] [System.Text.Json.Serialization.JsonPropertyName("promotion_detail")] public Types.Promotion[]? PromotionList { get; set; } + + /// + /// 获取或设置分期信息。 + /// + [Newtonsoft.Json.JsonProperty("installment_info")] + [System.Text.Json.Serialization.JsonPropertyName("installment_info")] + public Types.Installment? Installment { get; set; } } } diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayInstallment/Exposure/CreatePayInstallmentExposureRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayInstallment/Exposure/CreatePayInstallmentExposureRequest.json new file mode 100644 index 00000000..b097a687 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayInstallment/Exposure/CreatePayInstallmentExposureRequest.json @@ -0,0 +1,7 @@ +{ + "mchid": "12345", + "appid": "123abc", + "user_id_type": "OPENID", + "openid": "123456789", + "phone_number_hash": "EF879546FFFF" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayInstallment/Exposure/CreatePayInstallmentExposureResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayInstallment/Exposure/CreatePayInstallmentExposureResponse.json new file mode 100644 index 00000000..b26cd30d --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayInstallment/Exposure/CreatePayInstallmentExposureResponse.json @@ -0,0 +1,3 @@ +{ + "recommend_exposure": true +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayTransactions/CreatePayTransactionAppRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayTransactions/CreatePayTransactionAppRequest.json index 856c5805..6ea73bee 100644 --- a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayTransactions/CreatePayTransactionAppRequest.json +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayTransactions/CreatePayTransactionAppRequest.json @@ -1,4 +1,4 @@ -{ +{ "mchid": "1900006XXX", "out_trade_no": "APP1217752501201407033233368018", "appid": "wxb4ba3c02aa476XXX", @@ -7,5 +7,22 @@ "amount": { "total": 1, "currency": "CNY" + }, + "subsidy_info": { + "subsidy_detail": [ + { + "subsidy_period_type": "PERIOD", + "subsidy_plan": [ + { + "subsidy_installment_num": 3, + "subsidy_percent": 100 + }, + { + "subsidy_installment_num": 6, + "subsidy_percent": 100 + } + ] + } + ] } } diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayTransactions/CreatePayTransactionJsapiRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayTransactions/CreatePayTransactionJsapiRequest.json index 1ecbeefb..a442afd5 100644 --- a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayTransactions/CreatePayTransactionJsapiRequest.json +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayTransactions/CreatePayTransactionJsapiRequest.json @@ -1,4 +1,4 @@ -{ +{ "mchid": "1900006XXX", "out_trade_no": "1217752501201407033233368318", "appid": "wxdace645e0bc2cXXX", @@ -10,5 +10,22 @@ }, "payer": { "openid": "o4GgauInH_RCEdvrrNGrntXDuXXX" + }, + "subsidy_info": { + "subsidy_detail": [ + { + "subsidy_period_type": "PERIOD", + "subsidy_plan": [ + { + "subsidy_installment_num": 3, + "subsidy_percent": 100 + }, + { + "subsidy_installment_num": 6, + "subsidy_percent": 100 + } + ] + } + ] } } diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayInstallment/Exposure/CreatePayPartnerInstallmentExposureRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayInstallment/Exposure/CreatePayPartnerInstallmentExposureRequest.json new file mode 100644 index 00000000..54c4199e --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayInstallment/Exposure/CreatePayPartnerInstallmentExposureRequest.json @@ -0,0 +1,12 @@ +{ + "sp_mchid": "12345", + "sp_appid": "123abc", + "sub_mchid": "12345", + "sub_appid": "123abc", + "user_id": { + "user_id_type": "SP_OPENID", + "sp_openid": "123456789", + "sub_openid": "123456789", + "phone_number_hash": "EF879546FFFF" + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayInstallment/Exposure/CreatePayPartnerInstallmentExposureResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayInstallment/Exposure/CreatePayPartnerInstallmentExposureResponse.json new file mode 100644 index 00000000..b26cd30d --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayInstallment/Exposure/CreatePayPartnerInstallmentExposureResponse.json @@ -0,0 +1,3 @@ +{ + "recommend_exposure": true +}