package com.nova.sankuai.domain.api.channelUnion; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.nova.sankuai.domain.entity.CapitalInfo; import com.nova.sankuai.domain.enums.capitalInfo.CapitalTypeEnum; import com.nova.sankuai.infra.constants.Constants; import com.nova.sankuai.infra.utils.RsaSecretUtils; import com.nova.sankuai.security.HttpClientUtil; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.util.DigestUtils; import java.util.Objects; //import com.nova.sankuai.infra.utils.zhxyp.ZhxypUtil; /** * @Author Lilinhong * @Date 2022/6/12 20:46 */ @Component public class ChannelUnionAutoUtil { /** * 随易花 */ @Value("${syh.domain}") private String syhPath; // @Autowired // private ZhxypUtil zhxypUtil; private static final Logger logger = LoggerFactory.getLogger("capitalLogger"); public ChannelUnionCollisionResponse getCollision(String capitalName, String publicKeyBase64, String url, String appId, String phone, String idCard, String name, String cityName, String channelCode) { // 判断是否 随易花,是,则判断是否城市为空,为空则不撞库 if (Constants.SYHCAPITALNAME.equals(capitalName) && StringUtils.isBlank(cityName)) { logger.info("手机号为:" + phone + "," + capitalName + " 因为城市为空撞库失败!"); return null; } JSONObject param = new JSONObject(); JSONObject body = new JSONObject(); String phoneMd5 = DigestUtils.md5DigestAsHex(phone.getBytes()); if (Constants.SYHCAPITALNAME.equals(capitalName) || "好汇推".equals(capitalName) || "助贷".equals(capitalName) || "任意花".equals(capitalName) || "慧借".equals(capitalName) || "e时贷".equals(capitalName) || "商城-本APP".equals(capitalName) ) {// 随易花或好汇推 // body.put("city", cityName.replace("市", "")); // body.put("mobileMd5", phoneMd5); // body.put("mobile", phone); // body.put("channelCode", channelCode); // logger.info("手机号为:" + phone + "," + capitalName + " 撞库网址:" + syhPath + "/jinjian/ctl/hd360/hd/checkMobileMd5 撞库原始参数:{}" , body); // 默认为撞库成功 logger.info("手机号为:" + phone + "," + capitalName + "初始撞库成功}"); ChannelUnionCollisionResponse channelUnionCollisionResponse = new ChannelUnionCollisionResponse(); channelUnionCollisionResponse.setCode(200); return channelUnionCollisionResponse; } else { param.put("phoneMd5", phoneMd5); if (StringUtils.isNotEmpty(idCard)) { String idCardMd5 = DigestUtils.md5DigestAsHex(idCard.getBytes()); param.put("idCardMd5", idCardMd5); } if (StringUtils.isNotEmpty(name)) { String nameMd5 = DigestUtils.md5DigestAsHex(name.getBytes()); param.put("nameMd5", nameMd5); } String base64 = null; try { byte[] bytes = RsaSecretUtils.publicEncrypt(param.toJSONString().getBytes(), publicKeyBase64); base64 = RsaSecretUtils.byte2Base64(bytes); logger.info("手机号为:" + phone + "," + capitalName + "撞库原始加密参数:{}", base64); } catch (Exception e) { logger.info("手机号为:" + phone + "," + capitalName + "撞库原始加密参数失败"); e.printStackTrace(); return null; } body.put("appId", appId); body.put("data", base64); logger.info("手机号为:" + phone + "," + capitalName + "撞库原始参数:{}", param); } String result = null; try { if ("优点分期".equals(capitalName)) { //优点分期是php语言,使用postJsonData()方法会导致对方收不到请求,此方法能够发送请求 result = HttpClientUtil.doPost(url + "/api/v1/unionLogin/unionCheckUser", body.toJSONString()); logger.info("手机号为:" + phone + "," + capitalName + "撞库原始返回参数:{}", result); } else if (Constants.SYHCAPITALNAME.equals(capitalName)) {// 随易花撞库 result = HttpClientUtil.getInstance().syhPostJsonData(syhPath + "/jinjian/ctl/hd360/hd/checkMobileMd5", body.toJSONString()); logger.info("手机号为:" + phone + "," + capitalName + "撞库原始返回参数:{}", result); } else if ("大象花呗".equals(capitalName)) { result = HttpClientUtil.getInstance().postJsonData(url + "/openapi/duplicate/kadana/checkuser", body.toJSONString()); logger.info("手机号为:" + phone + "," + capitalName + "撞库原始返回参数:{}", result); // } else if ("商城-本APP".equals(capitalName)) { // result = zhxypUtil.check(idCard, phone, name); // logger.info("手机号为:" + phone + "," + capitalName + "撞库原始返回参数:{}", result); } else { result = HttpClientUtil.getInstance().postJsonData(url + "/api/v1/unionLogin/unionCheckUser", body.toJSONString()); logger.info("手机号为:" + phone + "," + capitalName + "撞库原始返回参数:{}", result); } } catch (Exception e) { logger.info("手机号为:" + phone + "," + capitalName + "撞库原始返回参数失败"); e.printStackTrace(); return null; } if (org.apache.commons.lang.StringUtils.isEmpty(result)) { logger.error("手机号为:" + phone + "," + capitalName + "撞库失败"); return null; } ChannelUnionCollisionResponse channelUnionCollisionResponse = null; try { channelUnionCollisionResponse = JSON.parseObject(result, ChannelUnionCollisionResponse.class); return channelUnionCollisionResponse; } catch (Exception e) { logger.info("手机号为:" + phone + "," + capitalName + "撞库原始返回参数转换失败"); e.printStackTrace(); return null; } } /** * 标注:联登处理 */ public ChannelUnionAutoResponse getAuto(CapitalInfo capitalinfo, String publicKeyBase64, String url, String appId, String phone, String idCard, String name) { if(capitalinfo==null ){ logger.error("资方信息为空"); return null; } JSONObject param = new JSONObject(); JSONObject body = new JSONObject(); param.put("phone", phone); // 如果只撞库不联登这种不需要推送其它信息 if(!Objects.equals(capitalinfo.getType(), CapitalTypeEnum.UNION_HALF.getCode())){// 非 面向产品方撞库不联登模式,对接我们文档,只推送電話號碼 if (StringUtils.isNotEmpty(idCard)) { param.put("idCard", idCard); } if (StringUtils.isNotEmpty(name)) { param.put("name", name); } } String capitalName = capitalinfo.getName(); logger.info("手机号为:" + phone + "," + capitalName + "联登原始参数:{}", param); String base64 = null; try { byte[] bytes = RsaSecretUtils.publicEncrypt(param.toJSONString().getBytes(), publicKeyBase64); base64 = RsaSecretUtils.byte2Base64(bytes); logger.info("手机号为:" + phone + "," + capitalName + "联登原始加密参数:{}", base64); } catch (Exception e) { logger.info("手机号为:" + phone + "," + capitalName + "联登原始加密参数失败"); e.printStackTrace(); return null; } body.put("appId", appId); body.put("data", base64); String result = null; try { if ("优点分期".equals(capitalName)) { //优点分期是php语言,使用postJsonData()方法会导致对方收不到请求,此方法能够发送请求 result = HttpClientUtil.doPost(url + "/api/v1/unionLogin/unionRegister", body.toJSONString()); logger.info("手机号为:" + phone + "," + capitalName + "撞库原始返回参数:{}", result); } else if (Objects.equals("大象花呗",capitalName)) { result = HttpClientUtil.getInstance().postJsonData(url + "/openapi/unionlogin/kadana/getredirecturl", body.toJSONString()); logger.info("手机号为:" + phone + "," + capitalName + "联登原始返回参数:{}", result); } else { result = HttpClientUtil.getInstance().postJsonData(url + "/api/v1/unionLogin/unionRegister", body.toJSONString()); logger.info("手机号为:" + phone + "," + capitalName + "联登原始返回参数:{}", result); } } catch (Exception e) { logger.info("手机号为:" + phone + "," + capitalName + "联登原始返回参数失败"); e.printStackTrace(); return null; } if (org.apache.commons.lang.StringUtils.isEmpty(result)) { logger.error("手机号为:" + phone + "," + capitalName + "联登失败"); return null; } ChannelUnionAutoResponse channelUnionAutoResponse = null; try { channelUnionAutoResponse = JSON.parseObject(result, ChannelUnionAutoResponse.class); return channelUnionAutoResponse; } catch (Exception e) { logger.info("手机号为:" + phone + "," + capitalName + "联登原始返回参数转换失败"); e.printStackTrace(); return null; } } }