突破数据孤岛:基于PHP调用天远入职背调报告API排查候选人潜在风险

5 阅读7分钟

洞察履历背后的真相:重塑企业人才准入数字防线

在企业招聘与团队组建的高频流转中,候选人履历造假、隐瞒严重法律纠纷或背负高危信用债务等问题,始终是悬在人力与业务部门头顶的达摩克利斯之剑。传统的背景调查不仅依赖第三方机构的繁琐人工核验,时间周期长且成本高昂,更难以穿透信息壁垒,获取实时的多维底层数据。一旦将带有严重违约倾向或潜在欺诈风险的人员引入核心业务线,企业将面临巨大的运营风险与声誉反噬。

天远入职背调报告API 提供了一套直连权威数据的全景核验方案 。该接口以“组合包”模式,一次性输出学籍学历真伪、婚姻状态、劳动争议、涉赌涉诈预警及法院失信执行等多维度核心指标 。

PHP 后端加密通信管道构建

由于该接口涉及多维度的个人敏感履历与权威数据,为确保数据在公共网络传输中的绝对安全,天远API 在通信层设计了严格的加解密标准 。同时,为满足合规要求,请求体中必须携带电子授权书链接。

1. 核心加密规范与端点配置

  • 请求端点: https://api.tianyuanapi.com/api/v1/COMBTY17?t=13位时间戳
  • 通信协议: POST
  • 加密策略: AES-CBC 模式,128位密钥,PKCS7填充 。每次加密需随机生成 16 字节 IV(初始化向量),加密后将 IV 和密文拼接在一起,最后通过 Base64 编码进行传输 。
  • 关键入参: name (姓名)、id_card (身份证号)、mobile_no (手机号码) 与 authorization_url (授权书URL地址,必填以证明合规) 。

2. 标准化 PHP 客户端集成代码 (PHP 7.4+)

在 PHP 环境中,我们可以利用原生的 openssl 扩展高效实现 AES 加解密逻辑。以下类封装了完整的网络请求管道,并针对组合包查询的特性放宽了 cURL 的超时限制:

PHP

<?php

class BackgroundCheckClient
{
    private string $baseUrl = 'https://api.tianyuanapi.com/api/v1/COMBTY17';
    private string $accessId;
    private string $accessKeyRaw;

    /**
     * 初始化背调 API 客户端
     * @param string $accessId 账号的 Access-Id
     * @param string $hexAccessKey 16进制的 Access Key
     */
    public function __construct(string $accessId, string $hexAccessKey)
    {
        $this->accessId = $accessId;
        // 转换 16 进制的 Key 为二进制流,长度应为 16 字节
        $this->accessKeyRaw = hex2bin($hexAccessKey);
    }

    /**
     * 加密载荷:AES-128-CBC + PKCS7 + Base64
     */
    private function _encryptData(string $rawData): string
    {
        // 1. 随机生成 16 字节的初始化向量 (IV)
        $iv = openssl_random_pseudo_bytes(16);
        
        // 2. 执行加密 (OPENSSL_RAW_DATA 会自动处理 PKCS7 填充)
        $cipherText = openssl_encrypt(
            $rawData,
            'aes-128-cbc',
            $this->accessKeyRaw,
            OPENSSL_RAW_DATA,
            $iv
        );

        if ($cipherText === false) {
            throw new RuntimeException("AES 载荷加密失败");
        }

        // 3. 将 IV 和密文拼接,并进行 Base64 编码
        return base64_encode($iv . $cipherText);
    }

    /**
     * 解密响应数据
     */
    private function _decryptData(string $encryptedBase64): array
    {
        $decoded = base64_decode($encryptedBase64);
        if ($decoded === false || strlen($decoded) <= 16) {
            throw new RuntimeException("Base64 解码异常或载荷长度有误");
        }

        // 1. 提取前 16 字节作为 IV,剩余部分为密文
        $iv = substr($decoded, 0, 16);
        $cipherText = substr($decoded, 16);

        // 2. 执行 AES 解密
        $plainText = openssl_decrypt(
            $cipherText,
            'aes-128-cbc',
            $this->accessKeyRaw,
            OPENSSL_RAW_DATA,
            $iv
        );

        if ($plainText === false) {
            throw new RuntimeException("AES 响应数据解密失败");
        }

        return json_decode($plainText, true) ?? [];
    }

    /**
     * 发起综合入职背调查询
     */
    public function fetchReport(string $name, string $idCard, string $mobileNo, string $authUrl): array
    {
        // 构造明文业务参数,必须携带电子授权书 URL
        $payload = json_encode([
            'name' => $name,
            'id_card' => $idCard,
            'mobile_no' => $mobileNo,
            'authorization_url' => $authUrl
        ]);

        $encryptedBody = json_encode(['data' => $this->_encryptData($payload)]);
        
        // 拼装 13 位毫秒级时间戳
        $timestamp = (int)(microtime(true) * 1000);
        $url = $this->baseUrl . '?t=' . $timestamp;

        $ch = curl_init($url);
        curl_setopt_array($ch, [
            CURLOPT_POST => true,
            CURLOPT_POSTFIELDS => $encryptedBody,
            CURLOPT_RETURNTRANSFER => true,
            // 组合包下发包含多个子产品,建议将超时放宽至 15 秒
            CURLOPT_TIMEOUT => 15, 
            CURLOPT_HTTPHEADER => [
                'Access-Id: ' . $this->accessId,
                'Content-Type: application/json'
            ]
        ]);

        try {
            $response = curl_exec($ch);
            
            if (curl_errno($ch)) {
                throw new RuntimeException("cURL 管道阻塞: " . curl_error($ch));
            }
            
            $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
            if ($httpCode !== 200) {
                throw new RuntimeException("API 通信异常,HTTP状态码: " . $httpCode);
            }

            $resJson = json_decode($response, true);
            if (isset($resJson['data'])) {
                return $this->_decryptData($resJson['data']);
            }
            
            throw new RuntimeException("业务层异常: " . ($resJson['message'] ?? '未知响应'));

        } finally {
            curl_close($ch);
        }
    }
}

