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 params = new TreeMap(); 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(){}); } public PayOrderNotifyParam sendQueryOrder(String reqsn ) { TreeMap params = new TreeMap(); 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(){}); } public static T sendRequest(TreeMap params, String url, String appkey, String pubKey, TypeReference 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 params ) throws IOException { StringBuilder outBuf = new StringBuilder(); boolean isNotFirst = false; for (Map.Entry 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 handleResult(String result,String pubKey,String signType, TypeReference 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 getParams(HttpServletRequest request){ TreeMap map = new TreeMap(); 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; } }