package com.mzl.flower.pay;
|
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.stereotype.Service;
|
|
import java.net.URLEncoder;
|
import java.util.Map;
|
import java.util.TreeMap;
|
|
@Slf4j
|
public class SybPayService {
|
|
|
/**
|
* 封装订单信息
|
* @param trxamt 订单金额单位为分
|
* @param reqsn 商户订单号
|
* @param unireqsn 商户唯一订单号
|
* @param body 订单标题,订单描述信息,展示在收银台
|
* @param remark 备注
|
* @param notifyUrl 服务器异步通知页面路径,交易完成后,平台会将交易结果以后台通知的方式发送到该地址,商户需要以此通知判断用户订单交易是否成功。
|
* @return
|
* @throws Exception
|
*/
|
public TreeMap<String,String> createOrder(long trxamt,
|
String reqsn,
|
String unireqsn,
|
String body,
|
String remark,
|
String notifyUrl) throws Exception{
|
TreeMap<String,String> params = new TreeMap<String,String>();
|
if(!SybUtil.isEmpty(SybConstants.SYB_ORGID))
|
params.put("orgid", SybConstants.SYB_ORGID);
|
params.put("cusid", SybConstants.SYB_CUSID);
|
params.put("appid", SybConstants.SYB_APPID);
|
params.put("version", "12");
|
params.put("trxamt", String.valueOf(trxamt));
|
params.put("reqsn", reqsn);
|
params.put("unireqsn", unireqsn);
|
params.put("notify_url", notifyUrl);
|
params.put("body", body);
|
params.put("remark", remark);
|
params.put("paytype", "W06");
|
params.put("randomstr", SybUtil.getValidatecode(8));
|
params.put("signtype", SybConstants.SIGN_TYPE);
|
String appkey = "";
|
if(SybConstants.SIGN_TYPE.equals("RSA"))
|
appkey = SybConstants.SYB_RSACUSPRIKEY;
|
else if(SybConstants.SIGN_TYPE.equals("SM2"))
|
appkey = SybConstants.SYB_SM2PPRIVATEKEY;
|
else
|
appkey = SybConstants.SYB_MD5_APPKEY;
|
params.put("sign", SybUtil.unionSign(params,appkey,SybConstants.SIGN_TYPE));
|
return params;
|
}
|
|
|
/**
|
* 撤销订单
|
* @param trxamt 原订单金额
|
* @param reqsn 商户的退款交易订单号
|
* @param oldtrxid 原交易的收银宝平台流水
|
* @param oldreqsn 原交易的商户交易单号
|
* @return
|
* @throws Exception
|
*/
|
public Map<String,String> cancel(long trxamt,String reqsn,String oldtrxid,String oldreqsn) throws Exception{
|
HttpConnectionUtil http = new HttpConnectionUtil(SybConstants.SYB_APIURL+"/tranx/cancel");
|
http.init();
|
TreeMap<String,String> params = new TreeMap<String,String>();
|
if(!SybUtil.isEmpty(SybConstants.SYB_ORGID))
|
params.put("orgid", SybConstants.SYB_ORGID);
|
params.put("cusid", SybConstants.SYB_CUSID);
|
params.put("appid", SybConstants.SYB_APPID);
|
params.put("version", "11");
|
params.put("trxamt", String.valueOf(trxamt));
|
params.put("reqsn", reqsn);
|
if (StringUtils.isNotBlank(oldtrxid)) {
|
params.put("oldtrxid", oldtrxid);
|
}
|
if(StringUtils.isNotBlank(oldreqsn)){
|
params.put("oldreqsn", oldreqsn);
|
}
|
params.put("randomstr", SybUtil.getValidatecode(8));
|
params.put("signtype", SybConstants.SIGN_TYPE);
|
String appkey = "";
|
if(SybConstants.SIGN_TYPE.equals("RSA"))
|
appkey = SybConstants.SYB_RSACUSPRIKEY;
|
else if(SybConstants.SIGN_TYPE.equals("SM2"))
|
appkey = SybConstants.SYB_SM2PPRIVATEKEY;
|
else
|
appkey = SybConstants.SYB_MD5_APPKEY;
|
params.put("sign", SybUtil.unionSign(params,appkey,SybConstants.SIGN_TYPE));
|
byte[] bys = http.postParams(params, true);
|
String result = new String(bys,"UTF-8");
|
Map<String,String> map = handleResult(result);
|
return map;
|
}
|
|
/**
|
* 退款
|
* @param trxamt 退款金额单位为分
|
* @param reqsn 商户的退款交易订单号
|
* @param oldtrxid 原交易的收银宝平台流水
|
* @param oldreqsn 原交易的商户订单号
|
* @return
|
* @throws Exception
|
*/
|
public Map<String,String> refund(long trxamt,String reqsn,String oldtrxid,String oldreqsn) throws Exception{
|
HttpConnectionUtil http = new HttpConnectionUtil(SybConstants.SYB_APIURL+"/tranx/refund");
|
http.init();
|
TreeMap<String,String> params = new TreeMap<String,String>();
|
if(!SybUtil.isEmpty(SybConstants.SYB_ORGID))
|
params.put("orgid", SybConstants.SYB_ORGID);
|
params.put("cusid", SybConstants.SYB_CUSID);
|
params.put("appid", SybConstants.SYB_APPID);
|
params.put("version", "11");
|
params.put("trxamt", String.valueOf(trxamt));
|
params.put("reqsn", reqsn);
|
if(StringUtils.isNotBlank(oldreqsn)){
|
params.put("oldreqsn", oldreqsn);
|
}
|
if (StringUtils.isNotBlank(oldtrxid)) {
|
params.put("oldtrxid", oldtrxid);
|
}
|
params.put("randomstr", SybUtil.getValidatecode(8));
|
params.put("signtype", SybConstants.SIGN_TYPE);
|
String appkey = "";
|
if(SybConstants.SIGN_TYPE.equals("RSA"))
|
appkey = SybConstants.SYB_RSACUSPRIKEY;
|
else if(SybConstants.SIGN_TYPE.equals("SM2"))
|
appkey = SybConstants.SYB_SM2PPRIVATEKEY;
|
else
|
appkey = SybConstants.SYB_MD5_APPKEY;
|
params.put("sign", SybUtil.unionSign(params,appkey,SybConstants.SIGN_TYPE));
|
byte[] bys = http.postParams(params, true);
|
String result = new String(bys,"UTF-8");
|
Map<String,String> map = handleResult(result);
|
return map;
|
}
|
|
/**
|
* 关闭订单
|
* @param oldtrxid 原通联平台交易流水
|
* @param oldreqsn 原商户订单号
|
* @return
|
* @throws Exception
|
*/
|
public Map<String,String> close(String oldtrxid,String oldreqsn) throws Exception{
|
HttpConnectionUtil http = new HttpConnectionUtil(SybConstants.SYB_APIURL+"/tranx/close");
|
http.init();
|
TreeMap<String,String> params = new TreeMap<String,String>();
|
if(!SybUtil.isEmpty(SybConstants.SYB_ORGID))
|
params.put("orgid", SybConstants.SYB_ORGID);
|
params.put("cusid", SybConstants.SYB_CUSID);
|
params.put("appid", SybConstants.SYB_APPID);
|
params.put("version", "12");
|
if(StringUtils.isNotBlank(oldreqsn)){
|
params.put("oldreqsn", oldreqsn);
|
}
|
if (StringUtils.isNotBlank(oldtrxid)) {
|
params.put("oldtrxid", oldtrxid);
|
}
|
params.put("randomstr", SybUtil.getValidatecode(8));
|
params.put("signtype", SybConstants.SIGN_TYPE);
|
String appkey = "";
|
if(SybConstants.SIGN_TYPE.equals("RSA"))
|
appkey = SybConstants.SYB_RSACUSPRIKEY;
|
else if(SybConstants.SIGN_TYPE.equals("SM2"))
|
appkey = SybConstants.SYB_SM2PPRIVATEKEY;
|
else
|
appkey = SybConstants.SYB_MD5_APPKEY;
|
params.put("sign", SybUtil.unionSign(params,appkey,SybConstants.SIGN_TYPE));
|
byte[] bys = http.postParams(params, true);
|
String result = new String(bys,"UTF-8");
|
Map<String,String> map = handleResult(result);
|
return map;
|
}
|
|
public Map<String,String> query(String reqsn,String trxid) throws Exception{
|
HttpConnectionUtil http = new HttpConnectionUtil(SybConstants.SYB_APIURL+"/tranx/query");
|
http.init();
|
TreeMap<String,String> params = new TreeMap<String,String>();
|
if(!SybUtil.isEmpty(SybConstants.SYB_ORGID))
|
params.put("orgid", SybConstants.SYB_ORGID);
|
params.put("cusid", SybConstants.SYB_CUSID);
|
params.put("appid", SybConstants.SYB_APPID);
|
params.put("version", "11");
|
params.put("reqsn", reqsn);
|
if(StringUtils.isNotBlank(trxid)){
|
params.put("trxid", trxid);
|
}
|
params.put("randomstr", SybUtil.getValidatecode(8));
|
params.put("signtype", SybConstants.SIGN_TYPE);
|
String appkey = "";
|
if(SybConstants.SIGN_TYPE.equals("RSA"))
|
appkey = SybConstants.SYB_RSACUSPRIKEY;
|
else if(SybConstants.SIGN_TYPE.equals("SM2"))
|
appkey = SybConstants.SYB_SM2PPRIVATEKEY;
|
else
|
appkey = SybConstants.SYB_MD5_APPKEY;
|
params.put("sign", SybUtil.unionSign(params,appkey,SybConstants.SIGN_TYPE));
|
byte[] bys = http.postParams(params, true);
|
String result = new String(bys,"UTF-8");
|
Map<String,String> map = handleResult(result);
|
return map;
|
}
|
|
|
public static Map<String,String> handleResult(String result) throws Exception{
|
log.info("通联支付返回结果:"+result);
|
Map map = SybUtil.json2Obj(result, Map.class);
|
if(map == null){
|
throw new Exception("返回数据错误");
|
}
|
if("SUCCESS".equals(map.get("retcode"))){
|
TreeMap tmap = new TreeMap();
|
tmap.putAll(map);
|
String appkey = "";
|
if(SybConstants.SIGN_TYPE.equals("RSA"))
|
appkey = SybConstants.SYB_RSATLPUBKEY;
|
else if(SybConstants.SIGN_TYPE.equals("SM2"))
|
appkey = SybConstants.SYB_SM2TLPUBKEY;
|
else
|
appkey = SybConstants.SYB_MD5_APPKEY;
|
if(SybUtil.validSign(tmap, appkey, SybConstants.SIGN_TYPE)){
|
System.out.println("签名成功");
|
return map;
|
}else{
|
throw new Exception("验证签名失败");
|
}
|
|
}else{
|
throw new Exception(map.get("retmsg").toString());
|
}
|
}
|
|
|
}
|