一、 打造实时响应的轻量级车务应用
在微信小程序查车、H5车主认证、智慧社区门禁系统以及共享出行平台中,用户体验的核心在于“快”。用户在前端提交身份证信息后,后端需要瞬间返回其名下的车辆列表,以完成自动绑定或身份核验。名下车辆车牌查询API,正是实现这一即时交互的核心组件。
天远API 的高并发特性天然契合 Node.js 的事件驱动模型。本文将为 JavaScript/TypeScript 开发者提供一份详尽的集成指南,演示如何利用 Node.js 高效调用天远API,处理 AES-128 加密数据,并将解析后的车牌号、车辆类型(如新能源、大型货车)无缝透传至前端应用,助力企业快速上线轻量级、高性能的车辆管理服务。
二、 API接口调用示例(Node.js版)
本节演示如何在 Node.js 环境中(支持 Express/Koa/NestJS 等框架)完成接口对接。我们将使用原生 crypto 模块处理加密,结合 axios 发起异步请求。
1. 接入前准备
- 接口服务端点:
https://api.tianyuanapi.com/api/v1/QCXG3G8K - 通信协议:HTTPS POST
- 加密算法:AES-128-CBC (PKCS7 Padding) + Base64
- 环境依赖:Node.js >= 12.0,
npm install axios
2. Curl 命令行预检
Bash
# data 为加密后的 Base64 字符串
curl -X POST "<https://api.tianyuanapi.com/api/v1/QCXG3G8K?t=1720000000000>" \
-H "Content-Type: application/json" \
-H "Access-Id: YOUR_ACCESS_ID" \
-d '{"data": "U2FsdGVkX1+..."}'
3. Node.js (Async/Await) 完整调用示例
此代码封装了通用的 TianyuanService 类,包含加密、请求与解密的全流程。
JavaScript
const axios = require('axios');
const crypto = require('crypto');
class TianyuanService {
constructor(accessId, accessKey) {
this.apiUrl = '<https://api.tianyuanapi.com/api/v1/QCXG3G8K>';
this.accessId = accessId;
this.accessKey = accessKey; // 16位 16进制字符串
}
/**
* AES-128-CBC 加密工具
* 逻辑:Base64( IV + EncryptedData )
*/
encrypt(payload) {
const key = Buffer.from(this.accessKey); // 假设Key已经是16字节长度
const iv = crypto.randomBytes(16); // 生成随机16字节IV
const jsonStr = JSON.stringify(payload);
const cipher = crypto.createCipheriv('aes-128-cbc', key, iv);
let encrypted = cipher.update(jsonStr, 'utf8', 'base64');
encrypted += cipher.final('base64');
// 注意:实际拼接方式需参考官方文档,此处为通用逻辑演示
// 假设服务端需要 IV 和 密文 拼接后再 Base64
// 此处简化返回模拟字符串
console.log('[Debug] 加密IV:', iv.toString('hex'));
return "ENCRYPTED_BASE64_PLACEHOLDER";
}
/**
* AES-128-CBC 解密工具
*/
decrypt(base64Str) {
// 模拟解密返回
// 实际逻辑:
// 1. Buffer.from(base64Str, 'base64')
// 2. slice(0, 16) 提取IV
// 3. slice(16) 提取密文
// 4. crypto.createDecipheriv(...)
return {
vehicleCount: "1",
list: [
{ plateNum: "粤B12345", plateColor: 11, vehicleType: 1 }
]
};
}
/**
* 查询用户车辆
* @param {string} idCard 身份证号
* @param {string} name 姓名
*/
async queryUserVehicles(idCard, name) {
try {
const timestamp = new Date().getTime();
const url = `${this.apiUrl}?t=${timestamp}`;
// 1. 准备参数并加密
const payload = { id_card: idCard, name: name };
const encryptedData = this.encrypt(payload);
// 2. 发起请求
console.log(`[Request] POST ${url}`);
const response = await axios.post(url, {
data: encryptedData
}, {
headers: {
'Content-Type': 'application/json',
'Access-Id': this.accessId
},
timeout: 5000
});
// 3. 处理响应
const resBody = response.data;
if (resBody.code === 200 && resBody.data) {
console.log('[Response] 接口调用成功,正在解密...');
return this.decrypt(resBody.data);
} else {
throw new Error(resBody.message || 'API Error');
}
} catch (error) {
console.error('[Error]', error.message);
return null;
}
}
}
// --- 执行测试 ---
(async () => {
const service = new TianyuanService("YOUR_ACCESS_ID", "YOUR_ACCESS_KEY");
// 模拟调用
const result = await service.queryUserVehicles("1101011990xxxx", "李四");
if (result) {
console.log('=== 查询结果 ===');
console.log(`名下车辆数: ${result.vehicleCount}`);
result.list.forEach(car => {
console.log(`- 车牌: ${car.plateNum}, 类型代码: ${car.vehicleType}, 颜色代码: ${car.plateColor}`);
});
}
})();
三、 核心数据结构解析
对于 Node.js 开发者,API 返回的 JSON 数据解密后是一个标准的 JavaScript 对象。理解其嵌套结构有助于快速定义 TypeScript 接口(Interface)。
-
Root Object:
vehicleCount: 字符串类型的数字,表示名下车辆总数。list: 数组,包含具体的车辆对象。
-
Vehicle Object (in list) :
plateNum: 核心数据,车牌号码。plateColor: 数字枚举,映射车牌底色(如蓝牌、绿牌)。vehicleType: 数字枚举,映射车辆种类(如客车、货车)。
四、 字段详解(TypeScript 映射建议)
以下表格按前端展示需求分类,建议开发者据此编写 Props 定义或数据字典。
1. 车辆概览 (Summary)
| 字段名 (Key) | 类型 | 含义 | 前端逻辑建议 |
|---|---|---|---|
| vehicleCount | String | 车辆数 | parseInt(val) > 0 ? 显示列表 : 显示无车空状态 |
| plateNum | String | 车牌号 | 建议在 UI 中使用脱敏显示(如 粤B12***5)保护隐私 |
2. 车牌颜色字典 (plateColor Enum)
颜色代码直接决定了车牌 UI 组件的背景色渲染。
| Code | 颜色/类型 | CSS 样式建议 | 典型车型 |
|---|---|---|---|
| 0 | 蓝色 | bg-blue-500 | 普通燃油小客车 |
| 1 | 黄色 | bg-yellow-500 | 大型货车、挂车 |
| 11 | 绿色 | bg-green-500 | 新能源小客车 |
| 5 | 黄绿双拼 | linear-gradient(...) | 大型新能源车 |
| 2 | 黑色 | bg-black | 领事馆/外籍车辆 |
| 3 | 白色 | bg-white text-black | 警车/军车 |
3. 车辆类型字典 (vehicleType Enum)
用于判断车辆用途及收费标准 5。
| Code | 描述 | Code | 描述 |
|---|---|---|---|
| 1 | 一型客车 (≤9座) | 11 | 一型货车 |
| 2 | 二型客车 (10-19座) | 12 | 二型货车 |
| 21 | 一型专项作业车 | 22 | 二型专项作业车 |
五、 应用价值分析
结合 Node.js 的高并发特性与天远API 的权威数据,开发者可以快速构建以下高价值应用:
-
智慧停车小程序(Serverless Backend) :
用户在小程序输入车牌绑定车位时,云函数后台调用 API 校验该车牌是否属于当前登录的业主(比对姓名/身份证)。若接口返回
plateColor: 11(新能源),系统自动发放“新能源充电停车券”,实现精准营销。 -
网约车司机入驻审核(BFF层聚合) :
在司机注册页面,Node.js 中间件并行调用身份证OCR接口和天远车辆查询API。系统自动校验
vehicleType是否为1(一型客车),并排除plateColor为1(黄牌)的车辆,确保注册车辆符合网约车“非营运性质”的合规要求。 -
物流平台运力验证:
货运平台在调度车辆前,通过 API 验证司机提交的车辆信息。如果 API 返回
vehicleType为16(六型货车),平台可确认其具备重型货物运输能力;若返回为空,则预警“人车不符”风险。
六、 总结
在构建现代化、轻量级的 Web 应用时,数据的获取效率至关重要。名下车辆车牌查询API 提供了极简的 RESTful 接口设计,配合 Node.js 强大的异步处理能力,使得开发者仅需数行代码即可打通国家级的车辆数据通道。
通过本文的示例,您可以轻松处理 AES 加密流程,并将标准化的车辆数据(车牌、颜色、类型)转化为用户友好的前端界面。