
在互联网招聘平台、消费金融风控引擎、在线教育认证系统、政务一网通办平台以及企业人力资源管理系统中,高效、可信的学历信息核验已成为数字化身份验证不可或缺的一环。
学历信息查询API”,通过姓名与身份证号即可实时获取用户完整的高等教育学历履历,包括学历等级、学校类别、学习方式、入学/毕业年月及所学专业,并支持多段学历经历的时序展示。
本文面向 Node.js 开发者,全面解析该 API 的安全调用机制,提供基于原生 crypto 模块的加解密实现方案,并附带完整错误处理逻辑。
https://apitest.tianyuanapi.com/api/v1/IVYZ9A2B?t=<13位毫秒时间戳>Access-Id: YOUR_ACCESS_ID{ "data": "Base64(AES-CBC(明文))" }curl -X POST '<https://apitest.tianyuanapi.com/api/v1/IVYZ9A2B?t=1730505600000>' \\
-H 'Access-Id: YOUR_ACCESS_ID' \\
-H 'Content-Type: application/json' \\
-d '{"data": "UkVQTEFDRV9XSVRIX0VOQ1JZUFRFRF9EQVRB"}'const crypto = require('crypto');
const axios = require('axios');
// 配置凭证(请替换为实际值)
const ACCESS_ID = 'your_access_id';
const ACCESS_KEY_HEX = 'a1b2c3d4e5f67890a1b2c3d4e5f67890'; // 32字符十六进制
// 十六进制转 Buffer
function hexToBuffer(hex) {
return Buffer.from(hex, 'hex');
}
// AES-128-CBC 加密(PKCS7 自动填充)
function encryptData(plainText, hexKey) {
const key = hexToBuffer(hexKey);
const iv = crypto.randomBytes(16);
const cipher = crypto.createCipheriv('aes-128-cbc', key, iv);
const encrypted = Buffer.concat([cipher.update(plainText, 'utf8'), cipher.final()]);
return Buffer.concat([iv, encrypted]).toString('base64');
}
// 解密
function decryptData(base64Data, hexKey) {
const buffer = Buffer.from(base64Data, 'base64');
const iv = buffer.subarray(0, 16);
const ciphertext = buffer.subarray(16);
const key = hexToBuffer(hexKey);
const decipher = crypto.createDecipheriv('aes-128-cbc', key, iv);
return Buffer.concat([decipher.update(ciphertext), decipher.final()]).toString('utf8');
}
// 主调用函数
async function queryEducation(name, idCard) {
const url = `https://apitest.tianyuanapi.com/api/v1/IVYZ9A2B?t=${Date.now()}`;
const payload = JSON.stringify({ name, id_card: idCard });
let encryptedData;
try {
encryptedData = encryptData(payload, ACCESS_KEY_HEX);
} catch (err) {
console.error('[加密失败]', err.message);
return null;
}
const headers = {
'Access-Id': ACCESS_ID,
'Content-Type': 'application/json'
};
try {
const { data: resp } = await axios.post(url, { data: encryptedData }, { headers });
if (resp.err_code !== '200') {
console.error('[API错误]', resp.err_msg);
return null;
}
const decrypted = decryptData(resp.data, ACCESS_KEY_HEX);
return JSON.parse(decrypted);
} catch (err) {
console.error('[请求/解密失败]', err.message);
return null;
}
}
// 使用示例
(async () => {
const result = await queryEducation('张三', '110101199001011234');
if (result) {
console.log('✅ 学历查询成功:', JSON.stringify(result, null, 2));
}
})();💡 仅需 axios,加密使用 Node.js 内置 crypto,无需额外依赖。
API 的响应设计兼顾安全性与结构化。外层响应包含 err_code(200 表示通信成功)和加密的 data 字段;解密后得到真正的业务对象,其结构如下:
data 对象包含 query_id(唯一流水号)和 education_background;education_background 是学历信息的核心容器,内含状态码 code(如 "9100")、描述 msg 和学历数组 data;特别注意:时间字段 ksrq(入学)和 jsrq(毕业)采用 YYMM 字符串格式(如 "2206" 表示 2022年6月),在业务逻辑中需转换为标准日期对象以支持时间计算或可视化。
字段名 | 含义 | 说明 |
|---|---|---|
| 接口调用状态 | "200" 成功,其他为网络/鉴权错误 |
| 错误描述 | 如 "缺少Access-Id" |
| 加密业务载荷 | 需解密后使用 |
字段名 | 含义 | 说明 |
|---|---|---|
| 查询唯一ID | 用于日志追踪与对账 |
| 业务结果码 | "9100"=有数据,"1000"=无记录 |
| 业务消息 | 中文提示,如“查询成功有结果” |
| 学历列表 | 数组,可能为空 |
字段名 | 含义 | 说明 |
|---|---|---|
| 学历等级 | 如“大学本科”、“博士研究生” |
| 院校类别 | 如“普通高校”,部分为“其他” |
| 学习方式 | 如“普通全日制”、“函授” |
| 入学年月 | YYMM 格式(字符串) |
| 毕业年月 | YYMM 格式(字符串) |
| 专业名称 | 如“软件工程”,部分为“其他” |
1. 典型应用场景
2. 数据价值挖掘
ksrq 与 jsrq 计算学习周期,识别“速成学历”风险。xl 与 xxxs 构建用户教育背景标签,用于个性化推荐。3. 集成建议
${id_card}_${name}),避免重复调用。query_id 与用户行为日志关联,满足审计要求。本文完整演示了如何在 Node.js 环境中调用学历信息查询API(IVYZ9A2B),从请求加密、HTTP 调用到响应解密,提供了开箱即用的代码模板。
建议开发者将加解密逻辑封装为独立模块,并结合业务场景设计缓存与重试策略。随着数字身份体系的发展,学历验证将成为更多创新应用的基础能力。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。