package com.nova.sankuai.service.impl; import cn.hutool.core.util.IdUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.nova.sankuai.domain.api.jiniu.*; import com.nova.sankuai.domain.entity.CustomerUser; import com.nova.sankuai.infra.utils.RsaSecretUtils; import com.nova.sankuai.service.ICustomerUserService; import com.nova.sankuai.service.IJnService; import lombok.extern.slf4j.Slf4j; 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.Service; import javax.annotation.Resource; import java.net.URLEncoder; import java.util.Objects; /** *

* description *

* * @author denglb 2022/7/13 */ @Service @Slf4j public class JnServiceImpl implements IJnService { @Resource private ICustomerUserService customerUserService; @Resource private RsaSecretUtils rsaSecretUtils; private static final Logger autoLogger = LoggerFactory.getLogger("autoLogger"); @Value("${loginrsa.key-pair.public}") private String publicKeyBase64; @Override public JnResponse checkUserPhone(String userPhone) { autoLogger.info("极牛对接撞库,接收到的userPhone:{}", userPhone); if (StringUtils.isBlank(userPhone)) { return JnResponse.fail("userPhone is null"); } try { int count = customerUserService.count(new LambdaQueryWrapper() .eq(CustomerUser::getPhoneMd5, userPhone)); if (count <= 0) { autoLogger.info("极牛对接撞库,撞库结果成功,接收到的userPhone:{}", userPhone); return JnResponse.success(); } else { autoLogger.info("极牛对接撞库,撞库结果失败,接收到的userPhone:{}", userPhone); return JnResponse.success("0001", "userPhone already exists"); } } catch (Exception e) { autoLogger.info("极牛对接撞库,撞库结果异常,接收到的userPhone:{}", userPhone); return JnResponse.fail(e.getMessage()); } } @Override public JnRegisterResponse register(JnRequest request, String secretKey, String url, String appId, String type) { // 处理签名 if (StringUtils.isBlank(request.getSign())) { autoLogger.info("极牛对接:签名为null"); return JnRegisterResponse.fail("1002", "sign is null"); } StringBuffer signData = new StringBuffer(); signData.append("version=" + request.getVersion() + "&reqData="); signData.append(request.getReqData()); signData.append("×tamp="); signData.append(request.getTimestamp()); String flag = EncryptUtil.md5(signData.toString()); autoLogger.info("极牛对接接收到的Request参数:{}", signData.toString()); if (!request.getSign().equals(flag)) { autoLogger.info("极牛对接,签名验证异常:接收到的签名:{}, 参数生成的签名:{}", request.getSign(), flag); return JnRegisterResponse.fail("1002", "sign is wrong"); } // 处理用户电话 String phone = null; try { String reqData = ParamAESCodec.base64StrDecode(secretKey, request.getReqData()); // String reqData = AseUtil.decrypt(secretKey, request.getReqData()); autoLogger.info("极牛对接,解密reqData数据结果:{}", reqData); if (StringUtils.isBlank(reqData)) { return JnRegisterResponse.fail("1001", "reqData decrypt failed"); } JSONObject jsonObject = JSONObject.parseObject(reqData); phone = jsonObject.getString("userPhone"); autoLogger.info("极牛对接,解密reqData后,获取到userPhone:{}", phone); } catch (Exception e) { autoLogger.info("极牛对接,解密reqData异常:{},堆栈信息:{}", e.getMessage(), e); return JnRegisterResponse.fail("1001", "reqData decrypt failed"); } if (StringUtils.isBlank(phone)) { return JnRegisterResponse.fail("1001", "userPhone is empty"); } try { // 判断用户是否存在 int count = customerUserService.count(new LambdaQueryWrapper() .eq(CustomerUser::getPhone, phone)); if (count > 0) { return JnRegisterResponse.fail("1000", "userPhone already exists", "2"); } String logNumber = IdUtil.randomUUID(); autoLogger.info("日志编号" + logNumber + "极牛联登开始注册新用户,用户手机号:" + phone + "渠道AppId:" + appId); CustomerUser customerUser = customerUserService.registerInitCustomerUser(phone, appId, null, null); autoLogger.info("日志编号" + logNumber + "极牛联登注册新用户成功,用户Id" + customerUser.getId() + ",用户手机号" + customerUser.getPhone()); String autodownload = buildAutodownload(customerUser, appId); if (autodownload == null) { JnRegisterResponse.fail("1004", "build autodownload failed"); } String returnUrl = ""; if (Objects.equals(type, "kdn")) { returnUrl = url + "?appId=" + appId + "&autologin=" + autodownload; //returnUrl = "https://kadana.dldcredit.com/?appId=63836764-f32a-434c-9bb0-028e561a2345"; } else { returnUrl = url + "?appId=" + appId + "&autodownload=" + autodownload; } autoLogger.info("日志编号" + logNumber + "极牛联登注册新用户完毕,返回下载地址:{}", returnUrl); return JnRegisterResponse.success(returnUrl); } catch (Exception e) { autoLogger.info("极牛联登注册新用户异常:{}", e); return JnRegisterResponse.fail("1000", e.getMessage()); } } private String buildAutodownload(CustomerUser customerUser, String appId) { try { JSONObject jsonObject = new JSONObject(); jsonObject.put("appId", appId); jsonObject.put("phone", customerUser.getPhone()); byte[] bytes = RsaSecretUtils.publicEncrypt(jsonObject.toJSONString().getBytes(), publicKeyBase64); String base64 = RsaSecretUtils.byte2Base64(bytes); return URLEncoder.encode(base64, "UTF-8"); // return URLDecoder.decode(base64, "UTF-8"); // return base64; } catch (Exception e) { e.printStackTrace(); return null; } } }