关于API
在消费金融、现金贷、银行信用卡智能提额、汽车金融等场景中,单纯依赖央行征信已经不足以覆盖全部风险。大量用户在持牌小贷、消费分期、网络借贷平台的真实履约表现,往往才是决定坏账率的关键。金融借贷验证探针A(JRZQ2F8A)正是目前市面上覆盖机构最全、响应最稳定、性价比最高的非银行为探针之一。本文以 Spring Boot 项目为背景,为 Java 开发者提供一套可直接落地的完整实现方案,并结合真实企业案例说明如何把数据转化为实际风控能力。
API 调用示例(生产可用完整代码)
@RestController
@RequestMapping("/api/risk")
@RequiredArgsConstructor
public class CreditProbeController {
private static final String ACCESS_ID = "YOUR_ACCESS_ID";
private static final byte[] SECRET_KEY = Hex.decodeHex("YOUR_32_CHAR_HEX_KEY".toCharArray());
private static final String API_URL = "<https://api.tianyuanapi.com/api/v1/JRZQ2F8A>";
private final RestTemplate restTemplate;
@GetMapping("/probe")
public ResponseEntity<Map<String, Object>> query(
@RequestParam String mobile,
@RequestParam String idCard,
@RequestParam String name) {
try {
// 1. 构造并加密请求参数
Map<String, Object> param = Map.of(
"mobile_no", mobile,
"id_card", idCard,
"name", name,
"authorized", "1"
);
String encryptedData = AesCbcUtil.encrypt(param, SECRET_KEY);
// 2. 组装请求
String url = API_URL + "?t=" + System.currentTimeMillis();
HttpHeaders headers = new HttpHeaders();
headers.set("Access-Id", ACCESS_ID);
headers.setContentType(MediaType.APPLICATION*JSON);
HttpEntity<Map<String, String>> entity = new HttpEntity<>(Map.of("data", encryptedData), headers);
// 3. 调用并解密
ResponseEntity<String> resp = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
JSONObject json = JSON.parseObject(resp.getBody());
if (!"0".equals(json.getString("code"))) {
return ResponseEntity.badRequest().body(Map.of("error", json.getString("message")));
}
Map<String, Object> result = AesCbcUtil.decrypt(json.getString("data"), SECRET_KEY);
return ResponseEntity.ok(result);
} catch (Exception e) {
log.error("金融借贷验证探针A 调用异常", e);
return ResponseEntity.status(500).body(Map.of("error", "系统异常"));
}
}
}
// AesCbcUtil.java(已在线上稳定运行两年)
public final class AesCbcUtil {
private static final String TRANSFORMATION = "AES/CBC/PKCS5Padding";
public static String encrypt(Map<String, Object> data, byte[] key) throws Exception {
String json = JSON.toJSONString(data);
Cipher cipher = Cipher.getInstance(TRANSFORMATION);
SecureRandom random = SecureRandom.getInstanceStrong();
byte[] iv = new byte[16];
random.nextBytes(iv);
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key, "AES"), new IvParameterSpec(iv));
byte[] encrypted = cipher.doFinal(json.getBytes(StandardCharsets.UTF_8));
byte[] finalBytes = new byte[iv.length + encrypted.length];
System.arraycopy(iv, 0, finalBytes, 0, iv.length);
System.arraycopy(encrypted, 0, finalBytes, iv.length, encrypted.length);
return Base64.getEncoder().encodeToString(finalBytes);
}
public static Map<String, Object> decrypt(String encryptedBase64, byte[] key) throws Exception {
byte[] raw = Base64.getDecoder().decode(encryptedBase64);
byte[] iv = Arrays.copyOfRange(raw, 0, 16);
byte[] cipherText = Arrays.copyOfRange(raw, 16, raw.length);
Cipher cipher = Cipher.getInstance(TRANSFORMATION);
cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key, "AES"), new IvParameterSpec(iv));
String json = new String(cipher.doFinal(cipherText), StandardCharsets.UTF_8);
return JSON.parseObject(json);
}
}
核心数据结构解析
| 模块 | 字段名 | 示例值 | 业务含义与使用建议 |
|---|---|---|---|
| 探查结论 | result_code | "1" | 1=A(有逾期画像,可信),4=U(数据不足),其他=N |
| 逾期严重程度 | max_overdue_amt | "(10000~20000]" | 历史最大逾期金额区间,越高风险越大 |
| max_overdue_days | "61-90" | 最长逾期天数,>180 天基本黑名单 | |
| latest_overdue_time | "2024-08" | 最近逾期月份,距今越近越危险 | |
| currently_overdue | "2" | 当前逾期机构数 ≥1 直接降额或拒绝 | |
| 机构行为画像 | currently_performance | "12" | 当前正常履约机构数,高值警惕借新还旧 |
| acc_sleep | "14" | 沉睡机构数,>10 提示潜在多头 | |
| acc_exc | "0" | 异常还款机构数(代偿、展期等),非零需人工复核 |
应用价值分析
某 TOP15 消费金融公司将此接口接入审批链路后,规则如下:
currently_overdue >= 1→ 自动拒绝max_overdue_days in ["91-120", "121-150", "151-180", ">180"]→ 额度打 5 折acc_sleep >= 12 && currently_overdue == 0→ 标记为“优质沉睡户”,推送大额邀请函
三个月后,M3+ 坏账率下降 17%,通过率仅下降 3.8%。Java 团队还配合 Caffeine + Redis 两级缓存,将日调用成本控制在原来的 1/4。
Spring Boot + RestTemplate + 统一工具类,是目前 Java 体系最成熟、最易维护的接入方式。建议配合 Spring Retry + Resilience4j 熔断,再加上统一的日志埋点,基本可以做到“零感知”稳定运行。