zhanglin
2023-07-23 a7359ca2d8337b0796e36f3a3722790647bd7c62
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
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
package com.ruoyi.order.tools.request.pay.combine;
 
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
 
 
/**
 * <pre>
 * 使用合单支付接口,用户只输入一次密码,即可完成多个订单的支付。目前最少一次可支持2笔,最多一次10笔订单进行合单支付。
 * 文档地址:https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/combine/chapter3_1.shtml
 * </pre>
 */
@Data
@EqualsAndHashCode
@JsonIgnoreProperties()
public class CombineTransactionsAppRequest {
    /**
     * <pre>
     * 字段名:合单商户appid
     * 变量名:combine_appid
     * 是否必填:是
     * 类型:string[1,32]
     * 描述:
     *  body 合单发起方的appid。
     *  示例值:wxd678efh567hg6787 
     * </pre>
     */
    @JsonProperty(value = "combine_appid")
    private String combineAppid;
 
    /**
     * <pre>
     * 字段名:合单商户号
     * 变量名:combine_mchid
     * 是否必填:是
     * 类型:string[1,32]
     * 描述:
     *  body合单发起方商户号。
     *  示例值:1900000109 
     * </pre>
     */
    @JsonProperty(value = "combine_mchid")
    private String combineMchid;
 
    /**
     * <pre>
     * 字段名:合单商户订单号
     * 变量名:combine_out_trade_no
     * 是否必填:是
     * 类型:string[1,32]
     * 描述:
     *  body合单支付总订单号,要求32个字符内,只能是数字、大小写字母_-|*@ ,且在同一个商户号下唯一 。
     *  示例值:P20150806125346 
     * </pre>
     */
    @JsonProperty(value = "combine_out_trade_no")
    private String combineOutTradeNo;
 
    /**
     * <pre>
     * 字段名:+场景信息
     * 变量名:scene_info
     * 是否必填:否
     * 类型:object
     * 描述:body支付场景信息描述 
     * </pre>
     */
    @JsonProperty(value = "scene_info")
    private SceneInfo sceneInfo;
 
    /**
     * <pre>
     * 字段名:+子单信息
     * 变量名:sub_orders
     * 是否必填:是
     * 类型:array
     * 描述:
     *  body最多支持子单条数:10 
     *  
     * </pre>
     */
    @JsonProperty(value = "sub_orders")
    private List<SubOrders> subOrders;
 
    /**
     * <pre>
     * 字段名:+支付者
     * 变量名:combine_payer_info
     * 是否必填:否
     * 类型:object
     * 描述:body支付者信息 
     * </pre>
     */
    @JsonProperty(value = "combine_payer_info")
    private CombinePayerInfo combinePayerInfo;
 
    /**
     * <pre>
     * 字段名:交易起始时间
     * 变量名:time_start
     * 是否必填:否
     * 类型:string[1,32]
     * 描述:
     *  body订单生成时间,遵循rfc3339标准格式,格式为YYYY-MM-DDTHH:mm:ss+TIMEZONE,YYYY-MM-DD表示年月日,T出现在字符串中,表示time元素的开头,HH:mm:ss表示时分秒,TIMEZONE表示时区(+08:00表示东八区时间,领先UTC 8小时,即北京时间)。例如:2015-05-20T13:29:35+08:00表示,北京时间2015年5月20日 13点29分35秒。
     *  示例值:2019-12-31T15:59:59+08:00 
     * </pre>
     */
    @JsonProperty(value = "time_start")
    private String timeStart;
 
    /**
     * <pre>
     * 字段名:交易结束时间
     * 变量名:time_expire
     * 是否必填:否
     * 类型:string[1,32]
     * 描述:
     *  body订单失效时间,遵循rfc3339标准格式,格式为YYYY-MM-DDTHH:mm:ss+TIMEZONE,YYYY-MM-DD表示年月日,T出现在字符串中,表示time元素的开头,HH:mm:ss表示时分秒,TIMEZONE表示时区(+08:00表示东八区时间,领先UTC 8小时,即北京时间)。例如:2015-05-20T13:29:35+08:00表示,北京时间2015年5月20日 13点29分35秒。
     *  示例值:2019-12-31T15:59:59+08:00 
     * </pre>
     */
    @JsonProperty(value = "time_expire")
    private String timeExpire;
 
    /**
     * <pre>
     * 字段名:通知地址
     * 变量名:notify_url
     * 是否必填:是
     * 类型:string[1,256]
     * 描述:
     *  body接收微信支付异步通知回调地址,通知url必须为直接可访问的URL,不能携带参数。 
     *  格式: URL 
     *  示例值:https://yourapp.com/notify 
     * </pre>
     */
    @JsonProperty(value = "notify_url")
    private String notifyUrl;
 
    @EqualsAndHashCode
    @Data
    @JsonIgnoreProperties()
    public static class SceneInfo {
        /**
         * <pre>
         * 字段名:商户端设备号
         * 变量名:device_id
         * 是否必填:否
         * 类型:string[7,16]
         * 描述:
         *  终端设备号(门店号或收银设备ID) 。 
         *  示例值:POS1:123 
         * </pre>
         */
        @JsonProperty(value = "device_id")
        private String deviceId;
 
