doum
昨天 4bb5e34bc9d6e0332e96e90036ba187ff17df57f
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
package com.allinpay.syb.lib;
 
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.allinpay.syb.model.PayOrderNotifyParam;
import com.allinpay.syb.model.PayOrderRefundResponse;
import com.allinpay.syb.model.PayPublicModel;
import com.doumee.core.utils.HttpsUtil;
import com.doumee.dao.business.model.Orders;
import com.doumee.dao.business.model.Refund;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
 
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.Date;
import java.util.Map;
import java.util.TreeMap;
 
@Slf4j
@Data
public class DoumeeTLUtil {
    public static final String SUCCESS_CODE = "SUCCESS";
    public static final String FAIL_CODE = "FAIL";
    private PayPublicModel publicModel;
    private String appkey;
    private String pubKey;
    public DoumeeTLUtil(PayPublicModel model){
        this.publicModel = model;
    }
    public  static  String REFUND_SN_PREFIX = "refund_";
    public PayOrderRefundResponse sendRefundOrder(String reqsn, String oldReqsn, String money, String remark)    {
            TreeMap<String, String> params = new TreeMap<String, String>();
            params.put("cusid", publicModel.getCusid());
            params.put("appid", publicModel.getAppid());
            params.put("version", publicModel.getVersion());
            params.put("trxid", "");
            params.put("randomstr", SybUtil.getValidatecode(8));
            params.put("signtype", publicModel.getSigntype());
            params.put("notify_url",publicModel.getNotifyUrl());
            params.remove("sign");
            params.put("reqsn",REFUND_SN_PREFIX+reqsn);
            params.put("oldreqsn",oldReqsn);
            params.put("trxamt",money);
            params.put("remark",remark);
            return  sendRequest(params,publicModel.getUrl()+"/tranx/refund",publicModel.getAppkey(),publicModel.getAppPubkey(),new TypeReference<PayOrderRefundResponse>(){});
    }
    public  PayOrderNotifyParam   sendQueryOrder(String reqsn  )  {
            TreeMap<String, String> params = new TreeMap<String, String>();
            params.put("cusid", publicModel.getCusid());
            params.put("appid", publicModel.getAppid());
            params.put("version", publicModel.getVersion());
            params.put("trxid", "");
            params.put("randomstr", SybUtil.getValidatecode(8));
            params.put("signtype", publicModel.getSigntype());
            params.remove("sign");
            params.put("reqsn",reqsn);
           return  sendRequest(params,publicModel.getUrl()+"/tranx/query",publicModel.getAppkey(),publicModel.getAppPubkey(),new TypeReference<PayOrderNotifyParam>(){});
    }
    public static <T> T sendRequest(TreeMap<String,String> params, String url, String appkey, String pubKey, TypeReference<T> typeReference )  {
        try {
            params.put("sign", SybUtil.unionSign(params,appkey,params.get("signtype")));
            String data =getHttpParamsStr(params);
            log.error("订单交易数据请求================{}",data);
            String result =  HttpsUtil.post(url,data,"application/x-www-form-urlencoded",true);
            log.error("订单查交据返回================{}",result);
            T map = handleResult(result,pubKey,params.get("signtype"),typeReference);
            return map;
        }catch (Exception e){
            log.error("通联订单查询异常================{}",e);
        }
        return  null;
    }
    public static String getHttpParamsStr(Map<String, String> params ) throws IOException {
        StringBuilder outBuf = new StringBuilder();
        boolean isNotFirst = false;
        for (Map.Entry<String, String> entry: params.entrySet()){
            if (isNotFirst)
                outBuf.append('&');
            isNotFirst = true;
            outBuf
                    .append(entry.getKey())
                    .append('=')
                    .append(URLEncoder.encode(StringUtils.defaultString(entry.getValue(),""), "UTF-8"));
        }
        System.out.println("参数:"+outBuf.toString());
        return outBuf.toString();
    }
 
    public static <T> T  handleResult(String result,String pubKey,String signType, TypeReference<T> typeReference ) throws Exception{
        log.error("返回数据返回================{}",result);
        Map map = SybUtil.json2ObjMap(result);
        if(map == null){
            log.error("返回数据返回错误================{}",result);
            throw new Exception("返回数据错误");
        }
        if("SUCCESS".equals(map.get("retcode"))){
            TreeMap tmap = new TreeMap();
            tmap.putAll(map);
            if(SybUtil.validSign(tmap, pubKey, signType)){
                T param = JSONObject.parseObject(result,typeReference.getType());
                return param;
            }
        }
        return null;
    }
    public static  TreeMap<String, String> getParams(HttpServletRequest request){
        TreeMap<String, String> map = new TreeMap<String, String>();
        Map reqMap = request.getParameterMap();
        for(Object key:reqMap.keySet()){
            String value = ((String[])reqMap.get(key))[0];
            System.out.println(key+";"+value);
            map.put(key.toString(),value);
        }
        return map;
    }
 
}