
在企业招聘、人才背景调查、金融信贷等众多场景中,权威、快速的学历信息核验是进行人才风险甄别的关键依据。“学历信息查询”API,能够快速查询和验证高等教育学历信息的真实性,并追溯完整的学习经历。
作为数据服务的重要组成部分,本文将作为一份详细的开发文档,深入剖析此API (接口代码: IVYZ9A2B),详细解读其返回的原始数据结构和每一个核心字段的含义,帮助开发者利用权威学历大数据进行更深层次的数据分析与企业风险管理应用集成。
接口功能:通过姓名和身份证号查询高等教育学历信息。
请求方式:POST请求端点:https://apitest.tianyuanapi.com/api/v1/IVYZ9A2B?t=13位时间戳
安全机制:
Access-Id,即账号的唯一凭证。AES-128-CBC模式 (PKCS7填充) 加密。IV + 密文 拼接。Base64编码,作为请求体中 data 字段的值发送。data 字段同样为Base64编码的加密数据,解密流程相反(Base64解码 -> 提取前16字节为IV -> AES解密)。# 警告:此处的 'YOUR_ACCESS_ID' 和 'ENCRYPTED_BASE64_DATA' 必须替换为您的真实数据
# ENCRYPTED_BASE64_DATA 是您本地使用 AES-128-CBC 加密并Base64编码后的数据
curl -X POST 'https://apitest.tianyuanapi.com/api/v1/IVYZ9A2B?t=1678886400000' \
-H 'Content-Type: application/json' \
-H 'Access-Id: YOUR_ACCESS_ID' \
-d '{
"data": "ENCRYPTED_BASE64_DATA"
}'以下是一个完整的Python调用示例,包含了加密和解密函数的占位符。
import requests
import json
import base64
import time
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from Crypto.Random import get_random_bytes
# --- 占位符:请替换为您的真实凭证 ---
ACCESS_ID = "YOUR_ACCESS_ID"
# 16进制的Access Key,需要转换为16字节的bytes
ACCESS_KEY = bytes.fromhex("YOUR_16_BYTE_HEX_ACCESS_KEY")
API_ENDPOINT = "https://apitest.tianyuanapi.com/api/v1/IVYZ9A2B"
# ------------------------------------
def encrypt_data(payload_json: str) -> str:
"""
使用 AES-128-CBC 加密业务数据
"""
try:
# 1. 准备明文和IV
plaintext_bytes = payload_json.encode('utf-8')
iv = get_random_bytes(16) # 生成16字节的随机IV
# 2. 初始化加密器
cipher = AES.new(ACCESS_KEY, AES.MODE_CBC, iv)
# 3. 加密并应用PKCS7填充
padded_data = pad(plaintext_bytes, AES.block_size, style='pkcs7')
ciphertext = cipher.encrypt(padded_data)
# 4. 拼接 IV 和密文
encrypted_data = iv + ciphertext
# 5. Base64编码
return base64.b64encode(encrypted_data).decode('utf-8')
except Exception as e:
print(f"加密失败: {e}")
return None
def decrypt_data(encrypted_base64_data: str) -> str:
"""
解密AES-128-CBC响应数据
"""
try:
# 1. Base64解码
encrypted_data = base64.b64decode(encrypted_base64_data)
# 2. 提取IV和密文 (IV为前16字节)
iv = encrypted_data[:16]
ciphertext = encrypted_data[16:]
# 3. 初始化解密器
cipher = AES.new(ACCESS_KEY, AES.MODE_CBC, iv)
# 4. 解密并去除PKCS7填充
decrypted_padded_data = cipher.decrypt(ciphertext)
decrypted_data = unpad(decrypted_padded_data, AES.block_size, style='pkcs7')
return decrypted_data.decode('utf-8')
except Exception as e:
print(f"解密失败: {e}")
return None
def query_education_info(name: str, id_card: str):
"""
调用天远API查询学历信息
"""
# 1. 准备业务参数
payload = {
"name": name,
"id_card": id_card
}
payload_json = json.dumps(payload)
# 2. 加密数据
encrypted_request_data = encrypt_data(payload_json)
if not encrypted_request_data:
return
request_body = {
"data": encrypted_request_data
}
# 3. 准备请求头和URL
headers = {
"Access-Id": ACCESS_ID,
"Content-Type": "application/json"
}
# 生成13位时间戳
timestamp = int(time.time() * 1000)
url = f"{API_ENDPOINT}?t={timestamp}"
try:
# 4. 发送POST请求
response = requests.post(url, headers=headers, data=json.dumps(request_body), timeout=10)
if response.status_code == 200:
response_json = response.json()
# 5. 检查公共响应参数
if response_json.get("code") == 0 or response_json.get("err_code") == "200":
# 6. 解密业务数据
encrypted_response_data = response_json.get("data")
decrypted_response_str = decrypt_data(encrypted_response_data)
if decrypted_response_str:
print("--- 解密后响应 (Decrypted Response) ---")
print(json.dumps(json.loads(decrypted_response_str), indent=4, ensure_ascii=False))
else:
print("错误:响应数据解密失败。")
else:
print(f"API请求失败 (业务层面): code={response_json.get('code')}, message={response_json.get('message')}")
else:
print(f"HTTP请求失败: 状态码 {response.status_code}")
except requests.exceptions.RequestException as e:
print(f"请求异常: {e}")
# --- 执行查询 ---
if __name__ == "__main__":
# 使用文档中的示例参数
query_education_info("张三", "110101199001011234")API的响应数据分为两层:外层公共响应和内层加密业务数据。
返回基础的 http 响应信息,data 字段中包含经 Base64 编码的加密业务数据。
{
"code": 0,
"message": "ok"
}data字段解密后,得到如下结构。真正的学历信息位于 data.education_background.data 数组中。{
"data": {
"query_id": "202505213797602437204758911904",
"education_background": {
"msg": "查询成功有结果",
"data": [
{
"jsrq": "1806",
"xxxs": "普通全日制",
"xl": "大学专科",
"xxlx": "其他",
"zymc": "其他",
"ksrq": "1509"
},
{
"jsrq": "2206",
"xxxs": "普通全日制",
"xl": "大学本科",
"xxlx": "其他",
"zymc": "其他",
"ksrq": "1809"
}
],
"code": "9100"
}
},
"err_msg": "请求成功",
"err_code": "200"
}以下字段需组合为JSON字符串后加密,放入请求体的data字段。
字段名 | 类型 | 必填 | 含义 |
|---|---|---|---|
| string | 是 | 姓名 |
| string | 是 | 身份证号 |
字段名 | 类型 | 含义 |
|---|---|---|
| int | 公共状态码,例如 0、1001等 |
| string | 公共状态描述 |
| string | 接口调用流水号 |
| string | 加密后的业务数据 (Base64编码) |
字段名 | 类型 | 含义 |
|---|---|---|
| object | 业务数据主体,包含查询ID和学历信息 |
| string | 业务错误信息 |
| string | 业务错误码 |
education_background)字段名 | 类型 | 含义 |
|---|---|---|
| string | 业务查询状态详情,如 "查询成功有结果" |
| array | 学历信息数组,包含一条或多条学历记录 |
| string | 业务查询状态码,如 "9100" |
| string | 订单号/查询流水号 |
(注:根据文档结构,__ |
education_background.data 数组元素)字段名 | 类型 | 含义 | 说明 |
|---|---|---|---|
| string | 学历 | 如:大学专科、大学本科 |
| string | 学校类型 | 如:普通高校、成人高校、其他 |
| string | 学习形式 | 如:普通全日制、非全日制 (注:示例中为 |
| string | 入学时间 | 格式:YYMM,如 "1809" |
| string | 毕业时间 | 格式:YYMM,如 "2206" |
| string | 专业名称 |
学历信息查询 API (IVYZ9A2B) 在多个关键业务流程中具有重大的应用价值:
本文详细介绍了天远API的学历信息查询API (IVYZ9A2B) 的接入方法、安全机制、请求与响应结构,并提供了完整的curl和Python调用代码示例。该接口通过提供权威、即时的学历数据核验服务,帮助企业在招聘、背调和风控等场景中有效防范履历造假风险。开发者可以参照本文档和代码示例,快速将其集成到现有的HRM、CRM或风控系统中,提升业务处理的自动化水平和数据准确性。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。