package com.nova.sankuai.infra.utils.zhongzan; import cn.hutool.core.util.IdUtil; import cn.hutool.json.JSONObject; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.nova.sankuai.domain.api.zhongzan.RbResponse; import com.nova.sankuai.domain.api.zhongzan.ZhongZanResponse; import com.nova.sankuai.domain.dto.zhongzan.*; import com.nova.sankuai.domain.entity.CapitalInfo; import com.nova.sankuai.domain.entity.Customer; import com.nova.sankuai.domain.entity.CustomerCapitalResult; import com.nova.sankuai.domain.entity.CustomerUser; import com.nova.sankuai.domain.enums.capitalInfo.CapitalApprovalResultEnum; import com.nova.sankuai.domain.enums.capitalInfo.CapitalResultStatusEnum; import com.nova.sankuai.infra.mapper.CustomerCapitalResultMapper; import com.nova.sankuai.infra.utils.RbUtil; import com.nova.sankuai.security.HttpClientUtil; import com.nova.sankuai.service.ICapitalResultCommonService; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.util.DigestUtils; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 众攒对接 */ @Component @RequiredArgsConstructor public class ZhongZanUtil { private static final Logger log = LoggerFactory.getLogger("capitalLogger"); @Value("${rongbei.zhongzan.channel}") private String channel; @Value("${rongbei.channelSource}") private String channelSource; @Value("${rongbei.publicKey}") private String publicKey; // 到时换成众攒的公钥 @Value("${rongbei.privateKey}") private String privateKey; @Value("${rongbei.zhongzan.basicUrl}") private String basicUrl; private void getZzResponse(RbResponse resp, String logNumber, String jsonData, String result, String trips) { ZhongZanResponse zz = JSON.parseObject(result, ZhongZanResponse.class); if ("0".equals(zz.getCode())) { resp.setCode(zz.getCode()); String decryptStr = RbUtil.decrypt(resp, zz.getSign(), zz.getKey(), String.valueOf(resp.getData()), publicKey, privateKey); resp.setData(JSON.parseObject(decryptStr, JSONObject.class)); } else { log.error("日志编号:{} 【众攒】{}失败:{},jsonData:{}", logNumber, trips, result, jsonData); } } /** * 1.获取协议 */ public RbResponse getContract(Integer type, String orderNo) { RbResponse resp = new RbResponse(); String logNumber = IdUtil.randomUUID(); log.info("日志编号:" + logNumber + "【众攒】获取协议接口开始"); JSONObject param = new JSONObject(); param.putOpt("type", type); param.putOpt("orderNo", orderNo); String jsonData = RbUtil.encrypt(channel, System.currentTimeMillis(), String.valueOf(param), publicKey, privateKey); log.info("日志编号:" + logNumber + " 【众攒】获取协议接口参数:{}, data加密 {}", param, jsonData); String result = null; try { result = HttpClientUtil.getInstance().postJsonData(basicUrl + "getContract", jsonData); } catch (Exception ex) { log.error("日志编号:" + logNumber + "【众攒】获取协议接口推送失败,传参:{} ex:{}", jsonData, ex, ""); } try { getZzResponse(resp, logNumber, jsonData, result, "获取协议接口"); } catch (Exception ex) { log.error("日志编号:" + logNumber + " 【众攒】获取协议接口推送原始返回参数转换失败,jsonData:{} ex:{}", jsonData, ex, ""); } return resp; } private final ICapitalResultCommonService capitalResultCommonService; /** * 2.用户准入 */ public RbResponse checkUser(CapitalInfo capitalInfo, Customer customer, CustomerUser customerUser) { String logNumber = IdUtil.randomUUID(); RbResponse resp = new RbResponse(); log.info("日志编号:" + logNumber + "【众攒】用户准入接口开始"); CustomerCapitalResult capitalResult = CustomerCapitalResult.initResult(capitalInfo, customerUser.getId(), customer.getId()); capitalResult.setStatus(CapitalResultStatusEnum.CHECK.getCode()); CustomerCapitalResult filterResult = capitalResultCommonService.filterCustomer(customer, capitalInfo, capitalResult, logNumber); if (filterResult != null) { log.info("日志编号:{}{}撞库时不满足资方信息筛选条件,撞库失败", logNumber, capitalInfo.getName()); } JSONObject param = new JSONObject(); param.putOpt("idCardMd5", DigestUtils.md5DigestAsHex(customer.getIdCard().getBytes())); param.putOpt("mobileMd5", DigestUtils.md5DigestAsHex(customer.getPhone().getBytes())); param.putOpt("nameMd5", DigestUtils.md5DigestAsHex(customer.getName().getBytes())); String jsonData = RbUtil.encrypt(channel, System.currentTimeMillis(), String.valueOf(param), publicKey, privateKey); log.info("日志编号:" + logNumber + " 手机号为:{},【众攒】用户准入接口参数:{}, data加密 {}", customer.getPhone(), param, jsonData); String result = null; try { result = HttpClientUtil.getInstance().postJsonData(basicUrl + "checkUser", jsonData); } catch (Exception ex) { capitalResult.setCheckResult(CustomerCapitalResult.CHECK_FAIL); log.error("日志编号:{} 手机号为:{},【众攒】用户准入接口推送失败,传参:{} ex:{}", logNumber, customer.getPhone(), jsonData, ex.getMessage()); } try { getZzResponse(resp, logNumber, jsonData, result, "用户准入接口"); if (resp.getData().getInt("status") == 1) {//准入成功 capitalResult.setCheckResult(CustomerCapitalResult.CHECK_SUCCESS); }else { capitalResult.setCheckResult(CustomerCapitalResult.CHECK_FAIL); } } catch (Exception ex) { capitalResult.setCheckResult(CustomerCapitalResult.CHECK_FAIL); log.error("日志编号:{} 手机号为:{},【众攒】用户准入接口推送原始返回参数转换失败,jsonData:{} ex:{}", logNumber, customer.getPhone(), jsonData, ex.getMessage()); } capitalResultMapper.insert(capitalResult); return resp; } //private final IChannelInfoService channelInfoService; /** * 3.进件接口,1成功,0失败 */ public boolean pushProfile(Customer customer) { boolean isSucc = false; RbResponse resp = new RbResponse(); String logNumber = IdUtil.randomUUID(); log.info("日志编号:" + logNumber + "【众攒】进件接口开始"); Random random = new Random(); int[] values; UserProfile userProfile = new UserProfile(); // userProfile.setOrderNo(ConstantsUtil.getCreditNo()); // 张明于2024-9-18号修改 userProfile.setOrderNo(customer.getCreditNo()); userProfile.setChannelSource(customer.getAppName()); userProfile.setMobile(customer.getPhone()); userProfile.setUserName(customer.getName()); userProfile.setIdCard(customer.getIdCard()); // 照片 photos Photo photo = new Photo(); photo.setIdCardFrontUrl(customer.getIdCardFrontPath()); photo.setIdCardBackUrl(customer.getIdCardBackPath()); photo.setFaceUrl(customer.getFacePhotoPath()); photo.setFaceScore(customer.getVerifySimilarity()); photo.setThresholds(""); photo.setFaceSource(customer.getVerifySimilarityName()); photo.setFaceTime(""); photo.setName(customer.getName()); photo.setIdCardNo(customer.getIdCard()); photo.setIdDueTime(customer.getIdValidDateBegin() + "-" + ("1".equals(customer.getIdLongTerm()) ? "长期" : customer.getIdValidDateEnd())); photo.setIdCardAddress(customer.getIdAddress()); photo.setSex(RbUtil.getGenderByIDCard(customer.getIdCard())); photo.setNation(customer.getNation()); photo.setIdCardAuthority(customer.getSignOrganization()); Map idAddress = RbUtil.addressResolution(customer.getIdAddress()); photo.setId_province(Objects.isNull(idAddress.get("province")) ? idAddress.get("province") : ""); photo.setId_city(Objects.isNull(idAddress.get("city")) ? idAddress.get("city") : ""); photo.setId_area(Objects.isNull(idAddress.get("area")) ? idAddress.get("area") : ""); photo.setId_address(customer.getIdAddress()); userProfile.setPhotos(photo); // 基础信息baseInfo BaseInfo baseInfo = new BaseInfo(); /** * 学历 * 5:博士及以上, 4:硕士, 3:本科, 2:专科, 1:高中/中专, 0:初中及以下 */ String eduction = customer.getEducation(); if ("02".equals(eduction)) { eduction = "2"; } else if ("03".equals(eduction)) { eduction = "3"; } else if ("04".equals(eduction)) { values = new int[]{4, 5}; eduction = String.valueOf(values[random.nextInt(values.length)]); } else { values = new int[]{0, 1}; eduction = String.valueOf(values[random.nextInt(values.length)]); } baseInfo.setEducation(Integer.parseInt(eduction)); /** * "0:未婚, * 1:已婚无子女, * 2:已婚有子女, * 3:离异, * 4:再婚, * 5:丧偶 */ String maritalStatus = customer.getMaritalStatus(); int marriage = 1; if ("04".equals(maritalStatus)) { marriage = 5; } else if ("03".equals(maritalStatus)) { marriage = 3; } else if ("01".equals(maritalStatus)) { marriage = 0; } else { values = new int[]{1, 2, 4}; marriage = values[random.nextInt(values.length)]; } baseInfo.setMarriage(marriage); // 1:上班族, 3:企业主, 4:个体工商, 5:事业单位, 2:自由职业者 Integer professionInfo = customer.getProfessionInfo(); int career = Objects.isNull(professionInfo) ? 1 : professionInfo.intValue(); if (career == 1) { //自由职业 career = 2; } else if (career == 2) { // 企业主 career = 3; } else if (career == 4) { //公务员 career = 5; } else if (career == 0) { // 上班族 career = 1; } baseInfo.setJob(career); baseInfo.setWorkUnitName(customer.getCompanyName()); baseInfo.setWorkUnitAddress(customer.getCompanyAddress()); baseInfo.setHomeAddress(customer.getAddress()); String companyTrade = getcompanyTradeString(customer); baseInfo.setIndustry(Integer.parseInt(companyTrade)); /** * ⽉收⼊ * 1 0-3000 * 2 3000-6000 * 3 6000~10000 * 4 10000~15000 * 5 15000~20000 * 6 20000以上 */ int monthlySalary = customer.getMonthlyIncome(); if (monthlySalary == 3) { // 10000-30000 values = new int[]{4, 5, 6}; // 指定的字符集合 monthlySalary = values[random.nextInt(values.length)]; } else if (monthlySalary == 4) { // 30000以上 monthlySalary = 6; } else { // 10000以下 values = new int[]{1, 2, 3}; // 指定的字符集合 monthlySalary = values[random.nextInt(values.length)]; } baseInfo.setMonthlyIncome(monthlySalary); baseInfo.setEmail(customer.getEmail()); /** * 借款⽤途 * 0:日常消费, 1:装修, 2:医疗, 3:教育, 4:旅游, 5:其他 */ String useOfLoan = customer.getUseOfLoan(); if ("DEC".equals(useOfLoan)) { //装修 useOfLoan = "1"; } else if ("EDU".equals(useOfLoan)) { // 教育 useOfLoan = "3"; } else if ("OTH".equals(useOfLoan)) { // 教育 useOfLoan = "5"; } else { values = new int[]{0, 2, 4}; // 指定的字符集合 // 随机选取一个字符 useOfLoan = String.valueOf(values[random.nextInt(values.length)]); } baseInfo.setLoanPurpose(useOfLoan); userProfile.setBaseInfo(baseInfo); // 联系人 relations Relation relation = new Relation(); List relations = new ArrayList<>(); relation.setName(customer.getRelationshipName()); /** * 1:父亲、 * 2:母亲、 * 3:配偶、 * 4:儿子、 * 5:女儿、 * 6:哥哥、 * 7:弟弟、 * 8:姐姐、 * 9:妹妹 * 01: 配偶, 02: 父母, 03: 子女, 04: 兄弟姐妹 */ String relationShip = customer.getRelationship(); if ("01".equals(relationShip)) { relationShip = "3"; } else if ("02".equals(relationShip)) { values = new int[]{2, 3}; // 指定的字符集合 // 随机选取一个字符 relationShip = String.valueOf(values[random.nextInt(values.length)]); } else if ("03".equals(relationShip)) { values = new int[]{4, 5}; // 指定的字符集合 // 随机选取一个字符 relationShip = String.valueOf(values[random.nextInt(values.length)]); } else { values = new int[]{6, 7, 8, 9}; // 指定的字符集合 // 随机选取一个字符 relationShip = String.valueOf(values[random.nextInt(values.length)]); } relation.setRelation(Integer.parseInt(relationShip)); relation.setPhone(customer.getRelationshipPhone()); relations.add(relation); relation = new Relation(); /** * 紧急联系人 * 10:同事, * 11:朋友, * 12:同学, * 13:其他 */ values = new int[]{10, 11, 12, 13}; // 指定的字符集合 // 随机选取一个字符 relation.setRelation(values[random.nextInt(values.length)]); relation.setName(customer.getRelationship1Name()); relation.setPhone(customer.getRelationship1Phone()); relations.add(relation); userProfile.setRelations(relations); // GPS Gps gps = new Gps(); gps.setLatitude(customer.getLat()); gps.setLongitude(customer.getLng()); userProfile.setGps(gps); // 设备信息 deviceInfo DeviceInfo deviceInfo = new DeviceInfo(); deviceInfo.setDeviceId(customer.getDeviceId()); deviceInfo.setIdfa(customer.getIdfa()); deviceInfo.setIdfv(customer.getIdfv()); deviceInfo.setOsType(customer.getOs()); deviceInfo.setAndroidId(customer.getAndroidId()); deviceInfo.setImei(customer.getImei()); deviceInfo.setIp(customer.getIpAddres()); userProfile.setDeviceInfo(deviceInfo); JSONObject param = new JSONObject(); BeanUtils.copyProperties(userProfile, param); String jsonData = RbUtil.encrypt(channel, System.currentTimeMillis(), String.valueOf(param), publicKey, privateKey); log.info("日志编号:" + logNumber + " 【众攒】进件接口参数:{}, data加密 {}", userProfile, jsonData); String result = null; try { result = HttpClientUtil.getInstance().postJsonData(basicUrl + "pushProfile", jsonData); } catch (Exception ex) { log.error("日志编号:" + logNumber + "【众攒】进件接口推送失败,传参:{} ex:{}", jsonData, ex, ""); } try { getZzResponse(resp, logNumber, jsonData, result, "进件接口"); isSucc = true; /*JSONObject data = resp.getData(); data.putOpt("orderNo", userProfile.getOrderNo()); resp.setData(data);*/ } catch (Exception ex) { log.error("日志编号:" + logNumber + " 【众攒】进件接口推送原始返回参数转换失败,jsonData:{} ex:{}", jsonData, ex, ""); } return isSucc; } private static String getcompanyTradeString(Customer customer) { String companyTrade = customer.getCompanyTrade(); /** * (0:批发/零售, 1:制造业, 2:金融/保险/证券, 3:住宿/餐饮/旅游, 4:商业服务/娱乐/艺术/体育, 5:计算机/互联网, 6:通讯电子, 7:建筑/房地产, 8:法律/咨询, 9:卫生/教育/社会服务, 10:公共事业/社会团体, 11:生物/制药, 12:广告/媒体, 13:能源, 14:贸易, 15:交通运输/仓储/物流, 16:农业/化工/金属冶炼, 17:其他行业)所属行业 --> 融呗( (A:农、林、牧、渔业,B:采矿业,C:制造业,D:电力、热力、燃气及水生产和供应业,E:建筑业,F:批发和零售业,G:交通运输、仓储和邮储业,H:住宿和餐饮业,I:信息传输、软件和信息技术服务,J:金融业,K:房地产业,L:租赁和商务服务业,M:科学研究和技术服务业,N:水利、环境和公共设施管理业,O:居民服务、修理和其他服务业,P:教育,Q:卫生和社会工作,R:文化、体育和娱乐业,S:公共管理、社会保障和社会组织,T:国际组织,9:未知)) * 1. 建筑业 -->(E) * 2. 电力,热力,燃气及水生产和供应业 -->(D) * 3. 交通运输、仓储和邮政业 -->(G) * 4. 教育 -->(P) * 5. 房地产业 -->(K) * 6. 住宿和餐饮业 -->(H) * 7. 批发和零售业 -->(F) * 8. 租赁和商务服务业 -->(L) * 9. 信息传输、软件和信息技术服务业 -->(I) * 10. 金融业 -->(J) * 11. 文化、体育和娱乐业 -->(R) * 12. 制造业 -->(1) * 13. 水利、环境和公共设施管理业 -->(N) * 14. 采矿业 -->(B) * 15. 农、林、牧、渔业 -->(A) * 16. 居民服务、修理和其他服务业 -->(O) * 17. 卫生和社会工作 -->(Q) * 18. 科学研究和技术服务业 -->(M) * 19. 公共管理、社会保障和社会组织 -->(S) */ if ("E".equals(companyTrade) || "K".equals(companyTrade)) { //建筑业 companyTrade = "7"; } else if ("G".equals(companyTrade)) { //交通运输、仓储和邮政业 companyTrade = "15"; } else if ("H".equals(companyTrade)) { //住宿和餐饮业 companyTrade = "3"; } else if ("F".equals(companyTrade)) { //批发和零售业 companyTrade = "0"; } else if ("I".equals(companyTrade)) { //信息传输、软件和信息技术服务业 companyTrade = "5"; } else if ("J".equals(companyTrade)) { //金融业 companyTrade = "2"; } else if ("R".equals(companyTrade)) { //文化、体育和娱乐业 companyTrade = "4"; } else if ("C".equals(companyTrade)) { //制造业 companyTrade = "1"; } else if ("A".equals(companyTrade) || "B".equals(companyTrade) || "D".equals(companyTrade) || "L".equals(companyTrade) || "M".equals(companyTrade) || "W".equals(companyTrade) || "O".equals(companyTrade) || "T".equals(companyTrade) || "9".equals(companyTrade)) { companyTrade = "17"; } else if ("Q".equals(companyTrade) || "P".equals(companyTrade)) { //卫生和社会工作 companyTrade = "9"; } else if ("S".equals(companyTrade)) { //公共管理、社会保障和社会组织 companyTrade = "10"; } return companyTrade; } /** * 4.查询申请结果 */ public RbResponse queryApplyResult(String orderNo) { RbResponse resp = new RbResponse(); JSONObject param = new JSONObject(); param.putOpt("orderNo", orderNo); String logNumber = IdUtil.randomUUID(); log.info("日志编号:" + logNumber + "【众攒】查询申请结果接口开始"); String jsonData = RbUtil.encrypt(channel, System.currentTimeMillis(), String.valueOf(param), publicKey, privateKey); log.info("日志编号:" + logNumber + " 【众攒】查询申请结果接口参数:{}, data加密 {}", param, jsonData); String result = null; try { result = HttpClientUtil.getInstance().postJsonData(basicUrl + "queryApplyResult", jsonData); } catch (Exception ex) { log.error("日志编号:" + logNumber + "【众攒】查询申请结果接口推送失败,传参:{} ex:{}", jsonData, ex, ""); } try { getZzResponse(resp, logNumber, jsonData, result, "查询申请结果接口"); } catch (Exception ex) { log.error("日志编号:" + logNumber + " 【众攒】查询申请结果接口推送原始返回参数转换失败,jsonData:{} ex:{}", jsonData, ex, ""); } return resp; } private final CustomerCapitalResultMapper capitalResultMapper; /** * 5.审核结果推送 */ public RbResponse pushApproval(RequestDTO dto) { RbResponse resp = new RbResponse(); String logNumber = IdUtil.randomUUID(); log.info("日志编号:{}【众攒】审核结果推送开始", logNumber); // 验签并解密 String decryptRequest = RbUtil.decryptRequest(dto, dto.getSign(), dto.getKey(), dto.getParams(), publicKey, privateKey); if (StringUtils.isNotEmpty(decryptRequest)) { JSONObject params = JSON.parseObject(decryptRequest, JSONObject.class); CustomerCapitalResult capitalResult = capitalResultMapper.selectOne(Wrappers.lambdaQuery() .eq(CustomerCapitalResult::getCreditNo, params.getStr("orderNo"))); if (capitalResult != null) { updateResultByAudit(capitalResult, params); } } resp.setCode("1"); resp.setMsg("success"); return resp; } private void updateResultByAudit(CustomerCapitalResult capitalResult, JSONObject params) { if (CapitalApprovalResultEnum.APPROVAL_WAIT.getCode().equals(capitalResult.getApprovalResult())) { LambdaUpdateWrapper wrapper = Wrappers.lambdaUpdate() .set(CustomerCapitalResult::getLastUpdatedDate, new Date()) .set(CustomerCapitalResult::getCreditApplyTime, params.getStr("auditTime")) .set(CustomerCapitalResult::getThirdOrderStatus, params.getInt("conclusion")) .eq(CustomerCapitalResult::getId, capitalResult.getId()); if (params.getInt("conclusion") == 10) { capitalResult.setApprovalResult(CapitalApprovalResultEnum.APPROVAL_SUCCESS.getCode()); if (params.getInt("auditAmt") != null) { Double amount = Double.valueOf(params.getInt("auditAmt")) / 100; wrapper.set(CustomerCapitalResult::getTotalCredit, amount); } wrapper.set(CustomerCapitalResult::getAvailableAmount, params.getStr("availableAmount")); wrapper.set(CustomerCapitalResult::getMaxAmount, params.getStr("maxAmt")); wrapper.set(CustomerCapitalResult::getMinAmount, params.getStr("minAmt")); wrapper.set(CustomerCapitalResult::getSubExpDate, params.getStr("validEndDate")); wrapper.set(CustomerCapitalResult::getQuotaRate, params.getStr("yearRate")); } else if (params.getInt("conclusion") == 40) { capitalResult.setApprovalResult(CapitalApprovalResultEnum.APPROVAL_REFUSE.getCode()); wrapper.set(CustomerCapitalResult::getFailedReason, params.getStr("failedReason")); } wrapper.set(CustomerCapitalResult::getApprovalResult, capitalResult.getApprovalResult()); capitalResultMapper.update(null, wrapper); } } /** * 6.银行卡信息查询 */ public RbResponse getBankCardList(String orderNo) { RbResponse resp = new RbResponse(); JSONObject param = new JSONObject(); param.putOpt("orderNo", orderNo); String logNumber = IdUtil.randomUUID(); log.info("日志编号:{}【众攒】银行卡信息查询接口开始", logNumber); String jsonData = RbUtil.encrypt(channel, System.currentTimeMillis(), String.valueOf(param), publicKey, privateKey); log.info("日志编号:{} 【众攒】银行卡信息查询接口参数:{}, data加密 {}", logNumber, param, jsonData); String result = null; try { result = HttpClientUtil.getInstance().postJsonData(basicUrl + "getBankCardList", jsonData); } catch (Exception ex) { log.error("日志编号:{}【众攒】银行卡信息查询接口推送失败,传参:{} ex:{}", logNumber, jsonData, ex.getMessage()); } try { getZzResponse(resp, logNumber, jsonData, result, "银行卡信息查询接口"); } catch (Exception ex) { log.error("日志编号:{} 【众攒】银行卡信息查询接口推送原始返回参数转换失败,jsonData:{} ex:{}", logNumber, jsonData, ex.getMessage()); } return resp; } /** * 7.绑卡发验证码 */ public RbResponse sendBindCardSms(BindCardSmsDTO dto) { RbResponse resp = new RbResponse(); JSONObject param = new JSONObject(); param.putOpt("orderNo", dto.getOrderNo()); param.putOpt("bankCard", dto.getBankCard()); param.putOpt("bankCode", dto.getBankCode()); param.putOpt("userName", dto.getUserName()); param.putOpt("idCardNumber", dto.getIdCardNumber()); param.putOpt("userMobile", dto.getUserMobile()); String logNumber = IdUtil.randomUUID(); log.info("日志编号:{}【众攒】绑卡发验证码接口开始", logNumber); String jsonData = RbUtil.encrypt(channel, System.currentTimeMillis(), String.valueOf(param), publicKey, privateKey); log.info("日志编号:{} 【众攒】绑卡发验证码接口参数:{}, data加密 {}", logNumber, param, jsonData); String result = null; try { result = HttpClientUtil.getInstance().postJsonData(basicUrl + "sendBindCardSms", jsonData); } catch (Exception ex) { log.error("日志编号:{}【众攒】绑卡发验证码接口推送失败,传参:{} ex:{}", logNumber, jsonData, ex.getMessage()); } try { getZzResponse(resp, logNumber, jsonData, result, "绑卡发验证码接口"); } catch (Exception ex) { log.error("日志编号:{} 【众攒】绑卡发验证码接口推送原始返回参数转换失败,jsonData:{} ex:{}", logNumber, jsonData, ex.getMessage()); } return resp; } /** * 8.绑卡验证接口 */ public RbResponse verifyBindCardSms(String orderNo, String verifyCode, String bindBankNo) { RbResponse resp = new RbResponse(); JSONObject param = new JSONObject(); param.putOpt("orderNo", orderNo); param.putOpt("verifyCode", verifyCode); param.putOpt("bindBankNo", bindBankNo); String logNumber = IdUtil.randomUUID(); log.info("日志编号:{}【众攒】绑卡验证接口开始", logNumber); String jsonData = RbUtil.encrypt(channel, System.currentTimeMillis(), String.valueOf(param), publicKey, privateKey); log.info("日志编号:{} 【众攒】绑卡验证接口参数:{}, data加密 {}", logNumber, param, jsonData); String result = null; try { result = HttpClientUtil.getInstance().postJsonData(basicUrl + "verifyBindCardSms", jsonData); } catch (Exception ex) { log.error("日志编号:{}【众攒】绑卡验证接口推送失败,传参:{} ex:{}", logNumber, jsonData, ex.getMessage()); } try { getZzResponse(resp, logNumber, jsonData, result, "绑卡验证接口"); } catch (Exception ex) { log.error("日志编号:{} 【众攒】绑卡验证接口推送原始返回参数转换失败,jsonData:{} ex:{}", logNumber, jsonData, ex.getMessage()); } return resp; } /** * 9.支持银行列表接口 */ public RbResponse getBankList(String orderNo) { RbResponse resp = new RbResponse(); JSONObject param = new JSONObject(); param.putOpt("orderNo", orderNo); String logNumber = IdUtil.randomUUID(); log.info("日志编号:{}【众攒】支持银行列表接口开始", logNumber); String jsonData = RbUtil.encrypt(channel, System.currentTimeMillis(), String.valueOf(param), publicKey, privateKey); log.info("日志编号:{} 【众攒】支持银行列表接口参数:{}, data加密 {}", logNumber, param, jsonData); String result = null; try { result = HttpClientUtil.getInstance().postJsonData(basicUrl + "getBankCardList", jsonData); } catch (Exception ex) { log.error("日志编号:{}【众攒】支持银行列表接口推送失败,传参:{} ex:{}", logNumber, jsonData, ex.getMessage()); } try { getZzResponse(resp, logNumber, jsonData, result, "支持银行列表接口"); } catch (Exception ex) { log.error("日志编号:{} 【众攒】支持银行列表接口推送原始返回参数转换失败,jsonData:{} ex:{}", logNumber, jsonData, ex.getMessage()); } return resp; } /** * 10.借款试算 */ public RbResponse getTrialInfo(TrialInfoDTO dto) { RbResponse resp = new RbResponse(); JSONObject param = new JSONObject(); param.putOpt("orderNo", dto.getOrderNo()); param.putOpt("loanAmt", dto.getLoanAmt()); param.putOpt("loanNum", dto.getLoanNum()); param.putOpt("repayType", dto.getRepayType()); String logNumber = IdUtil.randomUUID(); log.info("日志编号:{}【众攒】借款试算接口开始", logNumber); String jsonData = RbUtil.encrypt(channel, System.currentTimeMillis(), String.valueOf(param), publicKey, privateKey); log.info("日志编号:{} 【众攒】借款试算接口参数:{}, data加密 {}", logNumber, param, jsonData); String result = null; try { result = HttpClientUtil.getInstance().postJsonData(basicUrl + "getTrialInfo", jsonData); } catch (Exception ex) { log.error("日志编号:{}【众攒】借款试算接口推送失败,传参:{} ex:{}", logNumber, jsonData, ex.getMessage()); } try { getZzResponse(resp, logNumber, jsonData, result, "借款试算接口"); } catch (Exception ex) { log.error("日志编号:{} 【众攒】借款试算接口推送原始返回参数转换失败,jsonData:{} ex:{}", logNumber, jsonData, ex.getMessage()); } return resp; } /** * 11.下单 */ public RbResponse confirmLoan(ConfirmLoanDTO dto) { RbResponse resp = new RbResponse(); JSONObject param = new JSONObject(); param.putOpt("orderNo", dto.getOrderNo()); param.putOpt("loanNo", dto.getLoanNo()); param.putOpt("applyAmt", dto.getApplyAmt()); param.putOpt("bankCardNo", dto.getBankCardNo()); param.putOpt("period", dto.getPeriod()); String logNumber = IdUtil.randomUUID(); log.info("日志编号:{}【众攒】下单结果接口开始", logNumber); String jsonData = RbUtil.encrypt(channel, System.currentTimeMillis(), String.valueOf(param), publicKey, privateKey); log.info("日志编号:{} 【众攒】下单接口参数:{}, data加密 {}", logNumber, param, jsonData); String result = null; try { result = HttpClientUtil.getInstance().postJsonData(basicUrl + "confirmLoan", jsonData); } catch (Exception ex) { log.error("日志编号:{}【众攒】下单接口推送失败,传参:{} ex:{}", logNumber, jsonData, ex.getMessage()); } try { getZzResponse(resp, logNumber, jsonData, result, "下单接口"); } catch (Exception ex) { log.error("日志编号:{} 【众攒】下单接口接推送原始返回参数转换失败,jsonData:{} ex:{}", logNumber, jsonData, ex.getMessage()); } return resp; } /** * 12.查询放款结果 */ public RbResponse queryLoan(String orderNo, String loanNo) { RbResponse resp = new RbResponse(); JSONObject param = new JSONObject(); param.putOpt("orderNo", orderNo); param.putOpt("loanNo", loanNo); String logNumber = IdUtil.randomUUID(); log.info("日志编号:{}【众攒】查询放款结果接口开始", logNumber); String jsonData = RbUtil.encrypt(channel, System.currentTimeMillis(), String.valueOf(param), publicKey, privateKey); log.info("日志编号:{} 【众攒】查询放款结果接口参数:{}, data加密 {}", logNumber, param, jsonData); String result = null; try { result = HttpClientUtil.getInstance().postJsonData(basicUrl + "queryLoan", jsonData); } catch (Exception ex) { log.error("日志编号:{}【众攒】查询放款结果接口推送失败,传参:{} ex:{}", logNumber, jsonData, ex.getMessage()); } try { getZzResponse(resp, logNumber, jsonData, result, "查询放款结果接口"); } catch (Exception ex) { log.error("日志编号:{} 【众攒】查询放款结果接口推送原始返回参数转换失败,jsonData:{} ex:{}", logNumber, jsonData, ex.getMessage()); } return resp; } /** * 13.放款结果推送 */ public JSONObject pushLoan(RequestDTO dto) { //RbResponse resp = new RbResponse(); String logNumber = IdUtil.randomUUID(); log.info("日志编号:{}【众攒】放款结果推送开始", logNumber); // 验签并解密 //String decryptRequest = RbUtil.decryptRequest(dto, dto.getSign(), dto.getKey(), dto.getParams(), publicKey, privateKey); //resp.setCode("1"); //resp.setMsg("success"); //String encryptStr = RbUtil.encryptResponse("1", "success", null, publicKey, privateKey); return JSON.parseObject(RbUtil.encryptResponse("1", "success", "", publicKey, privateKey), JSONObject.class); } /** * 14。查询还款计划 */ public RbResponse queryRepayPlan(String orderNo, String loanNo) { RbResponse resp = new RbResponse(); JSONObject param = new JSONObject(); param.putOpt("orderNo", orderNo); param.putOpt("loanNo", loanNo); String logNumber = IdUtil.randomUUID(); log.info("日志编号:{}【众攒】查询还款计划接口开始", logNumber); String jsonData = RbUtil.encrypt(channel, System.currentTimeMillis(), String.valueOf(param), publicKey, privateKey); log.info("日志编号:{} 【众攒】查询还款计划接口参数:{}, data加密 {}", logNumber, param, jsonData); String result = null; try { result = HttpClientUtil.getInstance().postJsonData(basicUrl + "queryRepayPlan", jsonData); } catch (Exception ex) { log.error("日志编号:{}【众攒】查询还款计划接口推送失败,传参:{} ex:{}", logNumber, jsonData, ex.getMessage()); } try { getZzResponse(resp, logNumber, jsonData, result, "查询还款计划接口"); } catch (Exception ex) { log.error("日志编号:{} 【众攒】查询还款计划接口推送原始返回参数转换失败,jsonData:{} ex:{}", logNumber, jsonData, ex.getMessage()); } return resp; } /**15.还款结果推送*/ public JSONObject pushRepayResult(RequestDTO dto) { String logNumber = IdUtil.randomUUID(); log.info("日志编号:{}【众攒】还款结果推送开始", logNumber); // 验签并解密 //String decryptRequest = RbUtil.decryptRequest(dto, dto.getSign(), dto.getKey(), dto.getParams(), publicKey, privateKey); return JSON.parseObject(RbUtil.encryptResponse("1", "success", "", publicKey, privateKey), JSONObject.class); } /**16.还款H5页面获取接口*/ public RbResponse queryRepayUrl(RepayDTO dto) { RbResponse resp = new RbResponse(); JSONObject param = new JSONObject(); param.putOpt("orderNo", dto.getOrderNo()); param.putOpt("loadNo", dto.getLoanNo()); param.putOpt("type", dto.getType()); param.putOpt("fromH5", dto.getFromH5()); String logNumber = IdUtil.randomUUID(); log.info("日志编号:{}【众攒】还款H5页面获取接口开始", logNumber); String jsonData = RbUtil.encrypt(channel, System.currentTimeMillis(), String.valueOf(param), publicKey, privateKey); log.info("日志编号:{} 【众攒】还款H5页面获取接口参数:{}, data加密 {}", logNumber, param, jsonData); String result = null; try { result = HttpClientUtil.getInstance().postJsonData(basicUrl + "queryRepayUrl", jsonData); } catch (Exception ex) { log.error("日志编号:{}【众攒】还款H5页面获取接口推送失败,传参:{} ex:{}", logNumber, jsonData, ex.getMessage()); } try { getZzResponse(resp, logNumber, jsonData, result, "还款H5页面获取接口"); } catch (Exception ex) { log.error("日志编号:{} 【众攒】还款H5页面获取接口原始返回参数转换失败,jsonData:{} ex:{}", logNumber, jsonData, ex.getMessage()); } return resp; } }