xiaoyong931011
2022-09-24 3e0c2e4de5415cfa1bab063044ef6d1235f50f6e
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
package cc.mrbird.febs.pay.model;
 
 
import cc.mrbird.febs.pay.util.RandomStringGenerator;
import cc.mrbird.febs.pay.util.Signature;
 
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
 
/**
 * User: rizenguo
 * Date: 2014/10/25
 * Time: 16:12
 */
public class RefundReqData {
 
    //每个字段具体的意思请查看API文档
    private String appid = "";
    private String mch_id = "";
    private String device_info = "";
    private String nonce_str = "";
    private String sign = "";
    private String transaction_id = "";
    private String out_trade_no = "";
    private String out_refund_no = "";
    private int total_fee = 0;
    private int refund_fee = 0;
    private String refund_fee_type = "CNY";
    private String op_user_id = "";
 
    /**
     * 请求退款服务
     * @param transactionID 是微信系统为每一笔支付交易分配的订单号,通过这个订单号可以标识这笔交易,它由支付订单API支付成功时返回的数据里面获取到。建议优先使用
     * @param outTradeNo 商户系统内部的订单号,transaction_id 、out_trade_no 二选一,如果同时存在优先级:transaction_id>out_trade_no
     * @param deviceInfo 微信支付分配的终端设备号,与下单一致
     * @param outRefundNo 商户系统内部的退款单号,商户系统内部唯一,同一退款单号多次请求只退一笔
     * @param totalFee 订单总金额,单位为分
     * @param refundFee 退款总金额,单位为分,可以做部分退款
     * @param opUserID 操作员帐号, 默认为商户号
     * @param refundFeeType 货币类型,符合ISO 4217标准的三位字母代码,默认为CNY(人民币)
     */
    public RefundReqData(String mchID,String appID,String paySecret ,String outTradeNo,String outRefundNo,int totalFee,int refundFee,String opUserID){
 
         //微信分配的公众号ID(开通公众号之后可以获取到)
        setAppid(appID);
 
        //微信支付分配的商户号ID(开通公众号的微信支付功能之后可以获取到)
        setMch_id(mchID);
 
        //transaction_id是微信系统为每一笔支付交易分配的订单号,通过这个订单号可以标识这笔交易,它由支付订单API支付成功时返回的数据里面获取到。
        //setTransaction_id(transactionID);
 
        //商户系统自己生成的唯一的订单号
        setOut_trade_no(outTradeNo);
 
        //微信支付分配的终端设备号,与下单一致
        //setDevice_info(deviceInfo);
 
        setOut_refund_no(outRefundNo);
 
        setTotal_fee(totalFee);
 
        setRefund_fee(refundFee);
 
        setOp_user_id(opUserID);
 
        //随机字符串,不长于32 位
        setNonce_str(RandomStringGenerator.getRandomStringByLength(32));
 
        //根据API给的签名规则进行签名
        String sign = Signature.getSign(toMap(),paySecret);
        setSign(sign);//把签名数据设置到Sign这个属性中
 
    }
 
    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 getTransaction_id() {
        return transaction_id;
    }
 
    public void setTransaction_id(String transaction_id) {
        this.transaction_id = transaction_id;
    }
 
    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 String getOut_refund_no() {
        return out_refund_no;
    }
 
    public void setOut_refund_no(String out_refund_no) {
        this.out_refund_no = out_refund_no;
    }
 
    public int getTotal_fee() {
        return total_fee;
    }
 
    public void setTotal_fee(int total_fee) {
        this.total_fee = total_fee;
    }
 
    public int getRefund_fee() {
        return refund_fee;
    }
 
    public void setRefund_fee(int refund_fee) {
        this.refund_fee = refund_fee;
    }
 
    public String getOp_user_id() {
        return op_user_id;
    }
 
    public void setOp_user_id(String op_user_id) {
        this.op_user_id = op_user_id;
    }
 
    public String getRefund_fee_type() {
        return refund_fee_type;
    }
 
    public void setRefund_fee_type(String refund_fee_type) {
        this.refund_fee_type = refund_fee_type;
    }
 
    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;
    }
 
}