f
This commit is contained in:
131
public/examples/nodejs/demo.js
Normal file
131
public/examples/nodejs/demo.js
Normal file
@@ -0,0 +1,131 @@
|
||||
#!/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.haiyudata.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