V13
This commit is contained in:
@@ -12,21 +12,21 @@ import java.util.stream.Collectors;
|
|||||||
|
|
||||||
public class PaySignUtil {
|
public class PaySignUtil {
|
||||||
|
|
||||||
public static String createMD5ToUpperCase(Map<String, String> params,String subKey) {
|
public static String createMD5ToUpperCase(Map<String, String> params,String signKey) {
|
||||||
return createMD5(params,subKey).toUpperCase();
|
return createMD5(params,signKey).toUpperCase();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String createMD5ToLowerCase(Map<String, String> params,String subKey) {
|
public static String createMD5ToLowerCase(Map<String, String> params,String signKey) {
|
||||||
return createMD5(params,subKey).toLowerCase();
|
return createMD5(params,signKey).toLowerCase();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String createMD5(Map<String, String> params,String subKey) {
|
public static String createMD5(Map<String, String> params,String signKey) {
|
||||||
List<String> url = new ArrayList<>();
|
List<String> url = new ArrayList<>();
|
||||||
for (Map.Entry<String, String> entry : params.entrySet()) {
|
for (Map.Entry<String, String> entry : params.entrySet()) {
|
||||||
url.add(entry.getKey() + "=" + entry.getValue());
|
url.add(entry.getKey() + "=" + entry.getValue());
|
||||||
}
|
}
|
||||||
url = url.stream().sorted().collect(Collectors.toList());
|
url = url.stream().sorted().collect(Collectors.toList());
|
||||||
String stringSignTemp = StringUtils.join(url, "&") + subKey;
|
String stringSignTemp = StringUtils.join(url, "&") + signKey;
|
||||||
return DigestUtil.md5Hex(stringSignTemp);
|
return DigestUtil.md5Hex(stringSignTemp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import com.ruoyi.cai.pay.PayOrderInfoDTO;
|
|||||||
import com.ruoyi.cai.pay.PayReturnResp;
|
import com.ruoyi.cai.pay.PayReturnResp;
|
||||||
import com.ruoyi.cai.service.OrderLogsService;
|
import com.ruoyi.cai.service.OrderLogsService;
|
||||||
import com.ruoyi.cai.service.PayTrdConfigService;
|
import com.ruoyi.cai.service.PayTrdConfigService;
|
||||||
import com.ruoyi.cai.trdpay.PayMd5Util;
|
|
||||||
import com.ruoyi.cai.trdpay.PaySignUtil;
|
import com.ruoyi.cai.trdpay.PaySignUtil;
|
||||||
import com.ruoyi.cai.trdpay.PayTrdService;
|
import com.ruoyi.cai.trdpay.PayTrdService;
|
||||||
import com.ruoyi.cai.trdpay.TrdPayTypeEnum;
|
import com.ruoyi.cai.trdpay.TrdPayTypeEnum;
|
||||||
@@ -40,10 +39,8 @@ public class PayTrdV13Service implements PayTrdService {
|
|||||||
public TrdPayTypeEnum getType() {
|
public TrdPayTypeEnum getType() {
|
||||||
return TrdPayTypeEnum.V13;
|
return TrdPayTypeEnum.V13;
|
||||||
}
|
}
|
||||||
|
@Override
|
||||||
public static final String PUBLIC_KEY = "";
|
public PayReturnResp createOrderAli(PayOrderInfoDTO payOrderInfoDTO, PayTrdConfig payTrdConfig, boolean wx) {
|
||||||
|
|
||||||
private String v1(PayOrderInfoDTO payOrderInfoDTO, PayTrdConfig payTrdConfig, boolean wx){
|
|
||||||
TrdPayTypeEnum type = getType();
|
TrdPayTypeEnum type = getType();
|
||||||
Map<String, String> params = new HashMap<>();
|
Map<String, String> params = new HashMap<>();
|
||||||
params.put("pid", payTrdConfig.getMchId());
|
params.put("pid", payTrdConfig.getMchId());
|
||||||
@@ -60,52 +57,21 @@ public class PayTrdV13Service implements PayTrdService {
|
|||||||
params.put("name", payOrderInfoDTO.getSubject());
|
params.put("name", payOrderInfoDTO.getSubject());
|
||||||
params.put("money", payOrderInfoDTO.getPriceYuanStr());
|
params.put("money", payOrderInfoDTO.getPriceYuanStr());
|
||||||
params.put("clientip", ServletUtils.getClientIP());
|
params.put("clientip", ServletUtils.getClientIP());
|
||||||
String sign = PaySignUtil.createMD5ToLowerCase(params, "");
|
String sign = PaySignUtil.createMD5ToLowerCase(params, payTrdConfig.getSign());
|
||||||
MultiValueMap<String, String> multiValueMap = MapUtils.mapToMultiValueMap(params);
|
MultiValueMap<String, String> multiValueMap = MapUtils.mapToMultiValueMap(params);
|
||||||
multiValueMap.add("sign", sign);
|
multiValueMap.add("sign", sign);
|
||||||
multiValueMap.add("sign_type", "MD5");
|
multiValueMap.add("sign_type", "MD5");
|
||||||
String gatewayUrl = getGatewayUrl(payTrdConfig);
|
String gatewayUrl = getGatewayUrl(payTrdConfig);
|
||||||
String createOrderUrl = gatewayUrl + type.getCreateOrderUrl();
|
String createOrderUrl = gatewayUrl + type.getCreateOrderUrl();
|
||||||
return RestTemplateUtil.postFormData(createOrderUrl, multiValueMap);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PayReturnResp createOrderAli(PayOrderInfoDTO payOrderInfoDTO, PayTrdConfig payTrdConfig, boolean wx) {
|
|
||||||
TrdPayTypeEnum type = getType();
|
|
||||||
Map<String, String> params = new HashMap<>();
|
|
||||||
params.put("param", payTrdConfig.getId()+"");
|
|
||||||
params.put("pid", payTrdConfig.getMchId());
|
|
||||||
params.put("method", "jump");
|
|
||||||
params.put("device", "mobile");
|
|
||||||
if(wx){
|
|
||||||
params.put("type", "wxpay");
|
|
||||||
}else{
|
|
||||||
params.put("type", "alipay");
|
|
||||||
}
|
|
||||||
params.put("out_trade_no", payOrderInfoDTO.getOrderNo());
|
|
||||||
String notifyUrl = type.getNotifyUrl(payTrdConfig.getNotifyUrl(), wx);
|
|
||||||
params.put("notify_url", notifyUrl);
|
|
||||||
// params.put("return_url", notifyUrl);
|
|
||||||
params.put("name", payOrderInfoDTO.getSubject());
|
|
||||||
params.put("money", payOrderInfoDTO.getPriceYuanStr());
|
|
||||||
params.put("clientip", ServletUtils.getClientIP());
|
|
||||||
params.put("timestamp", System.currentTimeMillis()/1000+"");
|
|
||||||
String rsa = PaySignUtil.createRSA256(params, payTrdConfig.getSign(), PUBLIC_KEY);
|
|
||||||
MultiValueMap<String, String> multiValueMap = MapUtils.mapToMultiValueMap(params);
|
|
||||||
MultiValueMap<String, String> map = PayMd5Util.createParamsOfMapMD5(params, payTrdConfig.getSign());
|
|
||||||
multiValueMap.add("sign", rsa);
|
|
||||||
multiValueMap.add("sign_type", "RSA");
|
|
||||||
String gatewayUrl = getGatewayUrl(payTrdConfig);
|
|
||||||
String createOrderUrl = gatewayUrl + type.getCreateOrderUrl();
|
|
||||||
String body = RestTemplateUtil.postFormData(createOrderUrl, multiValueMap);
|
String body = RestTemplateUtil.postFormData(createOrderUrl, multiValueMap);
|
||||||
JSONObject jsonObject = JSON.parseObject(body);
|
JSONObject jsonObject = JSON.parseObject(body);
|
||||||
boolean success = checkSuccess(jsonObject);
|
boolean success = checkSuccess(jsonObject);
|
||||||
orderLogsService.createAliPayLogs(payOrderInfoDTO.getOrderNo(), createOrderUrl+JSON.toJSONString(map), jsonObject, success, type, getStepName(wx));
|
orderLogsService.createAliPayLogs(payOrderInfoDTO.getOrderNo(), createOrderUrl+JSON.toJSONString(multiValueMap), jsonObject, success, type, getStepName(wx));
|
||||||
if(!success){
|
if(!success){
|
||||||
log.info("第三方支付失败 V13 统一支付失败失败 url={} params={} body={}, payTrdConfig={}", createOrderUrl,JSON.toJSONString(map), body, JSON.toJSONString(payTrdConfig));
|
log.info("第三方支付失败 V13 统一支付失败失败 url={} params={} body={}, payTrdConfig={}", createOrderUrl,JSON.toJSONString(multiValueMap), body, JSON.toJSONString(payTrdConfig));
|
||||||
throw new ServiceException("调用支付失败");
|
throw new ServiceException("调用支付失败");
|
||||||
}
|
}
|
||||||
String payUrl = jsonObject.getString("pay_info");
|
String payUrl = jsonObject.getString("payurl");
|
||||||
return PayReturnResp.createH5(payUrl);
|
return PayReturnResp.createH5(payUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -113,7 +79,7 @@ public class PayTrdV13Service implements PayTrdService {
|
|||||||
if(jsonObject == null){
|
if(jsonObject == null){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if(!"0".equals(jsonObject.getString("code"))){
|
if(!"1".equals(jsonObject.getString("code"))){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -121,26 +87,14 @@ public class PayTrdV13Service implements PayTrdService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public NotifyResp getNotifyResp(Map<String, String> sourceData) {
|
public NotifyResp getNotifyResp(Map<String, String> sourceData) {
|
||||||
String sign = sourceData.get("sign");
|
|
||||||
String mchOrderNo = sourceData.get("trade_no");
|
String mchOrderNo = sourceData.get("trade_no");
|
||||||
String payOrderId = sourceData.get("out_trade_no");
|
String payOrderId = sourceData.get("out_trade_no");
|
||||||
String status = sourceData.get("trade_status");
|
String status = sourceData.get("trade_status");
|
||||||
String params = sourceData.get("params");
|
|
||||||
NotifyResp resp = new NotifyResp();
|
NotifyResp resp = new NotifyResp();
|
||||||
resp.setOrderNo(mchOrderNo);
|
resp.setOrderNo(mchOrderNo);
|
||||||
resp.setTrdOrderNo(payOrderId);
|
resp.setTrdOrderNo(payOrderId);
|
||||||
resp.setPayTypeEnum(getType());
|
resp.setPayTypeEnum(getType());
|
||||||
resp.setSourceData(sourceData);
|
resp.setSourceData(sourceData);
|
||||||
PayTrdConfig payTrdConfig = payTrdConfigService.getById(params);
|
|
||||||
if(payTrdConfig == null){
|
|
||||||
resp.setSuccess(false);
|
|
||||||
return resp;
|
|
||||||
}
|
|
||||||
boolean checked = PaySignUtil.checkRSA256(sourceData, PUBLIC_KEY, payTrdConfig.getSign(), sign, "sign", "sign_type");
|
|
||||||
if(!checked){
|
|
||||||
resp.setSuccess(false);
|
|
||||||
return resp;
|
|
||||||
}
|
|
||||||
resp.setSuccess("TRADE_SUCCESS".equals(status));
|
resp.setSuccess("TRADE_SUCCESS".equals(status));
|
||||||
return resp;
|
return resp;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user