package com.nova.sankuai.domain.api.yibeifenqi; import cn.hutool.crypto.digest.MD5; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSON; import com.nova.sankuai.infra.mapper.CustomerMapper; import com.nova.sankuai.service.ICustomerUserService; import lombok.Getter; import lombok.Setter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.Objects; /** * @author Gmw * @date 2022年5月19日 */ @Getter @Setter @Component public class YiBeiUtil { /** * 撞库接口 */ @Value("${yibei.config.check-user-url}") private String checkUserUrl; /** * 正式传参接口 */ @Value("${yibei.config.register-url}") private String registerUrl; /** * 渠道编码 */ @Value("${yibei.config.channel-code}") private String channelCode; /** * 回调接口使用到的 */ @Value("${yibei.config.sign-key}") private String signKey; /** * 用户渠道来源(固定参数) */ public static final String channelSource = "BSB00001"; @Resource ICustomerUserService customerUserService; @Resource CustomerMapper customerMapper; private static final Logger log = LoggerFactory.getLogger("capitalLogger"); /** * 撞库接口 * * @param phone 手机号 * @return */ public YiBeiCheckUserResponseVO checkUser(String phone) { MD5 md5 = MD5.create(); String phoneMd5 = md5.digestHex(phone); String sign = md5.digestHex(String.format("phoneMd5=%s&channelCode=%s", phoneMd5, channelCode)); String body = JSON.toJSONString(new YiBeiCheckUserDTO(phoneMd5, channelCode, sign)); log.info("易贝分期撞库请求, phone={}, body={}", phone, body); HttpResponse response = HttpUtil.createPost(checkUserUrl) .header("Content-Type", "application/json") .body(body) .execute(); if (response == null) { log.error("易贝分期撞库请求失败"); return null; } YiBeiCheckUserResponseVO vo = null; try { vo = JSON.parseObject(response.body(), YiBeiCheckUserResponseVO.class); boolean flag = Objects.equals(vo.getStatus(), 1) // 接口返回成功 && Objects.equals(vo.getData().getFilterResult(), 1); // 新用户 if (flag) { log.info("易贝分期撞库请求成功, phone={}", phone); } else { log.info("易贝分期撞库请求失败, phone={}, resp={}", phone, response.body()); return null; } return vo; } catch (Exception e) { log.info("易贝分期撞库返回转换失败, phone={}, resp={}", phone, response); return null; } } public YiBeiRegisterResponseVO register(YiBeiRegisterDTO registerDTO) { MD5 md5 = MD5.create(); String sign = md5.digestHex(String.format("phone=%s&channelCode=%s", registerDTO.getPhone(), channelCode)); registerDTO.setSign(sign); registerDTO.setChannelCode(channelCode); registerDTO.setChannelSource(channelSource); String body = JSON.toJSONString(registerDTO); log.info("易贝分期注册请求, param={}", body); HttpResponse response = HttpUtil.createPost(registerUrl) .header("Content-Type", "application/json") .body(body) .execute(); if (response == null) { log.error("易贝分期联登请求失败"); return null; } YiBeiRegisterResponseVO yiBeiRegisterResponseVO = null; try { yiBeiRegisterResponseVO = JSON.parseObject(response.body(), YiBeiRegisterResponseVO.class); if (yiBeiRegisterResponseVO != null && yiBeiRegisterResponseVO.getStatus() != null && yiBeiRegisterResponseVO.getData() != null) { log.info("易贝分期联登返回转换数据为,{}", yiBeiRegisterResponseVO.toString()); return yiBeiRegisterResponseVO; } } catch (Exception e) { log.info("易贝分期联登返回转换失败,{}", response.body()); return null; } log.info("易贝分期联登返回失败,{}", yiBeiRegisterResponseVO); return null; } }