        /**
         * <pre>
         * 字段名:用户终端IP
         * 变量名:payer_client_ip
         * 是否必填:是
         * 类型:string[1,45]
         * 描述:
         *  用户的客户端IP,支持IPv4和IPv6两种格式的IP地址。 
         *  格式: ip(ipv4+ipv6) 
         *  示例值:14.17.22.32 
         * </pre>
         */
        @JsonProperty(value = "payer_client_ip")
        private String payerClientIp;
 
    }
 
    @EqualsAndHashCode
    @Data
    @JsonIgnoreProperties()
    public static class SubOrders {
        /**
         * <pre>
         * 字段名:子单商户号
         * 变量名:mchid
         * 是否必填:是
         * 类型:string[1,32]
         * 描述:
         *  子单发起方商户号即合单参与方商户号,必须与发起方appid有绑定关系。
         *  示例值:1900000109 
         * </pre>
         */
        @JsonProperty(value = "mchid")
        private String mchid;
 
        /**
         * <pre>
         * 字段名:附加数据
         * 变量名:attach
         * 是否必填:是
         * 类型:string[1,128]
         * 描述:
         *  附加数据,在查询API和支付通知中原样返回,可作为自定义参数使用。 
         *  示例值:深圳分店 
         * </pre>
         */
        @JsonProperty(value = "attach")
        private String attach;
 
        /**
         * <pre>
         * 字段名:+订单金额
         * 变量名:amount
         * 是否必填:是
         * 类型:object
         * 描述:订单金额信息 
         * </pre>
         */
        @JsonProperty(value = "amount")
        private Amount amount;
 
        /**
         * <pre>
         * 字段名:子单商户订单号
         * 变量名:out_trade_no
         * 是否必填:是
         * 类型:string[6,32]
         * 描述:
         *  商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*@ ,且在同一个商户号下唯一。 
         *  示例值:20150806125346 
         * </pre>
         */
        @JsonProperty(value = "out_trade_no")
        private String outTradeNo;
 
        /**
         * <pre>
         * 字段名:商品描述
         * 变量名:description
         * 是否必填:是
         * 类型:string[1,127]
         * 描述:
         *  商品简单描述。需传入应用市场上的APP名字-实际商品名称,例如:天天爱消除-游戏充值。
         *  示例值:腾讯充值中心-QQ会员充值 
         * </pre>
         */
        @JsonProperty(value = "description")
        private String description;
 
        /**
         * <pre>
         * 字段名:+结算信息
         * 变量名:settle_info
         * 是否必填:否
         * 类型:object
         * 描述:结算信息 
         * </pre>
         */
        @JsonProperty(value = "settle_info")
        private SettleInfo settleInfo;
 
    }
 
    @EqualsAndHashCode
    @Data
    @JsonIgnoreProperties()
    public static class CombinePayerInfo {
        /**
         * <pre>
         * 字段名:用户标识
         * 变量名:openid
         * 是否必填:否
         * 类型:string[1,128]
         * 描述:
         *  使用合单appid获取的对应用户openid。是用户在商户appid下的唯一标识。 
         *  示例值:oUpF8uMuAJO_M2pxb1Q9zNjWeS6o 
         * </pre>
         */
        @JsonProperty(value = "openid")
        private String openid;
 
    }
 
    @EqualsAndHashCode
    @Data
    @JsonIgnoreProperties()
    public static class Amount {
        /**
         * <pre>
         * 字段名:标价金额
         * 变量名:total_amount
         * 是否必填:是
         * 类型:int
         * 描述:
         *  子单金额,单位为分 
         *  境外场景下,标价金额要超过商户结算币种的最小单位金额,例如结算币种为美元,则标价金额必须大于1美分
         *  示例值:100 
         * </pre>
         */
        @JsonProperty(value = "total_amount")
        private Integer totalAmount;
 
        /**
         * <pre>
         * 字段名:标价币种
         * 变量名:currency
         * 是否必填:是
         * 类型:string[1,8]
         * 描述:
         *  符合ISO 4217标准的三位字母代码,人民币:CNY 。
         *  示例值:CNY 
         * </pre>
         */
        @JsonProperty(value = "currency")
        private String currency;
 
    }
 
    @EqualsAndHashCode
    @Data
    @JsonIgnoreProperties()
    public static class SettleInfo {
        /**
         * <pre>
         * 字段名:是否指定分账
         * 变量名:profit_sharing
         * 是否必填:否
         * 类型:bool
         * 描述:
         *  是否指定分账,枚举值
         *  true:是 
         *  false:否 
         *  示例值:true 
         * </pre>
         */
        @JsonProperty(value = "profit_sharing")
        private Boolean profitSharing;
 
        /**
         * <pre>
         * 字段名:补差金额
         * 变量名:subsidy_amount
         * 是否必填:否
         * 类型:int64
         * 描述:
         *  SettleInfo.profit_sharing为true时,该金额才生效。 
         *  注意:单笔订单最高补差金额为5000元
         *  示例值:10 
         * </pre>
         */
        @JsonProperty(value = "subsidy_amount")
        private Integer subsidyAmount;
 
    }
 
}