diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantRiskManageExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantRiskManageExtensions.cs index 5e5c3109..7b9ac006 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantRiskManageExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantRiskManageExtensions.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Net.Http; using System.Threading; using System.Threading.Tasks; @@ -8,6 +8,82 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 { public static class WechatTenpayClientExecuteMerchantRiskManageExtensions { + #region TradeRisk + /// + /// 异步调用 [POST] /merchant-risk-manage/report-trade-union-information 接口。 + /// REF: https://pay.weixin.qq.com/docs/partner/apis/risk-manage/trade-risk/report-trade-risk-information.html + /// + /// + /// + /// + /// + public static async Task ExecuteCreateMerchantRiskManageTradeUnionInformationReportAsync(this WechatTenpayClient client, Models.CreateMerchantRiskManageTradeUnionInformationReportRequest 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, "merchant-risk-manage", "report-trade-union-information"); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /merchant-risk-manage/trade-risk-information 接口。 + /// REF: https://pay.weixin.qq.com/docs/partner/apis/risk-manage/trade-risk/query-trade-risk-information.html + /// + /// + /// + /// + /// + public static async Task ExecuteGetMerchantRiskManageTradeRiskInformationAsync(this WechatTenpayClient client, Models.GetMerchantRiskManageTradeRiskInformationRequest 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, "merchant-risk-manage", "trade-risk-information") + .SetQueryParam("out_trade_no", request.OutTradeNumber); + + if (request.MerchantId != null) + flurlReq.SetQueryParam("sp_mchid", request.MerchantId); + + if (request.AcquiringBankId != null) + flurlReq.SetQueryParam("acquiring_bank_id", request.AcquiringBankId); + + if (request.ChannelId != null) + flurlReq.SetQueryParam("channel_id", request.ChannelId); + + if (request.SubMerchantId != null) + flurlReq.SetQueryParam("sub_mchid", request.SubMerchantId); + + if (request.ComplaintsInformation != null) + flurlReq.SetQueryParam("complaints_information", request.ComplaintsInformation); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /merchant-risk-manage/trade-risk-result 接口。 + /// REF: https://pay.weixin.qq.com/docs/partner/apis/risk-manage/trade-risk/report-trade-risk-information.html + /// + /// + /// + /// + /// + public static async Task ExecuteCreateMerchantRiskManageTradeRiskResultAsync(this WechatTenpayClient client, Models.CreateMerchantRiskManageTradeRiskResultRequest 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, "merchant-risk-manage", "trade-risk-result"); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + #endregion + + #region ViolationNotification /// /// 异步调用 [POST] /merchant-risk-manage/violation-notifications 接口。 /// REF: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter10_3_1.shtml @@ -83,5 +159,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); } + #endregion } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantService/ComplaintsV2/GetMerchantServiceComplaintByComplaintIdResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantService/ComplaintsV2/GetMerchantServiceComplaintByComplaintIdResponse.cs index e4f30a52..ce80801c 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantService/ComplaintsV2/GetMerchantServiceComplaintByComplaintIdResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantService/ComplaintsV2/GetMerchantServiceComplaintByComplaintIdResponse.cs @@ -48,7 +48,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models /// [Newtonsoft.Json.JsonProperty("media_url")] [System.Text.Json.Serialization.JsonPropertyName("media_url")] - public string[] MediaUrl { get; set; } = default!; + public string[] MediaUrlList { get; set; } = default!; } public class ServiceOrder diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/TradeRisk/CreateMerchantRiskManageTradeRiskResultRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/TradeRisk/CreateMerchantRiskManageTradeRiskResultRequest.cs new file mode 100644 index 00000000..66172ffa --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/TradeRisk/CreateMerchantRiskManageTradeRiskResultRequest.cs @@ -0,0 +1,71 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /merchant-risk-manage/trade-risk-result 接口的请求。 + /// + public class CreateMerchantRiskManageTradeRiskResultRequest : WechatTenpayRequest + { + /// + /// 获取或设置服务商商户号。 + /// + [Newtonsoft.Json.JsonProperty("sp_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sp_mchid")] + public string? MerchantId { get; set; } + + /// + /// 获取或设置从业机构号。 + /// + [Newtonsoft.Json.JsonProperty("acquiring_bank_id")] + [System.Text.Json.Serialization.JsonPropertyName("acquiring_bank_id")] + public string? AcquiringBankId { get; set; } + + /// + /// 获取或设置渠道号。 + /// + [Newtonsoft.Json.JsonProperty("channel_id")] + [System.Text.Json.Serialization.JsonPropertyName("channel_id")] + public string? ChannelId { get; set; } + + /// + /// 获取或设置子商户号。 + /// + [Newtonsoft.Json.JsonProperty("sub_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")] + public string? SubMerchantId { get; set; } + + /// + /// 获取或设置商户订单号。 + /// + [Newtonsoft.Json.JsonProperty("out_trade_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_trade_no")] + public string? OutTradeNumber { get; set; } + + /// + /// 获取或设置投诉信息。 + /// + [Newtonsoft.Json.JsonProperty("complaints_information")] + [System.Text.Json.Serialization.JsonPropertyName("complaints_information")] + public string? ComplaintsInformation { get; set; } + + /// + /// 获取或设置风险类型。 + /// + [Newtonsoft.Json.JsonProperty("risk_type")] + [System.Text.Json.Serialization.JsonPropertyName("risk_type")] + public string? RiskType { get; set; } + + /// + /// 获取或设置处置手段。 + /// + [Newtonsoft.Json.JsonProperty("punish_type")] + [System.Text.Json.Serialization.JsonPropertyName("punish_type")] + public string? PunishType { get; set; } + + /// + /// 获取或设置处置手段补充。 + /// + [Newtonsoft.Json.JsonProperty("additional_punish_type")] + [System.Text.Json.Serialization.JsonPropertyName("additional_punish_type")] + public string? AdditionalPunishType { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/TradeRisk/CreateMerchantRiskManageTradeRiskResultResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/TradeRisk/CreateMerchantRiskManageTradeRiskResultResponse.cs new file mode 100644 index 00000000..87199101 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/TradeRisk/CreateMerchantRiskManageTradeRiskResultResponse.cs @@ -0,0 +1,71 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /merchant-risk-manage/trade-risk-result 接口的响应。 + /// + public class CreateMerchantRiskManageTradeRiskResultResponse : WechatTenpayResponse + { + /// + /// 获取或设置服务商商户号。 + /// + [Newtonsoft.Json.JsonProperty("sp_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sp_mchid")] + public string? MerchantId { get; set; } + + /// + /// 获取或设置从业机构号。 + /// + [Newtonsoft.Json.JsonProperty("acquiring_bank_id")] + [System.Text.Json.Serialization.JsonPropertyName("acquiring_bank_id")] + public string? AcquiringBankId { get; set; } + + /// + /// 获取或设置渠道号。 + /// + [Newtonsoft.Json.JsonProperty("channel_id")] + [System.Text.Json.Serialization.JsonPropertyName("channel_id")] + public string? ChannelId { get; set; } + + /// + /// 获取或设置子商户号。 + /// + [Newtonsoft.Json.JsonProperty("sub_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")] + public string? SubMerchantId { get; set; } + + /// + /// 获取或设置商户订单号。 + /// + [Newtonsoft.Json.JsonProperty("out_trade_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_trade_no")] + public string? OutTradeNumber { get; set; } + + /// + /// 获取或设置风险类型。 + /// + [Newtonsoft.Json.JsonProperty("risk_type")] + [System.Text.Json.Serialization.JsonPropertyName("risk_type")] + public string? RiskType { get; set; } + + /// + /// 获取或设置处置手段。 + /// + [Newtonsoft.Json.JsonProperty("punish_type")] + [System.Text.Json.Serialization.JsonPropertyName("punish_type")] + public string? PunishType { get; set; } + + /// + /// 获取或设置处置手段描述。 + /// + [Newtonsoft.Json.JsonProperty("punish_description")] + [System.Text.Json.Serialization.JsonPropertyName("punish_description")] + public string? PunishDescription { get; set; } + + /// + /// 获取或设置处置手段补充。 + /// + [Newtonsoft.Json.JsonProperty("additional_punish_type")] + [System.Text.Json.Serialization.JsonPropertyName("additional_punish_type")] + public string? AdditionalPunishType { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/TradeRisk/CreateMerchantRiskManageTradeUnionInformationReportRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/TradeRisk/CreateMerchantRiskManageTradeUnionInformationReportRequest.cs new file mode 100644 index 00000000..9c6e1d43 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/TradeRisk/CreateMerchantRiskManageTradeUnionInformationReportRequest.cs @@ -0,0 +1,253 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /merchant-risk-manage/report-trade-union-information 接口的请求。 + /// + [WechatTenpaySensitive] + public class CreateMerchantRiskManageTradeUnionInformationReportRequest : WechatTenpayRequest + { + public static class Types + { + public class RechargeField + { + /// + /// 获取或设置充值账号类型。 + /// + [Newtonsoft.Json.JsonProperty("account_type")] + [System.Text.Json.Serialization.JsonPropertyName("account_type")] + public int? AccountType { get; set; } + + /// + /// 获取或设置充值账号。 + /// + [Newtonsoft.Json.JsonProperty("account")] + [System.Text.Json.Serialization.JsonPropertyName("account")] + public string? Account { get; set; } + } + + public class LivingExpensesField + { + /// + /// 获取或设置户号。 + /// + [Newtonsoft.Json.JsonProperty("acc_no")] + [System.Text.Json.Serialization.JsonPropertyName("acc_no")] + public string? AccountNumber { get; set; } + + /// + /// 获取或设置户名。 + /// + [Newtonsoft.Json.JsonProperty("acc_name")] + [System.Text.Json.Serialization.JsonPropertyName("acc_name")] + public string? AccountName { get; set; } + + /// + /// 获取或设置费种。 + /// + [Newtonsoft.Json.JsonProperty("type")] + [System.Text.Json.Serialization.JsonPropertyName("type")] + public int? Type { get; set; } + + /// + /// 获取或设置城市。 + /// + [Newtonsoft.Json.JsonProperty("city")] + [System.Text.Json.Serialization.JsonPropertyName("city")] + public string? City { get; set; } + + /// + /// 获取或设置地址。 + /// + [Newtonsoft.Json.JsonProperty("address")] + [System.Text.Json.Serialization.JsonPropertyName("address")] + public string? Address { get; set; } + + /// + /// 获取或设置机构名称。 + /// + [Newtonsoft.Json.JsonProperty("company_name")] + [System.Text.Json.Serialization.JsonPropertyName("company_name")] + public string? CompanyName { get; set; } + + /// + /// 获取或设置缴费金额(单位:分)。 + /// + [Newtonsoft.Json.JsonProperty("amount")] + [System.Text.Json.Serialization.JsonPropertyName("amount")] + public int? Amount { get; set; } + } + } + + /// + /// 获取或设置服务商商户号。 + /// + [Newtonsoft.Json.JsonProperty("sp_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sp_mchid")] + public string? MerchantId { get; set; } + + /// + /// 获取或设置从业机构号。 + /// + [Newtonsoft.Json.JsonProperty("acquiring_bank_id")] + [System.Text.Json.Serialization.JsonPropertyName("acquiring_bank_id")] + public string? AcquiringBankId { get; set; } + + /// + /// 获取或设置渠道号。 + /// + [Newtonsoft.Json.JsonProperty("channel_id")] + [System.Text.Json.Serialization.JsonPropertyName("channel_id")] + public string? ChannelId { get; set; } + + /// + /// 获取或设置子商户号。 + /// + [Newtonsoft.Json.JsonProperty("sub_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")] + public string? SubMerchantId { get; set; } + + /// + /// 获取或设置商户订单号。 + /// + [Newtonsoft.Json.JsonProperty("out_trade_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_trade_no")] + public string? OutTradeNumber { get; set; } + + /// + /// 获取或设置用户唯一标识。 + /// + [Newtonsoft.Json.JsonProperty("openid")] + [System.Text.Json.Serialization.JsonPropertyName("openid")] + public string? OpenId { get; set; } + + /// + /// 获取或设置用户手机号(需使用平台公钥/证书加密)。 + /// + [Newtonsoft.Json.JsonProperty("phone")] + [System.Text.Json.Serialization.JsonPropertyName("phone")] + [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? PhoneNumber { get; set; } + + /// + /// 获取或设置用户实名证件号(需使用平台公钥/证书加密)。 + /// + [Newtonsoft.Json.JsonProperty("certificates_number")] + [System.Text.Json.Serialization.JsonPropertyName("certificates_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? IdCardNumber { get; set; } + + /// + /// 获取或设置终端 IP。 + /// + [Newtonsoft.Json.JsonProperty("client_ip")] + [System.Text.Json.Serialization.JsonPropertyName("client_ip")] + public string? ClientIp { get; set; } + + /// + /// 获取或设置商户判定交易的风险等级。 + /// + [Newtonsoft.Json.JsonProperty("risk_level")] + [System.Text.Json.Serialization.JsonPropertyName("risk_level")] + public int? RiskLevel { get; set; } + + /// + /// 获取或设置线上线下标识。 + /// + [Newtonsoft.Json.JsonProperty("line_type")] + [System.Text.Json.Serialization.JsonPropertyName("line_type")] + public int? LineType { get; set; } + + /// + /// 获取或设置虚拟实物标识。 + /// + [Newtonsoft.Json.JsonProperty("goods_type")] + [System.Text.Json.Serialization.JsonPropertyName("goods_type")] + public int? GoodsType { get; set; } + + /// + /// 获取或设置物品发布类型。 + /// + [Newtonsoft.Json.JsonProperty("seller_type")] + [System.Text.Json.Serialization.JsonPropertyName("seller_type")] + public int? SellerType { get; set; } + + /// + /// 获取或设置是否需要物流发货。 + /// + [Newtonsoft.Json.JsonProperty("is_need_deliver")] + [System.Text.Json.Serialization.JsonPropertyName("is_need_deliver")] + public bool? IsNeedDeliver { get; set; } + + /// + /// 获取或设置用户设备类型。 + /// + [Newtonsoft.Json.JsonProperty("device_type")] + [System.Text.Json.Serialization.JsonPropertyName("device_type")] + public int? DeviceType { get; set; } + + /// + /// 获取或设置付款方用户标识。 + /// + [Newtonsoft.Json.JsonProperty("userid")] + [System.Text.Json.Serialization.JsonPropertyName("userid")] + public string? UserId { get; set; } + + /// + /// 获取或设置手机号来源。 + /// + [Newtonsoft.Json.JsonProperty("phone_from")] + [System.Text.Json.Serialization.JsonPropertyName("phone_from")] + public int? PhoneFrom { get; set; } + + /// + /// 获取或设置收款方用户标识。 + /// + [Newtonsoft.Json.JsonProperty("seller_userid")] + [System.Text.Json.Serialization.JsonPropertyName("seller_userid")] + public string? SellerUserId { get; set; } + + /// + /// 获取或设置业务场景。 + /// + [Newtonsoft.Json.JsonProperty("scene")] + [System.Text.Json.Serialization.JsonPropertyName("scene")] + public int? Scene { get; set; } + + /// + /// 获取或设置充值业务场景字段信息。 + /// + [Newtonsoft.Json.JsonProperty("recharge_fields")] + [System.Text.Json.Serialization.JsonPropertyName("recharge_fields")] + public Types.RechargeField? RechargeField { get; set; } + + /// + /// 获取或设置生活缴费业务场景字段信息。 + /// + [Newtonsoft.Json.JsonProperty("living_expenses_fields")] + [System.Text.Json.Serialization.JsonPropertyName("living_expenses_fields")] + public Types.LivingExpensesField? LivingExpensesField { get; set; } + + /// + /// 获取或设置扩展字段 1。 + /// + [Newtonsoft.Json.JsonProperty("extra_fields1")] + [System.Text.Json.Serialization.JsonPropertyName("extra_fields1")] + public string? ExtraField1 { get; set; } + + /// + /// 获取或设置扩展字段 2。 + /// + [Newtonsoft.Json.JsonProperty("extra_fields2")] + [System.Text.Json.Serialization.JsonPropertyName("extra_fields2")] + public string? ExtraField2 { get; set; } + + /// + /// 获取或设置扩展字段 3。 + /// + [Newtonsoft.Json.JsonProperty("extra_fields3")] + [System.Text.Json.Serialization.JsonPropertyName("extra_fields3")] + public string? ExtraField3 { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/TradeRisk/CreateMerchantRiskManageTradeUnionInformationReportResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/TradeRisk/CreateMerchantRiskManageTradeUnionInformationReportResponse.cs new file mode 100644 index 00000000..11e98bd9 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/TradeRisk/CreateMerchantRiskManageTradeUnionInformationReportResponse.cs @@ -0,0 +1,43 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /merchant-risk-manage/report-trade-union-information 接口的响应。 + /// + public class CreateMerchantRiskManageTradeUnionInformationReportResponse : WechatTenpayResponse + { + /// + /// 获取或设置服务商商户号。 + /// + [Newtonsoft.Json.JsonProperty("sp_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sp_mchid")] + public string? MerchantId { get; set; } + + /// + /// 获取或设置从业机构号。 + /// + [Newtonsoft.Json.JsonProperty("acquiring_bank_id")] + [System.Text.Json.Serialization.JsonPropertyName("acquiring_bank_id")] + public string? AcquiringBankId { get; set; } + + /// + /// 获取或设置渠道号。 + /// + [Newtonsoft.Json.JsonProperty("channel_id")] + [System.Text.Json.Serialization.JsonPropertyName("channel_id")] + public string? ChannelId { get; set; } + + /// + /// 获取或设置子商户号。 + /// + [Newtonsoft.Json.JsonProperty("sub_mchid")] + [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")] + public string? SubMerchantId { get; set; } + + /// + /// 获取或设置商户订单号。 + /// + [Newtonsoft.Json.JsonProperty("out_trade_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_trade_no")] + public string? OutTradeNumber { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/TradeRisk/GetMerchantRiskManageTradeRiskInformationRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/TradeRisk/GetMerchantRiskManageTradeRiskInformationRequest.cs new file mode 100644 index 00000000..8d129138 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/TradeRisk/GetMerchantRiskManageTradeRiskInformationRequest.cs @@ -0,0 +1,50 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /merchant-risk-manage/trade-risk-information 接口的请求。 + /// + public class GetMerchantRiskManageTradeRiskInformationRequest : WechatTenpayRequest + { + /// + /// 获取或设置服务商商户号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string? MerchantId { get; set; } + + /// + /// 获取或设置从业机构号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string? AcquiringBankId { get; set; } + + /// + /// 获取或设置渠道号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string? ChannelId { get; set; } + + /// + /// 获取或设置子商户号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string? SubMerchantId { get; set; } + + /// + /// 获取或设置商户订单号。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string OutTradeNumber { get; set; } = string.Empty; + + /// + /// 获取或设置投诉信息。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string? ComplaintsInformation { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/TradeRisk/GetMerchantRiskManageTradeRiskInformationResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/TradeRisk/GetMerchantRiskManageTradeRiskInformationResponse.cs new file mode 100644 index 00000000..6e8e5b35 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/TradeRisk/GetMerchantRiskManageTradeRiskInformationResponse.cs @@ -0,0 +1,36 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /merchant-risk-manage/trade-risk-information 接口的响应。 + /// + public class GetMerchantRiskManageTradeRiskInformationResponse : WechatTenpayResponse + { + /// + /// 获取或设置风险系数值。 + /// + [Newtonsoft.Json.JsonProperty("risk_score")] + [System.Text.Json.Serialization.JsonPropertyName("risk_score")] + public int RiskScore { get; set; } + + /// + /// 获取或设置风险类型。 + /// + [Newtonsoft.Json.JsonProperty("risk_type")] + [System.Text.Json.Serialization.JsonPropertyName("risk_type")] + public string? RiskType { get; set; } + + /// + /// 获取或设置处置手段。 + /// + [Newtonsoft.Json.JsonProperty("punish_type")] + [System.Text.Json.Serialization.JsonPropertyName("punish_type")] + public string? PunishType { get; set; } + + /// + /// 获取或设置处置手段描述。 + /// + [Newtonsoft.Json.JsonProperty("punish_description")] + [System.Text.Json.Serialization.JsonPropertyName("punish_description")] + public string? PunishDescription { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantRiskManage/CreateMerchantRiskManageViolationNotificationRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/ViolationNotification/CreateMerchantRiskManageViolationNotificationRequest.cs similarity index 100% rename from src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantRiskManage/CreateMerchantRiskManageViolationNotificationRequest.cs rename to src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/ViolationNotification/CreateMerchantRiskManageViolationNotificationRequest.cs diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantRiskManage/CreateMerchantRiskManageViolationNotificationResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/ViolationNotification/CreateMerchantRiskManageViolationNotificationResponse.cs similarity index 100% rename from src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantRiskManage/CreateMerchantRiskManageViolationNotificationResponse.cs rename to src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/ViolationNotification/CreateMerchantRiskManageViolationNotificationResponse.cs diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantRiskManage/DeleteMerchantRiskManageViolationNotificationRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/ViolationNotification/DeleteMerchantRiskManageViolationNotificationRequest.cs similarity index 100% rename from src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantRiskManage/DeleteMerchantRiskManageViolationNotificationRequest.cs rename to src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/ViolationNotification/DeleteMerchantRiskManageViolationNotificationRequest.cs diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantRiskManage/DeleteMerchantRiskManageViolationNotificationResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/ViolationNotification/DeleteMerchantRiskManageViolationNotificationResponse.cs similarity index 100% rename from src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantRiskManage/DeleteMerchantRiskManageViolationNotificationResponse.cs rename to src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/ViolationNotification/DeleteMerchantRiskManageViolationNotificationResponse.cs diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantRiskManage/GetMerchantRiskManageViolationNotificationRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/ViolationNotification/GetMerchantRiskManageViolationNotificationRequest.cs similarity index 100% rename from src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantRiskManage/GetMerchantRiskManageViolationNotificationRequest.cs rename to src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/ViolationNotification/GetMerchantRiskManageViolationNotificationRequest.cs diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantRiskManage/GetMerchantRiskManageViolationNotificationResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/ViolationNotification/GetMerchantRiskManageViolationNotificationResponse.cs similarity index 100% rename from src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantRiskManage/GetMerchantRiskManageViolationNotificationResponse.cs rename to src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/ViolationNotification/GetMerchantRiskManageViolationNotificationResponse.cs diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantRiskManage/UpdateMerchantRiskManageViolationNotificationRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/ViolationNotification/UpdateMerchantRiskManageViolationNotificationRequest.cs similarity index 100% rename from src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantRiskManage/UpdateMerchantRiskManageViolationNotificationRequest.cs rename to src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/ViolationNotification/UpdateMerchantRiskManageViolationNotificationRequest.cs diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantRiskManage/UpdateMerchantRiskManageViolationNotificationResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/ViolationNotification/UpdateMerchantRiskManageViolationNotificationResponse.cs similarity index 100% rename from src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantRiskManage/UpdateMerchantRiskManageViolationNotificationResponse.cs rename to src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantRiskManage/ViolationNotification/UpdateMerchantRiskManageViolationNotificationResponse.cs diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/MerchantRiskManage/TradeRisk/CreateMerchantRiskManageTradeRiskResultRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/MerchantRiskManage/TradeRisk/CreateMerchantRiskManageTradeRiskResultRequest.json new file mode 100644 index 00000000..fe458ba0 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/MerchantRiskManage/TradeRisk/CreateMerchantRiskManageTradeRiskResultRequest.json @@ -0,0 +1,11 @@ +{ + "sp_mchid": "1900000109", + "acquiring_bank_id": "1356485", + "channel_id": "1900000108\t", + "sub_mchid": "1900009231", + "out_trade_no": "1217752501201407033233368018", + "risk_type": "OTHER_RISK", + "punish_type": "OTHER_PUNISH", + "additional_punish_type": "SUSPEND_SETTLEMENT_NDAYS:10", + "complaints_information": "商家说高额返利,支付很大金额之后发现并没有返利,是骗子" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/MerchantRiskManage/TradeRisk/CreateMerchantRiskManageTradeRiskResultResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/MerchantRiskManage/TradeRisk/CreateMerchantRiskManageTradeRiskResultResponse.json new file mode 100644 index 00000000..d4136fa5 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/MerchantRiskManage/TradeRisk/CreateMerchantRiskManageTradeRiskResultResponse.json @@ -0,0 +1,11 @@ +{ + "sp_mchid": "1900000109", + "acquiring_bank_id": "1356485", + "channel_id": "1900000108", + "sub_mchid": "1900009231", + "out_trade_no": "1217752501201407033233368018", + "risk_type": "OTHER_RISK", + "punish_type": "OTHER_PUNISH", + "additional_punish_type": "SUSPEND_SETTLEMENT_NDAYS:10", + "punish_description": "延长商户账期7天" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/MerchantRiskManage/TradeRisk/CreateMerchantRiskManageTradeUnionInformationReportRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/MerchantRiskManage/TradeRisk/CreateMerchantRiskManageTradeUnionInformationReportRequest.json new file mode 100644 index 00000000..fb0f2027 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/MerchantRiskManage/TradeRisk/CreateMerchantRiskManageTradeUnionInformationReportRequest.json @@ -0,0 +1,37 @@ +{ + "sp_mchid": "1900000109", + "acquiring_bank_id": "1356485", + "channel_id": "1900000108", + "sub_mchid": "1900009231", + "out_trade_no": "1217752501201407033233368018", + "openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o", + "phone": "ca775af5f841bdf424b2e6eb86a6e21e", + "certificates_number": "ca775af5f841bdf424b2e6eb86a6e21e", + "client_ip": "123.12.12.123", + "risk_level": 1, + "line_type": 1, + "goods_type": 1, + "seller_type": 1, + "is_need_deliver": false, + "device_type": 1, + "userid": "华为的账号:260XXX", + "phone_from": 1, + "seller_userid": "抖音的账号:XXXXX", + "scene": 1, + "recharge_fields": { + "account_type": 1, + "account": "example_account" + }, + "living_expenses_fields": { + "acc_no": "123456", + "type": 1, + "city": "湖南衡阳", + "address": "广东省深圳市南山区海天二路33号", + "acc_name": "詹讯", + "company_name": "深圳电力", + "amount": 500 + }, + "extra_fields1": "{\"key1\":\"value1\"}", + "extra_fields2": "{\"key1\":\"value1\"}", + "extra_fields3": "{\"key1\":\"value1\"}" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/MerchantRiskManage/TradeRisk/CreateMerchantRiskManageTradeUnionInformationReportResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/MerchantRiskManage/TradeRisk/CreateMerchantRiskManageTradeUnionInformationReportResponse.json new file mode 100644 index 00000000..c8f55104 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/MerchantRiskManage/TradeRisk/CreateMerchantRiskManageTradeUnionInformationReportResponse.json @@ -0,0 +1,7 @@ +{ + "sp_mchid": "1900000109", + "acquiring_bank_id": "1356485", + "channel_id": "1900000108", + "sub_mchid": "1900009231", + "out_trade_no": "1217752501201407033233368018" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/MerchantRiskManage/TradeRisk/GetMerchantRiskManageTradeRiskInformationResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/MerchantRiskManage/TradeRisk/GetMerchantRiskManageTradeRiskInformationResponse.json new file mode 100644 index 00000000..09697202 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/MerchantRiskManage/TradeRisk/GetMerchantRiskManageTradeRiskInformationResponse.json @@ -0,0 +1,6 @@ +{ + "risk_score": 1, + "risk_type": "OTHER_RISK", + "punish_type": "OTHER_PUNISH", + "punish_description": "延长商户账期7天" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MerchantRiskManage/CreateMerchantRiskManageViolationNotificationRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/MerchantRiskManage/ViolationNotification/CreateMerchantRiskManageViolationNotificationRequest.json similarity index 100% rename from test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MerchantRiskManage/CreateMerchantRiskManageViolationNotificationRequest.json rename to test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/MerchantRiskManage/ViolationNotification/CreateMerchantRiskManageViolationNotificationRequest.json diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MerchantRiskManage/CreateMerchantRiskManageViolationNotificationResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/MerchantRiskManage/ViolationNotification/CreateMerchantRiskManageViolationNotificationResponse.json similarity index 100% rename from test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MerchantRiskManage/CreateMerchantRiskManageViolationNotificationResponse.json rename to test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/MerchantRiskManage/ViolationNotification/CreateMerchantRiskManageViolationNotificationResponse.json diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MerchantRiskManage/GetMerchantRiskManageViolationNotificationResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/MerchantRiskManage/ViolationNotification/GetMerchantRiskManageViolationNotificationResponse.json similarity index 100% rename from test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MerchantRiskManage/GetMerchantRiskManageViolationNotificationResponse.json rename to test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/MerchantRiskManage/ViolationNotification/GetMerchantRiskManageViolationNotificationResponse.json diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MerchantRiskManage/UpdateMerchantRiskManageViolationNotificationRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/MerchantRiskManage/ViolationNotification/UpdateMerchantRiskManageViolationNotificationRequest.json similarity index 100% rename from test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MerchantRiskManage/UpdateMerchantRiskManageViolationNotificationRequest.json rename to test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/MerchantRiskManage/ViolationNotification/UpdateMerchantRiskManageViolationNotificationRequest.json diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MerchantRiskManage/UpdateMerchantRiskManageViolationNotificationResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/MerchantRiskManage/ViolationNotification/UpdateMerchantRiskManageViolationNotificationResponse.json similarity index 100% rename from test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/MerchantRiskManage/UpdateMerchantRiskManageViolationNotificationResponse.json rename to test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_Partner/MerchantRiskManage/ViolationNotification/UpdateMerchantRiskManageViolationNotificationResponse.json diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/TestCase_RequestEncryptionTests.cs b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/TestCase_RequestEncryptionTests.cs index 50fef8d3..afbf1f26 100644 --- a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/TestCase_RequestEncryptionTests.cs +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/TestCase_RequestEncryptionTests.cs @@ -653,6 +653,44 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests AssertMockRequestModel(reqB2, (cipher) => Utilities.SM2Utility.Decrypt(SM2_PEM_PRIVATE_KEY, cipher)); } + [Fact(DisplayName = "测试用例:加密请求中的敏感数据([POST] /merchant-risk-manage/report-trade-union-information)")] + public async Task TestEncryptRequestSensitiveProperty_CreateMerchantRiskManageTradeUnionInformationReportRequest() + { + static Models.CreateMerchantRiskManageTradeUnionInformationReportRequest GenerateMockRequestModel() + { + return new Models.CreateMerchantRiskManageTradeUnionInformationReportRequest() + { + PhoneNumber = MOCK_PLAIN_STR, + IdCardNumber = MOCK_PLAIN_STR + }; + } + + static void AssertMockRequestModel(Models.CreateMerchantRiskManageTradeUnionInformationReportRequest request, Func decryptor) + { + Assert.NotEqual(MOCK_PLAIN_STR, request.PhoneNumber!); + Assert.NotEqual(MOCK_PLAIN_STR, request.IdCardNumber!); + Assert.Equal(MOCK_PLAIN_STR, decryptor.Invoke(request.PhoneNumber!)); + Assert.Equal(MOCK_PLAIN_STR, decryptor.Invoke(request.IdCardNumber!)); + Assert.Equal(MOCK_CERT_SN, request.WechatpayCertificateSerialNumber!, ignoreCase: true); + } + + var reqA1 = GenerateMockRequestModel(); + CreateMockClientUseRSA(autoEncrypt: false).EncryptRequestSensitiveProperty(reqA1); + AssertMockRequestModel(reqA1, (cipher) => Utilities.RSAUtility.DecryptWithECB(RSA_PEM_PRIVATE_KEY, cipher)); + + var reqA2 = GenerateMockRequestModel(); + CreateMockClientUseSM2(autoEncrypt: false).EncryptRequestSensitiveProperty(reqA2); + AssertMockRequestModel(reqA2, (cipher) => Utilities.SM2Utility.Decrypt(SM2_PEM_PRIVATE_KEY, cipher)); + + var reqB1 = GenerateMockRequestModel(); + await CreateMockClientUseRSA(autoEncrypt: true).ExecuteCreateMerchantRiskManageTradeUnionInformationReportAsync(reqB1); + AssertMockRequestModel(reqB1, (cipher) => Utilities.RSAUtility.DecryptWithECB(RSA_PEM_PRIVATE_KEY, cipher)); + + var reqB2 = GenerateMockRequestModel(); + await CreateMockClientUseSM2(autoEncrypt: true).ExecuteCreateMerchantRiskManageTradeUnionInformationReportAsync(reqB2); + AssertMockRequestModel(reqB2, (cipher) => Utilities.SM2Utility.Decrypt(SM2_PEM_PRIVATE_KEY, cipher)); + } + [Fact(DisplayName = "测试用例:加密请求中的敏感数据([POST] /merchants)")] public async Task TestEncryptRequestSensitiveProperty_AddHKSubMerchantRequest() {