package com.nova.sankuai.infra.utils.rongbei;
|
|
import cn.hutool.core.map.MapUtil;
|
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.crypto.symmetric.AES;
|
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONObject;
|
import com.alibaba.fastjson.JSON;
|
import com.nova.sankuai.domain.api.rongbei.RbResponse;
|
import com.nova.sankuai.domain.api.syh.SyhResponse;
|
import com.nova.sankuai.domain.dto.rongbei.CheckDto;
|
import com.nova.sankuai.security.HttpClientUtil;
|
import lombok.RequiredArgsConstructor;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.stereotype.Component;
|
import java.util.TreeMap;
|
|
/**
|
* 融呗对接接口
|
*/
|
@Component
|
@RequiredArgsConstructor
|
public class RongBeiUtil {
|
|
private static final Logger log = LoggerFactory.getLogger("capitalLogger");
|
|
// 融呗的公钥
|
String publicKey =
|
"MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvCfuR1Uza+ZvXL8wiAqSw+oIY/91VN5aQGvXBj2rp+jKkxkdkfmmPkIPlgC1/q1Bv8yAJEuv5IkiQmdCKPzTgqdl2Xmv5ywtL+Uob8oiHU0kzhhNsRjX9qJP78qWOKGDgGsZJgfavOaol3xfu5+00SU1BEnF0dgNJ7by/PzVvRic27+6sy6JF4ztyegFLfbimRLeVp2e9+1sVyxZscMcXcATisqVHZvOpMasdCUM81wVGWNqZiij9hbf/tH5G8/E9QsPrHGAwyfgmaM5CTS5shiYrllNmqTbPk9cx+t1qQc+xTNtnWugB1HLE3RZvr4T08kJoBpZb/uHVlxS8uGwOma36xSihVnWcaGDAk1imT95zZeyBYeOKKdwABPdCgN6H0jED/o1Etw8IlNI+3jOp0M7O6WkmUp+zHajaCPnOPMEXsLVqFZR5ppO//F0zfPZZBJx7QPRhHbG8DCK62q8gCGGxIZVLEEvWh39HB5HIfcW3A7U7G4SnZ8uKfDWGXhYflICtLr0ROsDAyFzGjgGDrtDgnMlc2Ht7/5A8xgifrdO6IjTwPu2GDBg80wQXW/kI1v6O/zxJJelMtddS7nk5fFVlmPhHOPtxlboXqCBXhEwjmSrBWW5LsVyNSu36MMRk6n0xTlLIyB22E/qm3eqVXIlwJfZF7MR0GGV4lG/gmECAwEAAQ==";
|
|
// 融呗的私钥
|
String privateKey =
|
"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";
|
|
String encryptKey = "OZqKairb9biGp9xWg4q8re1g";
|
|
/**
|
* 准入接口
|
* @return
|
*/
|
public RbResponse check(CheckDto body) {
|
String logNumber = IdUtil.randomUUID();
|
String result = null;
|
try {
|
// 从数据库中读取出
|
|
result = HttpClientUtil.getInstance().postJsonData("", getPostData(body.toString()));
|
} catch (Exception e) {
|
RbResponse resp = getRbResponse("500", e.getMessage(), body.toString());
|
log.error("日志编号:{} 检测用户是否满足产品方借款申请的条件,传入参数:{} 错误原因:{}", logNumber, body, e);
|
return resp;
|
}
|
try {
|
SyhResponse res = JSON.parseObject(result, SyhResponse.class);
|
RbResponse resp = getRbResponse("200", "成功", "");
|
return resp;
|
|
} catch (Exception ex) {
|
log.error("日志编号:" + logNumber + " 手机号为:{},【随易花】推送原始返回参数转换失败,jsonData:{} ex:{}", "customer.getPhone()", "jsonData" , ex);
|
RbResponse resp = getRbResponse("500", ex.getMessage(), body.toString());
|
return resp;
|
}
|
}
|
|
/**
|
* 准入接口
|
* @return
|
*/
|
public RbResponse apply(CheckDto body) {
|
String logNumber = IdUtil.randomUUID();
|
String result = null;
|
try {
|
// 从数据库中读取出
|
|
result = HttpClientUtil.getInstance().postJsonData("", getPostData(body.toString()));
|
} catch (Exception e) {
|
RbResponse resp = getRbResponse("500", e.getMessage(), body.toString());
|
log.error("日志编号:{} 检测用户是否满足产品方借款申请的条件,传入参数:{} 错误原因:{}", logNumber, body, e);
|
return resp;
|
}
|
try {
|
SyhResponse res = JSON.parseObject(result, SyhResponse.class);
|
RbResponse resp = getRbResponse("200", "成功", "");
|
return resp;
|
|
} catch (Exception ex) {
|
log.error("日志编号:" + logNumber + " 手机号为:{},【随易花】推送原始返回参数转换失败,jsonData:{} ex:{}", "customer.getPhone()", "jsonData" , ex);
|
RbResponse resp = getRbResponse("500", ex.getMessage(), body.toString());
|
return resp;
|
}
|
}
|
|
/**
|
* 准入接口
|
* @return
|
*/
|
public RbResponse orderStatus(CheckDto body) {
|
String logNumber = IdUtil.randomUUID();
|
String result = null;
|
try {
|
// 从数据库中读取出
|
|
result = HttpClientUtil.getInstance().postJsonData("", getPostData(body.toString()));
|
} catch (Exception e) {
|
RbResponse resp = getRbResponse("500", e.getMessage(), body.toString());
|
log.error("日志编号:{} 检测用户是否满足产品方借款申请的条件,传入参数:{} 错误原因:{}", logNumber, body, e);
|
return resp;
|
}
|
try {
|
SyhResponse res = JSON.parseObject(result, SyhResponse.class);
|
RbResponse resp = getRbResponse("200", "成功", "");
|
return resp;
|
|
} catch (Exception ex) {
|
log.error("日志编号:" + logNumber + " 手机号为:{},【随易花】推送原始返回参数转换失败,jsonData:{} ex:{}", "customer.getPhone()", "jsonData" , ex);
|
RbResponse resp = getRbResponse("500", ex.getMessage(), body.toString());
|
return resp;
|
}
|
}
|
|
/**
|
* 准入接口
|
* @return
|
*/
|
public RbResponse conclusion(CheckDto body) {
|
String logNumber = IdUtil.randomUUID();
|
String result = null;
|
try {
|
// 从数据库中读取出
|
|
result = HttpClientUtil.getInstance().postJsonData("", getPostData(body.toString()));
|
} catch (Exception e) {
|
RbResponse resp = getRbResponse("500", e.getMessage(), body.toString());
|
log.error("日志编号:{} 检测用户是否满足产品方借款申请的条件,传入参数:{} 错误原因:{}", logNumber, body, e);
|
return resp;
|
}
|
try {
|
SyhResponse res = JSON.parseObject(result, SyhResponse.class);
|
RbResponse resp = getRbResponse("200", "成功", "");
|
return resp;
|
|
} catch (Exception ex) {
|
log.error("日志编号:" + logNumber + " 手机号为:{},【随易花】推送原始返回参数转换失败,jsonData:{} ex:{}", "customer.getPhone()", "jsonData" , ex);
|
RbResponse resp = getRbResponse("500", ex.getMessage(), body.toString());
|
return resp;
|
}
|
}
|
|
/**
|
* 准入接口
|
* @return
|
*/
|
public RbResponse repayInfo(CheckDto body) {
|
String logNumber = IdUtil.randomUUID();
|
String result = null;
|
try {
|
// 从数据库中读取出
|
|
result = HttpClientUtil.getInstance().postJsonData("", getPostData(body.toString()));
|
} catch (Exception e) {
|
RbResponse resp = getRbResponse("500", e.getMessage(), body.toString());
|
log.error("日志编号:{} 检测用户是否满足产品方借款申请的条件,传入参数:{} 错误原因:{}", logNumber, body, e);
|
return resp;
|
}
|
try {
|
SyhResponse res = JSON.parseObject(result, SyhResponse.class);
|
RbResponse resp = getRbResponse("200", "成功", "");
|
return resp;
|
|
} catch (Exception ex) {
|
log.error("日志编号:" + logNumber + " 手机号为:{},【随易花】推送原始返回参数转换失败,jsonData:{} ex:{}", "customer.getPhone()", "jsonData" , ex);
|
RbResponse resp = getRbResponse("500", ex.getMessage(), body.toString());
|
return resp;
|
}
|
}
|
|
/**
|
* 准入接口
|
* @return
|
*/
|
public RbResponse h5Url(CheckDto body) {
|
String logNumber = IdUtil.randomUUID();
|
String result = null;
|
try {
|
// 从数据库中读取出
|
|
result = HttpClientUtil.getInstance().postJsonData("", getPostData(body.toString()));
|
} catch (Exception e) {
|
RbResponse resp = getRbResponse("500", e.getMessage(), body.toString());
|
log.error("日志编号:{} 检测用户是否满足产品方借款申请的条件,传入参数:{} 错误原因:{}", logNumber, body, e);
|
return resp;
|
}
|
try {
|
SyhResponse res = JSON.parseObject(result, SyhResponse.class);
|
RbResponse resp = getRbResponse("200", "成功", "");
|
return resp;
|
|
} catch (Exception ex) {
|
log.error("日志编号:" + logNumber + " 手机号为:{},【随易花】推送原始返回参数转换失败,jsonData:{} ex:{}", "customer.getPhone()", "jsonData" , ex);
|
RbResponse resp = getRbResponse("500", ex.getMessage(), body.toString());
|
return resp;
|
}
|
}
|
|
private String getPostData(String oriData){
|
RsaSupport rsaSupport = new RsaSupport("RSA", "SHA256WithRSA", "RSA/ECB/PKCS1Padding", "utf-8", publicKey, privateKey);
|
AES aes = new AES("ECB", "PKCS5Padding", encryptKey.getBytes());
|
JSONObject fullData = new JSONObject();
|
fullData.put("partner_id", "test");
|
fullData.put("timestamp", System.currentTimeMillis());
|
//加密oriData
|
fullData.put("biz_data", aes.encryptBase64(oriData));
|
//fullData排序
|
TreeMap treeMap = JSONUtil.toBean(fullData, TreeMap.class);
|
String oriSignData = MapUtil.sortJoin(treeMap, "&",
|
"=", true);
|
fullData.put("sign", rsaSupport.signByPrivateKey(oriData));
|
return fullData.toString();
|
}
|
|
|
private RbResponse getRbResponse(String code, String msg, String data) {
|
RbResponse resp = new RbResponse();
|
resp.setCode(code);
|
resp.setMsg(msg);
|
resp.setData(data);
|
return resp;
|
}
|
}
|