// 联调示例
try {
    $client = new BackgroundCheckClient('YOUR_ACCESS_ID', 'YOUR_HEX_KEY');
    
    $result = $client->fetchReport(
        '王五', 
        '11010519900101XXXX', 
        '13800138000', 
        'https://your-domain.com/auth_files/signed_doc.pdf'
    );
    
    if (isset($result['responses'])) {
        echo "背调组合包获取成功,子产品数量: " . count($result['responses']) . "\n";
    }
    
} catch (Exception $e) {
    echo "查询中断:" . $e->getMessage() . "\n";
}

3. 网关连通性探活 (cURL)

Bash

curl -X POST "https://api.tianyuanapi.com/api/v1/COMBTY17?t=1710123456789" \
     -H "Access-Id: YOUR_ACCESS_ID" \
     -H "Content-Type: application/json" \
     -d '{"data": "经过AES加密且包含授权书URL的Base64编码字符串"}'

拆解组合包矩阵:深层 JSON 嵌套清洗映射

每个数组元素代表一个独立子产品的查询结果(包含 api_codesuccessdata 等) 。PHP 开发者在消费这些数据时,必须首先检查 $item['success'] 的布尔值,而后针对不同的 $item['api_code'] 实施降维与清洗策略 。

核心核验维度子产品定位节点业务释义开发者注意 (业务清洗与映射策略)
学历真伪与含金量data.educationLevel
data.learningForm学历层次与学习形式强拦截逻辑:注意区分 learningForm 中 2(普通全日制) 与 6(函授)、8(非全日制) 的区别 。对于要求统招学历的岗位,若解析出非全日制代码,系统应直接降权或挂起审核。
公安重点违纪违规data.securityInfo.escape
data.securityInfo.drug涉毒、在逃等公安预警硬性阻断项:司南报告中的 securityInfo 模块代表极高风险 。一旦 $item['data']['securityInfo']['drug'] 大于 0,必须配置抛出极高危异常,无条件终止录用流程。
职场隐患与劳资关系data.labor_disputes.non_compete
data.personnel_disputes.dismissal_dispute竞业限制与辞退纠纷辅助协同核查:若状态返回 2(命中纠纷),PHP 系统可自动生成内审工单,指派 HR 要求候选人提供上家公司的《离职证明》及《竞业解约协议》 。
涉赌涉诈防线data.antiFraudInfo.deceiver欺诈风险等级洗钱防范:返回值分为 0(无)、A、B、C、D 四级 。针对 C(中风险) 与 D(高风险) 人群,特别是涉及核心财务、资金划拨的岗位,必须重点拦截并转交合规部门复审 。

赋能人力资源中台:自动化核查机制落地

通过 PHP 高效解析接口反馈的高维标签,研发团队可将孤立的风险数据织成一张动态防护网,直接嵌入企业的各类用人场景中:

  1. 大规模基础岗位自动化秒批

    针对地推人员、流水线工人或物流骑手等招聘量大、流失率高的基础岗,将 API 集成在扫码入职小程序后端。候选人签署线上电子授权后,PHP 协程或队列异步调用接口。只要未命中“法院执行人名单”、“在逃涉毒”及“频繁劳动碰瓷”等底线红线,系统即可在数秒内自动放行,极大减轻 HR 团队的人力审核损耗。

  2. 关键敏感岗位深度尽职调查对于财务出纳、高阶技术研发等易发内部欺诈的岗位,企业中台除了比对学历外,需重点提取司南报告中的 overdueRecord (逾期记录) 和 creditDetail (授信详情) 。如果候选人名下长期存在大量的 M1+ 逾期或高额网贷记录,其面临的财务压力极易转化为职务犯罪动机,风控引擎应果断发出预警。

  3. 零工经济与劳务外包平台准入滤网外包派单平台在审核家政、代驾等众包服务商时,可以调用该 API 排查其是否有隐匿的民事/刑事执行记录(judiciaRiskInfos)或身份冒用风险 。剔除高危分子,维护平台终端客户的生命与财产安全,构建良性业务生态。

坚守隐私底线与数据安全规范

在充分享受天远入职背调报告API带来的高效核查红利时,开发团队必须坚守数据合规与隐私保护的生命线。本接口在协议层强制要求的 authorization_url 字段,即明确规定开发者与业务线在发起任何背调请求前,必须确保已获取当事人的明确知情同意及合法电子授权书 。绝不允许在非授权、无合法业务依托的灰色地带私自爬取或滥用公民隐私数据。

同时,PHP 架构在落库处理时,应严格落实“可用不可见”的安全策略。对于接收到的婚姻、学历及司法涉诉等高度敏感信息,应实施字段层面的强加密(如国密或 AES 加密落库),并配备严格的权限管控与日志溯源机制。请牢记,API 返回的风险快照与特征标签仅应作为企业人工决策的风控辅助依据。科技向善,在防范用人风险的同时尊重并保护每一位候选人的合法隐私权益,才是打造企业合规护城河的终极准则。