xiaoyong931011
2022-07-27 3280d1bd977e8fb5c9c60e615612fabb7b99c3e3
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
package cc.mrbird.febs.pay.model;
 
 
import cc.mrbird.febs.pay.util.RandomStringGenerator;
import cc.mrbird.febs.pay.util.Signature;
import cc.mrbird.febs.pay.util.WechatConfigure;
 
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
 
/**
 * 
*  预付订单请求参数
* @author:姜友瑶 
* @date 2016年10月14日
 */
public class JsApiPayReqData {
 
    //每个字段具体的意思请查看API文档
    private String appid = "";
    private String mch_id = "";
    private String device_info = "";
    private String nonce_str = "";
    private String sign = "";
    private String body = "";
    private String detail = "";
    private String attach = "";
    private String out_trade_no = "";
    private String fee_type = "";
    private int total_fee = 0;
    /**
     * 接收微信支付异步通知回调地址
     */
    private String trade_type = WechatConfigure.TRADE_TYPE_JSAPI;
    private String notify_url ;
    private String openid = "";
    private String limit_pay = "";
    private String spbill_create_ip = "";
    private String product_id = "";
    private String time_start = "";
    private String time_expire = "";
    private String goods_tag = "";
    private String auth_code = "";
 
    
    public JsApiPayReqData() {
    }
    
    /**appID 收款应用id
     * mchID 商户号
     * @param authCode 这个是扫码终端设备从用户手机上扫取到的支付授权号,这个号是跟用户用来支付的银行卡绑定的,有效期是1分钟
     * @param body 要支付的商品的描述信息,用户会在支付成功页面里看到这个信息
     * @param attach 支付订单里面可以填的附加数据,API会将提交的这个附加数据原样返回
     * @param outTradeNo 商户系统内部的订单号,32个字符内可包含字母, 确保在商户系统唯一
     * @param totalFee 订单总金额,单位为“分”,只能整数
     * @param deviceInfo 商户自己定义的扫码支付终端设备号,方便追溯这笔交易发生在哪台终端设备上
     * @param spBillCreateIP 订单生成的机器IP
     * @param timeStart 订单生成时间, 格式为yyyyMMddHHmmss,如2009年12 月25 日9 点10 分10 秒表示为20091225091010。时区为GMT+8 beijing。该时间取自商户服务器
     * @param timeExpire 订单失效时间,格式同上
     * @param goodsTag 商品标记,微信平台配置的商品标记,用于优惠券或者满减使用
     */
    public JsApiPayReqData(String appID, String mchID, String paySecret, String notify_url, String body, String outTradeNo, int totalFee, String spBillCreateIP, String openid, String attach){
        //默认必须设置
        setAppid(appID);
        setMch_id(mchID);
        setNotify_url(notify_url);
        setBody(body);
        setOut_trade_no(outTradeNo);
        setTotal_fee(totalFee);
        setSpbill_create_ip(spBillCreateIP);
        setAttach(attach);
        //随机字符串,不长于32 位
        setNonce_str(RandomStringGenerator.getRandomStringByLength(32));
        setOpenid(openid);
        //根据API给的签名规则进行签名 【 必须要放在本方法的最后】
        String sign = Signature.getSign(toMap(),paySecret);
        setSign(sign);//把签名数据设置到Sign这个属性中
      
    }
 
    public JsApiPayReqData(String appID, String mchID, String paySecret, String notify_url, String body, String outTradeNo, int totalFee, String spBillCreateIP, String attach){
        //默认必须设置
        setAppid(appID);
        setMch_id(mchID);
        setBody(body);
        setNotify_url(notify_url);
        setOut_trade_no(outTradeNo);
        setTotal_fee(totalFee);
        setSpbill_create_ip(spBillCreateIP);
        setAttach(attach);
        //随机字符串,不长于32 位
        setNonce_str(RandomStringGenerator.getRandomStringByLength(32));
        //根据API给的签名规则进行签名 【 必须要放在本方法的最后】
        String sign = Signature.getSign(toMap(),paySecret);
        setSign(sign);//把签名数据设置到Sign这个属性中
    }
    
