using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using PaySharp.Core; using PaySharp.Core.Utils; namespace PaySharp.Wechatpay.Domain { public class RefundModel : IValidatableObject { /// /// 商户订单号 /// [StringLength(32, ErrorMessage = "商户订单号最大长度为32位")] public string OutTradeNo { get; set; } /// /// 微信订单号,和商户订单号不能同时为空 /// [ReName(Name = "transaction_id")] [StringLength(32, ErrorMessage = "微信订单号最大长度为32位")] public string TradeNo { get; set; } /// /// 商户退款单号 /// [Required(ErrorMessage = "请设置商户退款单号")] [StringLength(64, ErrorMessage = "商户退款单号最大长度为64位")] public string OutRefundNo { get; set; } /// /// 订单金额,单位为分,详见支付金额 /// [ReName(Name = "total_fee")] public int TotalAmount { get; set; } /// /// 退款金额 ,单位为分,详见支付金额 /// [ReName(Name = "refund_fee")] public int RefundAmount { get; set; } /// /// 退款货币种类,需与支付一致,或者不填。符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型 /// [ReName(Name = "refund_fee_type")] [StringLength(8, ErrorMessage = "退款货币种类最大长度为8位")] public string RefundAmountType { get; set; } /// /// 退款原因,若商户传入,会在下发给用户的退款消息中体现退款原因 /// [StringLength(80, ErrorMessage = "退款原因最大长度为80位")] public string RefundDesc { get; set; } /// /// 退款资金来源 /// 仅针对老资金流商户使用 /// REFUND_SOURCE_UNSETTLED_FUNDS---未结算资金退款(默认使用未结算资金退款) /// REFUND_SOURCE_RECHARGE_FUNDS---可用余额退款 /// [StringLength(30, ErrorMessage = "退款资金来源最大长度为30位")] public string RefundAccount { get; set; } /// /// 随机字符串 /// public string NonceStr { get; } = Util.GenerateNonceStr(); public IEnumerable Validate(ValidationContext validationContext) { if (string.IsNullOrEmpty(OutTradeNo) && string.IsNullOrEmpty(TradeNo)) { yield return new ValidationResult("商户订单号和微信订单号不能同时为空"); } yield return ValidationResult.Success; } } }