zhengyiming
2025-04-01 a3f1926a7530fd4a3b9196824a8e8b00c693e6e3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
using Newtonsoft.Json;
using System.ComponentModel.DataAnnotations;
 
namespace LifePayment.Domain
{
    public class UserAgreementPageSignInput
    {
        /// <summary>
        /// 个人签约产品码,商户和支付宝签约时确定,商户可咨询技术支持。值:GENERAL_WITHHOLDING_P
        /// </summary>
        [JsonProperty("personal_product_code", NullValueHandling = NullValueHandling.Ignore)]
        [Required]
        public string PersonalProductCode
        {
            get;
            set;
        }
 
        /// <summary>
        /// 请按当前接入的方式进行填充,且输入值必须为文档中的参数取值范围。
        /// 扫码或者短信页面签约需要拼装http的请求地址访问中间页面,钱包h5页面签约可直接拼接scheme的请求地址
        /// </summary>
        [JsonProperty("access_params", NullValueHandling = NullValueHandling.Ignore)]
        [Required]
        public AccessParams AccessParams
        {
            get;
            set;
        }
 
        /// <summary>
        /// 【描述】周期管控规则参数period_rule_params,在签约周期扣款产品(如CYCLE_PAY_AUTH_P)时必传,在签约其他产品时无需传入。
        /// 周期扣款产品,会按照这里传入的参数提示用户,并对发起扣款的时间、金额、次数等做相应限制。
        /// </summary>
        [JsonProperty("period_rule_params", NullValueHandling = NullValueHandling.Ignore)]
        public PeriodRuleParams PeriodRuleParams
        {
            get;
            set;
        }
 
        /// <summary>
        /// 销售产品码,商户签约的支付宝合同所对应的产品码。值:GENERAL_WITHHOLDING
        /// </summary>
        [JsonProperty("product_code", NullValueHandling = NullValueHandling.Ignore)]
        [Required]
        public string ParentBranchNo
        {
            get;
            set;
        }
 
        /// <summary>
        /// 用户在商户网站的登录账号,用于在签约页面展示,如果为空,则不展示
        /// </summary>
        [JsonProperty("external_logon_id", NullValueHandling = NullValueHandling.Ignore)]
        [Required]
        public string ExternalLogonId
        {
            get;
            set;
        }
 
        /// <summary>
        /// 协议签约场景,商户可根据 代扣产品常见场景值 选择符合自身的行业场景。 说明:当传入商户签约号 external_agreement_no 时,本参数必填,不能为默认值 DEFAULT|DEFAULT。
        /// </summary>
        [JsonProperty("sign_scene", NullValueHandling = NullValueHandling.Ignore)]
        [Required]
        public string SignScene
        {
            get;
            set;
        }
 
        /// <summary>
        /// 商家签约的产品码,固定值。安全发-服务商模式(单笔转账到支付宝账户)
        /// </summary>
        [JsonProperty("product_code", NullValueHandling = NullValueHandling.Ignore)]
        [Required]
        public string ProductCode
        {
            get;
            set;
        }
 
        /// <summary>
        /// 商户签约号,代扣协议中标示用户的唯一签约号(确保在商户系统中唯一)。
        /// 格式规则:支持大写小写字母和数字,最长32位。
        /// 商户系统按需传入,如果同一用户在同一产品码、同一签约场景下,签订了多份代扣协议,那么需要指定并传入该值。
        /// </summary>
        [JsonProperty("external_agreement_no", NullValueHandling = NullValueHandling.Ignore)]
        [Required]
        public string ExternalAgreementNo
        {
            get;
            set;
        }
 
        /// <summary>
        /// 签约第三方主体类型。对于三方协议,表示当前用户和哪一类的第三方主体进行签约。
        /// 取值范围:
        /// 1. PARTNER(平台商户)
        /// 2. MERCHANT(集团商户),集团下子商户可共享用户签约内容
        /// 默认为PARTNER。
        /// </summary>
        [JsonProperty("third_party_type", NullValueHandling = NullValueHandling.Ignore)]
        [Required]
        public string ThirdPartyType
        {
            get;
            set;
        }
 
        /// <summary>
        /// 当前用户签约请求的协议有效周期。
        /// 整形数字加上时间单位的协议有效期,从发起签约请求的时间开始算起。
        /// 目前支持的时间单位:
        /// 1. d:天
        /// 2. m:月
        /// 如果未传入,默认为长期有效。
        /// </summary>
        [JsonProperty("sign_validity_period", NullValueHandling = NullValueHandling.Ignore)]
        public string SignValidityPeriod
        {
            get;
            set;
        }
 
        /// <summary>
        /// 签约营销参数,此值为json格式;具体的key需与营销约定
        /// </summary>
        [JsonProperty("promo_params", NullValueHandling = NullValueHandling.Ignore)]
        public string PromoParams
        {
            get;
            set;
        }
 
        /// <summary>
        /// 此参数用于传递子商户信息,无特殊需求时不用关注。
        /// 目前商户代扣、海外代扣、淘旅行信用住产品支持传入该参数(在销售方案中“是否允许自定义子商户信息”需要选是)。
        /// </summary>
        [JsonProperty("sub_merchant", NullValueHandling = NullValueHandling.Ignore)]
        public SubMerchantParams SubMerchantParams
        {
            get;
            set;
        }
 
