让数据说话:PHP如何解析天远个人风险报告API

45 阅读6分钟

一、 为中小微金融构建低成本的高效风控

在汽车融资租赁、小额消费信贷以及民间借贷登记服务中心等业务场景中,如何在控制技术成本的同时,获得媲美银行级的风控能力,是众多中小企业面临的难题。天远个人风险报告API(接口代码 COMBTY11)提供了一种高性价比的解决方案。

该API通过标准化的接口输出,聚合了“谛听多维报告”与“深度司法涉诉”两大核心数据板块,涵盖了反欺诈评分多头借贷历史失信被执行记录以及公安不良信息。对于使用 PHP(如 Laravel, ThinkPHP, Yii)开发业务系统的团队而言,接入天远API意味着可以快速拥有一个无需维护庞大数据库的云端风控中心,有效识别“老赖”与职业骗贷团伙,保障资金安全。

二、 API接口调用示例(PHP版)

本接口要求上传用户授权书,并采用加密方式传输敏感信息。PHP 的 cURL 库或 GuzzleHTTP 客户端都能完美胜任此任务。

1. 接口技术参数

  • 接口地址https://api.tianyuanapi.com/api/v1/COMBTY11?t=13位时间戳
  • 请求方式:POST
  • 鉴权方式:参数加密后 Base64 编码,放入 data 字段。
  • 前置条件:需提前将用户签署的授权书上传至服务器,获取公网可访问的 URL。

2. Curl 命令行测试

Bash

curl -X POST "https://api.tianyuanapi.com/api/v1/COMBTY11?t=1715068800000" \
-H "Content-Type: application/json" \
-d '{
    "data": "eyJpZF9jYXJkIjoiMTEwMTAxMTk5MDAxMDEwMTIzIiwibmFtZSI6IuW8oOSBgSIsIm1vYmlsZV9ubyI6IjEzODAwMTM4MDAwIiwiYXV0aG9yaXphdGlvbl91cmwiOiJodHRwczovL2ltZy5leGFtcGxlLmNvbS9hdXRoLnBuZyIsImF1dGhfZGF0ZSI6IjIwMjQwMTAxLTIwMjQxMjMxIn0="
}'

3. PHP (Guzzle) 完整服务类示例

以下代码展示了基于 GuzzleHttp(现代 PHP 开发标配)的封装方式,适用于 Laravel 或 Symfony 项目。

PHP

<?php

namespace App\Services\RiskControl;

use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Support\Facades\Log;

class PersonalRiskService
{
    private $client;
    private $apiUrl = 'https://api.tianyuanapi.com/api/v1/COMBTY11';

    public function __construct()
    {
        $this->client = new Client([
            'timeout'  => 30.0, // 风险报告生成耗时较长,建议30秒
            'headers'  => ['Content-Type' => 'application/json']
        ]);
    }

    /**
     * 模拟加密逻辑 (AES)
     * 实际对接请使用天远官方提供的 SDK 或加密算法
     */
    private function encryptData(array $payload): string
    {
        $jsonStr = json_encode($payload, JSON_UNESCAPED_UNICODE);
        // TODO: $encrypted = openssl_encrypt($jsonStr, 'AES-128-ECB', $key...);
        // 此处仅做 Base64 演示
        return base64_encode($jsonStr);
    }

    /**
     * 获取个人风险综合报告
     *
     * @param string $name 姓名
     * @param string $idCard 身份证
     * @param string $mobile 手机号
     * @param string $authUrl 授权书URL
     * @param string $authDate 授权时间段 YYYYMMDD-YYYYMMDD
     * @return array|null
     */
    public function fetchReport($name, $idCard, $mobile, $authUrl, $authDate)
    {
        // 1. 组装参数
        $requestData = [
            'name'              => $name,
            'id_card'           => $idCard,
            'mobile_no'         => $mobile,
            'authorization_url' => $authUrl, // 必填
            'auth_date'         => $authDate     // 必填
        ];

        // 2. 加密
        $encrypted = $this->encryptData($requestData);
        $timestamp = round(microtime(true) * 1000);

        try {
            // 3. 发送请求
            $response = $this->client->post($this->apiUrl . '?t=' . $timestamp, [
                'json' => ['data' => $encrypted]
            ]);

            $result = json_decode($response->getBody()->getContents(), true);

            // 4. 解析组合包
            if (isset($result['responses'])) {
                return $this->formatRiskData($result['responses']);
            }
            
            Log::error("天远API调用异常", ['response' => $result]);
            return null;

        } catch (GuzzleException $e) {
            Log::error("天远API网络错误: " . $e->getMessage());
            return null;
        }
    }