    public String getDetail() {
        return detail;
    }
 
    public void setDetail(String detail) {
        this.detail = detail;
    }
 
    public String getFee_type() {
        return fee_type;
    }
 
    public void setFee_type(String fee_type) {
        this.fee_type = fee_type;
    }
 
    public String getNotify_url() {
        return notify_url;
    }
 
    public void setNotify_url(String notify_url) {
        this.notify_url = notify_url;
    }
 
    public String getTrade_type() {
        return trade_type;
    }
 
    public void setTrade_type(String trade_type) {
        this.trade_type = trade_type;
    }
 
    public String getOpenid() {
        return openid;
    }
 
    public void setOpenid(String openid) {
        this.openid = openid;
    }
 
    public String getLimit_pay() {
        return limit_pay;
    }
 
    public void setLimit_pay(String limit_pay) {
        this.limit_pay = limit_pay;
    }
 
    public String getProduct_id() {
        return product_id;
    }
 
    public void setProduct_id(String product_id) {
        this.product_id = product_id;
    }
 
    public String getAppid() {
        return appid;
    }
 
    public void setAppid(String appid) {
        this.appid = appid;
    }
 
    public String getMch_id() {
        return mch_id;
    }
 
    public void setMch_id(String mch_id) {
        this.mch_id = mch_id;
    }
 
    public String getDevice_info() {
        return device_info;
    }
 
    public void setDevice_info(String device_info) {
        this.device_info = device_info;
    }
 
    public String getNonce_str() {
        return nonce_str;
    }
 
    public void setNonce_str(String nonce_str) {
        this.nonce_str = nonce_str;
    }
 
    public String getSign() {
        return sign;
    }
 
    public void setSign(String sign) {
        this.sign = sign;
    }
 
    public String getBody() {
        return body;
    }
 
    /**
     * 
    * body最大长度128
    * @author:姜友瑶
    * @param body    
    * 返回类型  void    
    * @date 2016年10月13日
     */
    public void setBody(String body) {
    
        if(body.length()>128){
            body=body.substring(0, 128);
        }
        this.body = body;
    }
 
    public String getAttach() {
        return attach;
    }
 
    public void setAttach(String attach) {
        this.attach = attach;
    }
 
    public String getOut_trade_no() {
        return out_trade_no;
    }
 
    public void setOut_trade_no(String out_trade_no) {
        this.out_trade_no = out_trade_no;
    }
 
    public int getTotal_fee() {
        return total_fee;
    }
 
    public void setTotal_fee(int total_fee) {
        this.total_fee = total_fee;
    }
 
    public String getSpbill_create_ip() {
        return spbill_create_ip;
    }
 
    public void setSpbill_create_ip(String spbill_create_ip) {
        this.spbill_create_ip = spbill_create_ip;
    }
 
    public String getTime_start() {
        return time_start;
    }
 
    public void setTime_start(String time_start) {
        this.time_start = time_start;
    }
 
    public String getTime_expire() {
        return time_expire;
    }
 
    public void setTime_expire(String time_expire) {
        this.time_expire = time_expire;
    }
 
    public String getGoods_tag() {
        return goods_tag;
    }
 
    public void setGoods_tag(String goods_tag) {
        this.goods_tag = goods_tag;
    }
 
    public String getAuth_code() {
        return auth_code;
    }
 
    public void setAuth_code(String auth_code) {
        this.auth_code = auth_code;
    }
 
    public Map<String,Object> toMap(){
        Map<String,Object> map = new HashMap<String, Object>();
        Field[] fields = this.getClass().getDeclaredFields();
        for (Field field : fields) {
            Object obj;
            try {
                obj = field.get(this);
                if(obj!=null){
                    map.put(field.getName(), obj);
                }
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
        return map;
    }
 
}