        /// <summary>
        /// 协议生效类型, 用于指定协议是立即生效还是等待商户通知再生效. 可空, 不填默认为立即生效.
        /// </summary>
        [JsonProperty("agreement_effect_type", NullValueHandling = NullValueHandling.Ignore)]
        public string AgreementEffectType
        {
            get;
            set;
        }
 
        /// <summary>
        /// 用户实名信息参数,包含:姓名、身份证号、签约指定uid。商户传入用户实名信息参数,支付宝会对比用户在支付宝端的实名信息。
        /// </summary>
        [JsonProperty("identity_params", NullValueHandling = NullValueHandling.Ignore)]
        public IdentityParams IdentityParams
        {
            get;
            set;
        }
 
        /// <summary>
        /// 商户希望限制的签约用户的年龄范围,min表示可签该协议的用户年龄下限,max表示年龄上限。如{"min": "18","max": "30"}表示18=<年龄<=30的用户可以签约该协议。
        /// </summary>
        [JsonProperty("user_age_range", NullValueHandling = NullValueHandling.Ignore)]
        public string UserAgeRange
        {
            get;
            set;
        }
 
        /// <summary>
        /// 签约有效时间限制,单位是秒,有效范围是0-86400,商户传入此字段会用商户传入的值否则使用支付宝侧默认值,在有效时间外进行签约,会进行安全拦截;(备注:此字段适用于需要开通安全防控的商户,且依赖商户传入生成签约时的时间戳字段timestamp)
        /// </summary>
        [JsonProperty("effect_time", NullValueHandling = NullValueHandling.Ignore)]
        public string EffectTime
        {
            get;
            set;
        }
    }
 
    public class AccessParams
    {
        /// <summary>
        /// 目前支持以下值:
        /// 1. ALIPAYAPP (钱包h5页面签约)
        /// 2. QRCODE(扫码签约)
        /// 3. QRCODEORSMS(扫码签约或者短信签约)
        /// </summary>
        [JsonProperty("channel", NullValueHandling = NullValueHandling.Ignore)]
        [Required]
        public string Channel
        {
            get;
            set;
        }
    }
 
    public class PeriodRuleParams
    {
        /// <summary>
        /// 【描述】周期类型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
        /// </summary>
        [JsonProperty("period_type", NullValueHandling = NullValueHandling.Ignore)]
        public string PeriodType
        {
            get;
            set;
        }
 
        /// <summary>
        /// 【描述】周期数period是周期扣款产品必填。与另一参数period_type组合使用确定扣款周期,例如period_type为DAY,period=90,则扣款周期为90天。
        /// </summary>
        [JsonProperty("period", NullValueHandling = NullValueHandling.Ignore)]
        public string Period
        {
            get;
            set;
        }
 
        /// <summary>
        /// 首次执行时间execute_time是周期扣款产品必填,即商户发起首次扣款的时间。精确到日,格式为yyyy-MM-dd 结合其他必填的扣款周期参数,会确定商户以后的扣款计划。发起扣款的时间需符合这里的扣款计划。
        /// </summary>
        [JsonProperty("execute_time", NullValueHandling = NullValueHandling.Ignore)]
        public string ExecuteTime
        {
            get;
            set;
        }
 
        /// <summary>
        /// 【描述】单次扣款最大金额single_amount是周期扣款产品必填,即每次发起扣款时限制的最大金额,单位为元。商户每次发起扣款都不允许大于此金额。
        /// </summary>
        [JsonProperty("single_amount", NullValueHandling = NullValueHandling.Ignore)]
        public decimal SingleAmount
        {
            get;
            set;
        }
 
        /// <summary>
        /// 【描述】总金额限制,单位为元。如果传入此参数,商户多次扣款的累计金额不允许超过此金额。
        /// </summary>
        [JsonProperty("total_amount", NullValueHandling = NullValueHandling.Ignore)]
        public decimal TotalAmount
        {
            get;
            set;
        }
 
        /// <summary>
        /// 【描述】总扣款次数。如果传入此参数,则商户成功扣款的次数不能超过此次数限制(扣款失败不计入)。
        /// </summary>
        [JsonProperty("total_payments", NullValueHandling = NullValueHandling.Ignore)]
        public int TotalPayments
        {
            get;
            set;
        }
    }
 
    public class SubMerchantParams
    {
        /// <summary>
        /// 子商户的商户id
        /// </summary>
        [JsonProperty("sub_merchant_id", NullValueHandling = NullValueHandling.Ignore)]
        public string SubMerchantId
        {
            get;
            set;
        }
 
        /// <summary>
        /// 子商户的商户名称
        /// </summary>
        [JsonProperty("sub_merchant_name", NullValueHandling = NullValueHandling.Ignore)]
        public string SubMerchantName
        {
            get;
            set;
        }
 
        /// <summary>
        /// 子商户的服务名称
        /// </summary>
        [JsonProperty("sub_merchant_service_name", NullValueHandling = NullValueHandling.Ignore)]
        public string SubMerchantServiceName
        {
            get;
            set;
        }
 
        /// <summary>
        /// 子商户的服务描述
        /// </summary>
        [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; }
    }
}