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;
}
}
}