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;
|
}
|
|
}
|