first commit
This commit is contained in:
134
public/examples/nodejs/demo.js
Normal file
134
public/examples/nodejs/demo.js
Normal file
@@ -0,0 +1,134 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
const crypto = require("crypto");
|
||||
|
||||
// ==================== API配置 ====================
|
||||
const ACCESS_ID = "XXXXXXXXX"; // 替换为您的ACCESS_ID
|
||||
const APP_SECRET = "XXXXXXXXXXXXXXXXXXXXXXX"; // 替换为您的app_secret
|
||||
const BASE_URL = 'https://api.tianyuanapi.com';
|
||||
|
||||
// ==================== 测试参数 ====================
|
||||
const API_CODE = "FLXG0V4B"; // 替换为您的API编号
|
||||
|
||||
const PARAMS = {
|
||||
"name": "XXXX",
|
||||
"id_card": "XXXXXXXXXXXXXXX",
|
||||
"auth_date": "20250722-20250923"
|
||||
};
|
||||
|
||||
// ==================== 加密解密函数 ====================
|
||||
function encrypt_data(data) {
|
||||
const key = Buffer.from(APP_SECRET, "hex");
|
||||
const iv = crypto.randomBytes(16);
|
||||
const cipher = crypto.createCipheriv("aes-128-cbc", key, iv);
|
||||
cipher.setAutoPadding(true);
|
||||
let encrypted = cipher.update(data, 'utf8');
|
||||
encrypted = Buffer.concat([iv, encrypted, cipher.final()]);
|
||||
return encrypted.toString("base64");
|
||||
}
|
||||
|
||||
function decrypt_data(encrypted_data) {
|
||||
const key = Buffer.from(APP_SECRET, "hex");
|
||||
const encryptedBuffer = Buffer.from(encrypted_data, "base64");
|
||||
const iv = encryptedBuffer.slice(0, 16);
|
||||
const ciphertext = encryptedBuffer.slice(16);
|
||||
const decipher = crypto.createDecipheriv("aes-128-cbc", key, iv);
|
||||
decipher.setAutoPadding(true);
|
||||
let decrypted = decipher.update(ciphertext);
|
||||
decrypted = Buffer.concat([decrypted, decipher.final()]);
|
||||
return decrypted.toString('utf8');
|
||||
}
|
||||
|
||||
// ==================== 主测试函数 ====================
|
||||
async function test_api() {
|
||||
try {
|
||||
console.log(`=== 测试API: ${API_CODE} ===`);
|
||||
console.log(`请求参数: ${JSON.stringify(PARAMS, null, 2)}`);
|
||||
|
||||
// 加密参数
|
||||
const params_json = JSON.stringify(PARAMS);
|
||||
const encrypted_data = encrypt_data(params_json);
|
||||
|
||||
// 构建请求
|
||||
const headers = {
|
||||
'Content-Type': 'application/json',
|
||||
'Access-Id': ACCESS_ID
|
||||
};
|
||||
|
||||
const url = `${BASE_URL}/api/v1/${API_CODE}`;
|
||||
const request_data = { 'data': encrypted_data, 'options': { 'json': true } };
|
||||
|
||||
console.log(`请求URL: ${url}`);
|
||||
console.log(`请求头: ${JSON.stringify(headers, null, 2)}`);
|
||||
|
||||
// 发送请求
|
||||
const start_time = Date.now();
|
||||
const response = await fetch(url, {
|
||||
method: 'POST',
|
||||
headers: headers,
|
||||
body: JSON.stringify(request_data),
|
||||
signal: AbortSignal.timeout(30000) // 30秒超时
|
||||
});
|
||||
const elapsed_time = Date.now() - start_time;
|
||||
|
||||
console.log(`\n=== 响应信息 ===`);
|
||||
console.log(`状态码: ${response.status}`);
|
||||
console.log(`耗时: ${elapsed_time}ms`);
|
||||
|
||||
if (response.status !== 200) {
|
||||
console.log(`请求失败: ${response.status} ${response.statusText}`);
|
||||
return;
|
||||
}
|
||||
|
||||
// 解析响应
|
||||
try {
|
||||
const response_json = await response.json();
|
||||
console.log(`原始响应: ${JSON.stringify(response_json, null, 2)}`);
|
||||
|
||||
// 检查响应格式
|
||||
if (!('code' in response_json)) {
|
||||
console.log("直接返回业务数据");
|
||||
return;
|
||||
}
|
||||
|
||||
// 标准格式处理
|
||||
const api_code = response_json.code;
|
||||
const api_message = response_json.message || '';
|
||||
const encrypted_response = response_json.data || '';
|
||||
|
||||
console.log(`API响应码: ${api_code}`);
|
||||
console.log(`API消息: ${api_message}`);
|
||||
|
||||
if (api_code !== 0) {
|
||||
console.log(`API错误: ${api_message}`);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!encrypted_response) {
|
||||
console.log("无加密数据返回");
|
||||
return;
|
||||
}
|
||||
|
||||
// 解密数据
|
||||
try {
|
||||
const decrypted_data = decrypt_data(encrypted_response);
|
||||
const result_data = JSON.parse(decrypted_data);
|
||||
|
||||
console.log(`\n=== 解密后的数据 ===`);
|
||||
console.log(JSON.stringify(result_data, null, 2));
|
||||
|
||||
} catch (e) {
|
||||
console.log(`解密失败: ${e.message}`);
|
||||
}
|
||||
|
||||
} catch (e) {
|
||||
console.log(`响应不是JSON格式: ${e.message}`);
|
||||
}
|
||||
|
||||
} catch (e) {
|
||||
console.log(`测试异常: ${e.message}`);
|
||||
}
|
||||
}
|
||||
|
||||
// 运行测试
|
||||
test_api();
|
||||
Reference in New Issue
Block a user