add
yj
2024-12-05 b9900893177c78fc559223521fe839aa21000017
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
package com.dobbinsoft.fw.pay.model.request;
 
import com.dobbinsoft.fw.pay.anntation.MatrixIgnoreCopy;
import com.dobbinsoft.fw.pay.anntation.MatrixNotNull;
import com.dobbinsoft.fw.pay.enums.PayChannelType;
import lombok.*;
 
import java.util.List;
 
/**
 * <pre>
 * 统一下单请求参数对象.
 * 参考文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
 * </pre>
 *
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Builder(builderMethodName = "newBuilder")
@NoArgsConstructor
@AllArgsConstructor
public class MatrixPayUnifiedOrderRequest extends MatrixBasePayRequest {
 
    private static final long serialVersionUID = -3173551488619526785L;
    /**
     * <pre>
     * 字段名:接口版本号.
     * 变量名:version
     * 是否必填:单品优惠必填
     * 类型:String(32)
     * 示例值:1.0
     * 描述:单品优惠新增字段,接口版本号,区分原接口,默认填写1.0。
     * 入参新增version后,则支付通知接口也将返回单品优惠信息字段promotion_detail,请确保支付通知的签名验证能通过。
     * 更多信息,详见文档:https://pay.weixin.qq.com/wiki/doc/api/danpin.php?chapter=9_102&index=2
     * </pre>
     */
    private String version;
 
    /**
     * <pre>
     * 字段名:设备号.
     * 变量名:device_info
     * 是否必填:否
     * 类型:String(32)
     * 示例值:013467007045764
     * 描述:终端设备号(门店号或收银设备Id),注意:PC网页或公众号内支付请传"WEB"
     * </pre>
     */
    private String deviceInfo;
 
    /**
     * <pre>
     * 字段名:商品描述.
     * 变量名:body
     * 是否必填:是
     * 类型:String(128)
     * 示例值: 腾讯充值中心-QQ会员充值
     * 描述:商品简单描述,该字段须严格按照规范传递,具体请见参数规定
     * </pre>
     */
    @MatrixNotNull(msg = "商品描述不可为空 [body]")
    private String body;
 
    /**
     * <pre>
     * 字段名:商品详情.
     * 变量名:detail
     * 是否必填:否
     * 类型:String(6000)
     * 描述:商品详细列表,使用Json格式,传输签名前请务必使用CDATA标签将JSON文本串保护起来。
     * </pre>
     */
    @MatrixIgnoreCopy
    private List<MatrixPayRequestGoodsDetail> detail;
 
    /**
     * <pre>
     * 字段名:附加数据.
     * 变量名:attach
     * 是否必填:否
     * 类型:String(127)
     * 示例值: 深圳分店
     * 描述:  附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据
     * </pre>
     */
    private String attach;
 
    /**
     * <pre>
     * 字段名:商户订单号.
     * 变量名:out_trade_no
     * 是否必填:是
     * 类型:String(32)
     * 示例值:20150806125346
     * 描述:商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号
     * </pre>
     */
    private String outTradeNo;
 
    /**
     * <pre>
     * 字段名:货币类型.
     * 变量名:fee_type
     * 是否必填:否
     * 类型:String(16)
     * 示例值:CNY
     * 描述: 符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
     * </pre>
     */
    private String feeType;
 
    /**
     * <pre>
     * 字段名:总金额.
     * 变量名:total_fee
     * 是否必填:是
     * 类型:Int
     * 示例值: 888
     * 描述:订单总金额,单位为分,详见支付金额
     * </pre>
     */
    @MatrixNotNull(msg = "订单总金额不能为空 [totalFee]")
    private Integer totalFee;
 
    /**
     * <pre>
     * 字段名:终端IP.
     * 变量名:spbill_create_ip
     * 是否必填:是
     * 类型:String(16)
     * 示例值:123.12.12.123
     * 描述:APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP。
     * </pre>
     */
    @MatrixNotNull(channels = {PayChannelType.WX}, msg = "{channel}客户端IP不能为空 [spbillCreateIp]")
    private String spbillCreateIp;
 
    /**
     * <pre>
     * 字段名:交易起始时间.
     * 变量名:time_start
     * 是否必填:否
     * 类型:String(14)
     * 示例值:20091225091010
     * 描述:订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则
     * </pre>
     */
    private String timeStart;
 
    /**
     * <pre>
     * 字段名:交易结束时间.
     * 变量名:time_expire
     * 是否必填:否
     * 类型:String(14)
     * 示例值:20091227091010
     * 描述:订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。其他详见时间规则
     *   注意:最短失效时间间隔必须大于5分钟
     * </pre>
     */
    private String timeExpire;
 
    /**
     * <pre>
     * 字段名:商品标记.
     * 变量名:goods_tag
     * 是否必填:否
     * 类型:String(32)
     * 示例值:WXG
     * 描述:商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠
     * </pre>
     */
    private String goodsTag;
 
    /**
     * <pre>
     * 字段名:通知地址.
     * 变量名:notify_url
     * 是否必填:是
     * 类型:String(256)
     * 示例值:http://www.weixin.qq.com/wxpay/pay.php
     * 描述:接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数。
     * </pre>
     */
    private String notifyUrl;
 
    /**
     * <pre>
     * 字段名:交易类型.
     * 变量名:trade_type
     * 是否必填:是
     * 类型:String(16)
     * 示例值: JSAPI
     * 描述: 取值如下:JSAPI,NATIVE,APP,详细说明见参数规定:
     * JSAPI--公众号支付、NATIVE--原生扫码支付、APP--app支付,统一下单接口trade_type的传参可参考这里
     * </pre>
     */