    /**
     * 格式化关键风控指标,便于存入数据库
     */
    private function formatRiskData(array $responses)
    {
        $riskProfile = [
            'score_fraud' => -1,    // 反欺诈分
            'score_credit' => -1,   // 信用分
            'risk_tags' => [],      // 风险标签
            'court_records' => 0,   // 法院记录数
            'is_dishonest' => false // 是否失信人
        ];

        foreach ($responses as $item) {
            if (!$item['success'] || empty($item['data'])) continue;

            // 谛听多维报告 (信用与评分)
            if ($item['api_code'] === 'DWBG8B4D') {
                $data = $item['data'];
                $riskProfile['score_fraud'] = $data['fraudScore'] ?? -1;
                $riskProfile['score_credit'] = $data['creditScore'] ?? -1;
                
                // 提取风险标签
                if (isset($data['riskWarning'])) {
                    foreach ($data['riskWarning'] as $key => $val) {
                        if ($val === 1 && $key !== 'totalRiskCounts') {
                            $riskProfile['risk_tags'][] = $key;
                        }
                    }
                }
            }

            // 司法涉诉 (法律风险)
            if ($item['api_code'] === 'FLXG0V4B') {
                $data = $item['data'];
                // 统计案件总数
                $riskProfile['court_records'] = $data['entout']['data']['count']['count_total'] ?? 0;
                
                // 检查是否有失信记录
                if (!empty($data['sxbzxr']['data']['sxbzxr'])) {
                    $riskProfile['is_dishonest'] = true;
                }
            }
        }

        return $riskProfile;
    }
}

// 调用示例
/*
$service = new PersonalRiskService();
$report = $service->fetchReport('张三', '110101199001011234', '13800138000', 'http://oss/auth.jpg', '20230101-20240101');
print_r($report);
*/

三、 核心数据结构解析

天远API 的响应设计非常适合 PHP 的数组处理模式。开发者需要关注 responses 数组下的两个核心子产品。

数据模块对照表:

模块名称API Code核心作用对应 PHP 逻辑
谛听多维报告DWBG8B4D评分、反欺诈、多头借贷用于计算系统自动审批的“评分卡”
个人司法涉诉FLXG0V4B法院判决、执行、失信用于“一票否决”制的黑名单过滤

四、 字段详解

在信贷或租赁业务中,以下字段直接决定了订单的通过率。PHP 开发者需重点关注这些字段的解析与落库。

1. 核心评分与建议 (DWBG8B4D)

字段名类型含义业务阈值建议
fraudScoreint反欺诈评分[0-100]。>80 分为高危,建议直接拒单。
creditScoreint信用评分[300-1000]。<500 分为信用较差,需增加担保。
checkSuggeststring系统建议如“建议拒绝”,可作为初审参考。

2. 借贷风险雷达 (DWBG8B4D -> overdueRiskProduct)

此模块反映了申请人的资金饥渴程度和还款能力。

字段名类型含义说明
currentOverdueAmountstring当前逾期金额(0,1000)。若不为空,说明当前有债未还。
daysSinceLastSuccessfulRepaymentstring最近一次还款距今天数若时间过长(如 160+),说明近期无还款行为,可能是“老赖”。
totalLoanInstitutionsstring贷款总机构数多头借贷指标,数量越多风险越大。

3. 司法黑名单 (FLXG0V4B)

字段名类型含义风险等级
sxbzxrarray失信被执行人列表极高风险。俗称老赖,禁止放款。
xgbzxrarray限制高消费列表高风险。资金流动性受限。
criminalobject刑事案件高风险。需人工核查案由(如涉毒、诈骗)。

五、 应用价值分析

对于使用 PHP 构建业务系统的企业,天远API 可以无缝嵌入现有的工作流中:

  1. 自动化的贷前初审

    在用户提交贷款申请后,PHP 后端触发 API 调用。系统根据返回的 fraudScore 和 riskWarning(如 hasCriminalRecord 有前科)自动打标。如果命中“失信”或“涉黑”标签,直接流转至“自动拒绝”状态,节省 80% 的人工信审成本。

  2. 汽车租赁风控

    租车行业最怕“租车不还”或“抵押黑车”。通过 API 中的 leasingRiskAssessment(租赁风险评估)字段,可以查看用户在其他租赁机构的申请记录。如果发现用户近期频繁申请(frequentRentalApplications == 1),系统应提示门店收取高额押金或拒绝交车。

  3. 存量客户贷后预警

    利用 PHP 的定时任务(Cron Job),定期(如每月)批量扫描存量客户的风险变化。如果发现某客户突然新增了“法院执行记录”或“多头借贷”激增,系统可自动触发“贷后预警”,提示催收团队提前介入。

六、 总结

天远个人风险报告API 为 PHP 开发者提供了一把打开大数据风控之门的钥匙。它不仅解决了中小企业数据源匮乏的问题,更通过标准化的接口降低了技术对接门槛。

开发建议:

  • 异步处理:由于报告生成涉及多方数据查询,建议使用 PHP 的消息队列(如 Redis Queue / RabbitMQ)来异步处理 API 调用,避免阻塞主业务流程。
  • 数据留存:务必保存 API 返回的原始 JSON 数据(建议存入 MongoDB 或 MySQL JSON 列),以便后续发生争议时进行溯源。
  • 费用控制:在开发测试阶段,注意控制调用频率;在生产环境,可配合本地缓存策略,对短时间内的重复查询直接返回缓存结果,降低成本。