using Newtonsoft.Json; using System.ComponentModel.DataAnnotations; namespace LifePayment.Domain { public class UserAgreementPageSignInput { /// /// 个人签约产品码,商户和支付宝签约时确定,商户可咨询技术支持。值:GENERAL_WITHHOLDING_P /// [JsonProperty("personal_product_code", NullValueHandling = NullValueHandling.Ignore)] [Required] public string PersonalProductCode { get; set; } /// /// 请按当前接入的方式进行填充,且输入值必须为文档中的参数取值范围。 /// 扫码或者短信页面签约需要拼装http的请求地址访问中间页面,钱包h5页面签约可直接拼接scheme的请求地址 /// [JsonProperty("access_params", NullValueHandling = NullValueHandling.Ignore)] [Required] public AccessParams AccessParams { get; set; } /// /// 【描述】周期管控规则参数period_rule_params,在签约周期扣款产品(如CYCLE_PAY_AUTH_P)时必传,在签约其他产品时无需传入。 /// 周期扣款产品,会按照这里传入的参数提示用户,并对发起扣款的时间、金额、次数等做相应限制。 /// [JsonProperty("period_rule_params", NullValueHandling = NullValueHandling.Ignore)] public PeriodRuleParams PeriodRuleParams { get; set; } /// /// 销售产品码,商户签约的支付宝合同所对应的产品码。值:GENERAL_WITHHOLDING /// [JsonProperty("product_code", NullValueHandling = NullValueHandling.Ignore)] [Required] public string ParentBranchNo { get; set; } /// /// 用户在商户网站的登录账号,用于在签约页面展示,如果为空,则不展示 /// [JsonProperty("external_logon_id", NullValueHandling = NullValueHandling.Ignore)] [Required] public string ExternalLogonId { get; set; } /// /// 协议签约场景,商户可根据 代扣产品常见场景值 选择符合自身的行业场景。 说明:当传入商户签约号 external_agreement_no 时,本参数必填,不能为默认值 DEFAULT|DEFAULT。 /// [JsonProperty("sign_scene", NullValueHandling = NullValueHandling.Ignore)] [Required] public string SignScene { get; set; } /// /// 商家签约的产品码,固定值。安全发-服务商模式(单笔转账到支付宝账户) /// [JsonProperty("product_code", NullValueHandling = NullValueHandling.Ignore)] [Required] public string ProductCode { get; set; } /// /// 商户签约号,代扣协议中标示用户的唯一签约号(确保在商户系统中唯一)。 /// 格式规则:支持大写小写字母和数字,最长32位。 /// 商户系统按需传入,如果同一用户在同一产品码、同一签约场景下,签订了多份代扣协议,那么需要指定并传入该值。 /// [JsonProperty("external_agreement_no", NullValueHandling = NullValueHandling.Ignore)] [Required] public string ExternalAgreementNo { get; set; } /// /// 签约第三方主体类型。对于三方协议,表示当前用户和哪一类的第三方主体进行签约。 /// 取值范围: /// 1. PARTNER(平台商户) /// 2. MERCHANT(集团商户),集团下子商户可共享用户签约内容 /// 默认为PARTNER。 /// [JsonProperty("third_party_type", NullValueHandling = NullValueHandling.Ignore)] [Required] public string ThirdPartyType { get; set; } /// /// 当前用户签约请求的协议有效周期。 /// 整形数字加上时间单位的协议有效期,从发起签约请求的时间开始算起。 /// 目前支持的时间单位: /// 1. d:天 /// 2. m:月 /// 如果未传入,默认为长期有效。 /// [JsonProperty("sign_validity_period", NullValueHandling = NullValueHandling.Ignore)] public string SignValidityPeriod { get; set; } /// /// 签约营销参数,此值为json格式;具体的key需与营销约定 /// [JsonProperty("promo_params", NullValueHandling = NullValueHandling.Ignore)] public string PromoParams { get; set; } /// /// 此参数用于传递子商户信息,无特殊需求时不用关注。 /// 目前商户代扣、海外代扣、淘旅行信用住产品支持传入该参数(在销售方案中“是否允许自定义子商户信息”需要选是)。 /// [JsonProperty("sub_merchant", NullValueHandling = NullValueHandling.Ignore)] public SubMerchantParams SubMerchantParams { get; set; } /// /// 协议生效类型, 用于指定协议是立即生效还是等待商户通知再生效. 可空, 不填默认为立即生效. /// [JsonProperty("agreement_effect_type", NullValueHandling = NullValueHandling.Ignore)] public string AgreementEffectType { get; set; } /// /// 用户实名信息参数,包含:姓名、身份证号、签约指定uid。商户传入用户实名信息参数,支付宝会对比用户在支付宝端的实名信息。 /// [JsonProperty("identity_params", NullValueHandling = NullValueHandling.Ignore)] public IdentityParams IdentityParams { get; set; } /// /// 商户希望限制的签约用户的年龄范围,min表示可签该协议的用户年龄下限,max表示年龄上限。如{"min": "18","max": "30"}表示18=<年龄<=30的用户可以签约该协议。 /// [JsonProperty("user_age_range", NullValueHandling = NullValueHandling.Ignore)] public string UserAgeRange { get; set; } /// /// 签约有效时间限制,单位是秒,有效范围是0-86400,商户传入此字段会用商户传入的值否则使用支付宝侧默认值,在有效时间外进行签约,会进行安全拦截;(备注:此字段适用于需要开通安全防控的商户,且依赖商户传入生成签约时的时间戳字段timestamp) /// [JsonProperty("effect_time", NullValueHandling = NullValueHandling.Ignore)] public string EffectTime { get; set; } } public class AccessParams { /// /// 目前支持以下值: /// 1. ALIPAYAPP (钱包h5页面签约) /// 2. QRCODE(扫码签约) /// 3. QRCODEORSMS(扫码签约或者短信签约) /// [JsonProperty("channel", NullValueHandling = NullValueHandling.Ignore)] [Required] public string Channel { get; set; } } public class PeriodRuleParams { /// /// 【描述】周期类型period_type是周期扣款产品必填,枚举值为DAY和MONTH。 DAY即扣款周期按天计,MONTH代表扣款周期按自然月。 /// 与另一参数period组合使用确定扣款周期,例如period_type为DAY,period=30,则扣款周期为30天;period_type为MONTH,period=3,则扣款周期为3个自然月。 自然月是指,不论这个月有多少天,周期都计算到月份中的同一日期。 /// 例如1月3日到2月3日为一个自然月,1月3日到4月3日为三个自然月。注意周期类型使用MONTH的时候,计划扣款时间execute_time不允许传28日之后的日期(可以传28日),以此避免有些月份可能不存在对应日期的情况。 /// 【枚举值】 /// 自然日: DAY /// 自然月: MONTH /// [JsonProperty("period_type", NullValueHandling = NullValueHandling.Ignore)] public string PeriodType { get; set; } /// /// 【描述】周期数period是周期扣款产品必填。与另一参数period_type组合使用确定扣款周期,例如period_type为DAY,period=90,则扣款周期为90天。 /// [JsonProperty("period", NullValueHandling = NullValueHandling.Ignore)] public string Period { get; set; } /// /// 首次执行时间execute_time是周期扣款产品必填,即商户发起首次扣款的时间。精确到日,格式为yyyy-MM-dd 结合其他必填的扣款周期参数,会确定商户以后的扣款计划。发起扣款的时间需符合这里的扣款计划。 /// [JsonProperty("execute_time", NullValueHandling = NullValueHandling.Ignore)] public string ExecuteTime { get; set; } /// /// 【描述】单次扣款最大金额single_amount是周期扣款产品必填,即每次发起扣款时限制的最大金额,单位为元。商户每次发起扣款都不允许大于此金额。 /// [JsonProperty("single_amount", NullValueHandling = NullValueHandling.Ignore)] public decimal SingleAmount { get; set; } /// /// 【描述】总金额限制,单位为元。如果传入此参数,商户多次扣款的累计金额不允许超过此金额。 /// [JsonProperty("total_amount", NullValueHandling = NullValueHandling.Ignore)] public decimal TotalAmount { get; set; } /// /// 【描述】总扣款次数。如果传入此参数,则商户成功扣款的次数不能超过此次数限制(扣款失败不计入)。 /// [JsonProperty("total_payments", NullValueHandling = NullValueHandling.Ignore)] public int TotalPayments { get; set; } } public class SubMerchantParams { /// /// 子商户的商户id /// [JsonProperty("sub_merchant_id", NullValueHandling = NullValueHandling.Ignore)] public string SubMerchantId { get; set; } /// /// 子商户的商户名称 /// [JsonProperty("sub_merchant_name", NullValueHandling = NullValueHandling.Ignore)] public string SubMerchantName { get; set; } /// /// 子商户的服务名称 /// [JsonProperty("sub_merchant_service_name", NullValueHandling = NullValueHandling.Ignore)] public string SubMerchantServiceName { get; set; } /// /// 子商户的服务描述 /// [JsonProperty("sub_merchant_service_description", NullValueHandling = NullValueHandling.Ignore)] public string SubMerchantServiceDescription { get; set; } } public class IdentityParams { [JsonProperty("cert_no", NullValueHandling = NullValueHandling.Ignore)] public string CertNo { get; set; } [JsonProperty("user_name", NullValueHandling = NullValueHandling.Ignore)] public string UserName { get; set; } } }