//    private String tradeType;
 
    /**
     * <pre>
     * 字段名:商品Id.
     * 变量名:product_id
     * 是否必填:否
     * 类型:String(32)
     * 示例值:12235413214070356458058
     * 描述:trade_type=NATIVE,此参数必传。此id为二维码中包含的商品Id,商户自行定义。
     * </pre>
     */
    private String productId;
 
    /**
     * <pre>
     * 字段名:指定支付方式.
     * 变量名:limit_pay
     * 是否必填:否
     * 类型:String(32)
     * 示例值:no_credit
     * 描述:no_credit--指定不能使用信用卡支付
     * </pre>
     */
    private String limitPay;
 
    /**
     * <pre>
     * 字段名:用户标识.
     * 变量名:openid
     * 是否必填:否
     * 类型:String(128)
     * 示例值:oUpF8uMuAJO_M2pxb1Q9zNjWeS6o
     * 描述:trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识。
     * openid如何获取,可参考【获取openid】。
     * 企业号请使用【企业号OAuth2.0接口】获取企业号内成员userid,再调用【企业号userid转openid接口】进行转换
     * </pre>
     */
    private String openid;
 
    /**
     * <pre>
     * 字段名:用户子标识.
     * 变量名:sub_openid
     * 是否必填:否
     * 类型:String(128)
     * 示例值:oUpF8uMuAJO_M2pxb1Q9zNjWeS6o
     * 描述:trade_type=JSAPI,此参数必传,用户在子商户appid下的唯一标识。
     * openid和sub_openid可以选传其中之一,如果选择传sub_openid,则必须传sub_appid。
     * 下单前需要调用【网页授权获取用户信息】接口获取到用户的Openid。
     * </pre>
     */
    private String subOpenid;
 
    /**
     * <pre>
     * 字段名:电子发票入口开放标识.
     * 变量名:    receipt
     * 是否必填:否
     * 类型:String(8)
     * 示例值:Y
     * 描述:    Y,传入Y时,支付成功消息和支付详情页将出现开票入口。需要在微信支付商户平台或微信公众平台开通电子发票功能,传此字段才可生效
     * </pre>
     */
    private String receipt;
 
    /**
     * <pre>
     * 字段名:场景信息.
     * 变量名:scene_info
     * 是否必填:否,对H5支付来说是必填
     * 类型:String(256)
     * 示例值:{
     * "store_id": "SZT10000",
     * "store_name":"腾讯大厦腾大餐厅"
     * }
     * 描述:该字段用于统一下单时上报场景信息,目前支持上报实际门店信息。
     * {
     * "store_id": "", //门店唯一标识,选填,String(32)
     * "store_name":"”//门店名称,选填,String(64)
     * }
     * </pre>
     */
    private String sceneInfo;
    /**
     * <pre>
     * 字段名:浏览器指纹.
     * 变量名:fingerprint
     * 是否必填:否
     * 详细参考 https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_7&index=6
     * </pre>
     */
    private String fingerprint;
 
    /**
     * <pre>
     * 字段名:重定向地址
     * 变量名:returnUrl
     * 描述:Web支付成功后,
     * </pre>
     */
    private String returnUrl;
 
    /**
     * 如果配置中已经设置,可以不设置值.
     *
     * @param notifyUrl 支付回调通知地址
     */
    public void setNotifyUrl(String notifyUrl) {
        this.notifyUrl = notifyUrl;
    }
 
}