ab
2024-11-04 09d882262f530ded672f1c01fb65a1fefa00d52d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
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;
        }
    }
}