first commit
This commit is contained in:
176
public/examples/php/demo.php
Normal file
176
public/examples/php/demo.php
Normal file
@@ -0,0 +1,176 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* AES CBC 加密函数,返回 Base64
|
||||
* @param string $plainText 要加密的明文
|
||||
* @param string $key 16进制密钥
|
||||
* @return string 加密后的Base64字符串
|
||||
*/
|
||||
function aesEncrypt($plainText, $key) {
|
||||
// 将16进制的密钥转换为二进制
|
||||
$keyBin = hex2bin($key);
|
||||
|
||||
// 生成随机IV
|
||||
$blockSize = 16; // AES 块大小
|
||||
$iv = openssl_random_pseudo_bytes($blockSize);
|
||||
|
||||
// 加密
|
||||
$encrypted = openssl_encrypt(
|
||||
$plainText,
|
||||
'AES-128-CBC',
|
||||
$keyBin,
|
||||
OPENSSL_RAW_DATA,
|
||||
$iv
|
||||
);
|
||||
|
||||
// 将IV和加密数据拼接后进行Base64编码
|
||||
return base64_encode($iv . $encrypted);
|
||||
}
|
||||
|
||||
/**
|
||||
* AES CBC 解密函数,返回解密后的明文
|
||||
* @param string $encryptedText Base64编码的加密文本
|
||||
* @param string $key 16进制密钥
|
||||
* @return string 解密后的明文
|
||||
*/
|
||||
function aesDecrypt($encryptedText, $key) {
|
||||
// 将16进制的密钥转换为二进制
|
||||
$keyBin = hex2bin($key);
|
||||
|
||||
// 解码Base64
|
||||
$encryptedBin = base64_decode($encryptedText);
|
||||
|
||||
// 提取IV和加密数据
|
||||
$blockSize = 16;
|
||||
$iv = substr($encryptedBin, 0, $blockSize);
|
||||
$encryptedData = substr($encryptedBin, $blockSize);
|
||||
|
||||
// 解密
|
||||
$decrypted = openssl_decrypt(
|
||||
$encryptedData,
|
||||
'AES-128-CBC',
|
||||
$keyBin,
|
||||
OPENSSL_RAW_DATA,
|
||||
$iv
|
||||
);
|
||||
|
||||
return $decrypted;
|
||||
}
|
||||
|
||||
/**
|
||||
* 调用API函数
|
||||
*/
|
||||
function callApi($name, $id_card, $mobile_no, $auth_date) {
|
||||
// API相关配置
|
||||
$interface_name = "XXXXXXXX"; // 接口编号
|
||||
$access_id = "XXXXXXXXXXX";
|
||||
$key = "XXXXXXXXXXXXXXXXXXXXX";
|
||||
$url = "https://api.tianyuanapi.com/api/v1/{$interface_name}";
|
||||
|
||||
// 构建请求参数
|
||||
$params = array(
|
||||
"mobile_no" => $mobile_no,
|
||||
"id_card" => $id_card,
|
||||
"auth_date" => $auth_date,
|
||||
"name" => $name
|
||||
);
|
||||
|
||||
// 将参数转换为JSON字符串并加密
|
||||
$json_str = json_encode($params, JSON_UNESCAPED_UNICODE);
|
||||
echo "请求参数: {$json_str}\n";
|
||||
$encrypted_data = aesEncrypt($json_str, $key);
|
||||
echo "加密后的数据: {$encrypted_data}\n";
|
||||
|
||||
// 发送请求
|
||||
$headers = array(
|
||||
"Access-Id: {$access_id}",
|
||||
"Content-Type: application/json"
|
||||
);
|
||||
|
||||
$payload = array(
|
||||
"data" => $encrypted_data
|
||||
);
|
||||
|
||||
echo "发送请求到: {$url}\n";
|
||||
|
||||
try {
|
||||
// 使用PHP原生HTTP请求方式
|
||||
$context = stream_context_create(array(
|
||||
'http' => array(
|
||||
'method' => 'POST',
|
||||
'header' => implode("\r\n", $headers),
|
||||
'content' => json_encode($payload),
|
||||
'timeout' => 30
|
||||
)
|
||||
));
|
||||
|
||||
$response = file_get_contents($url, false, $context);
|
||||
|
||||
if ($response === false) {
|
||||
throw new Exception("HTTP请求失败");
|
||||
}
|
||||
|
||||
$response_data = json_decode($response, true);
|
||||
echo "API响应: " . json_encode($response_data, JSON_UNESCAPED_UNICODE) . "\n";
|
||||
|
||||
// 处理响应
|
||||
$code = $response_data['code'] ?? null;
|
||||
$message = $response_data['message'] ?? '';
|
||||
$encrypted_response_data = $response_data['data'] ?? '';
|
||||
|
||||
$result = array(
|
||||
"code" => $code,
|
||||
"success" => $code == 0,
|
||||
"message" => $message,
|
||||
"encrypted_response" => $encrypted_response_data
|
||||
);
|
||||
|
||||
// 如果有返回data,尝试解密
|
||||
if ($encrypted_response_data) {
|
||||
try {
|
||||
$decrypted_data = aesDecrypt($encrypted_response_data, $key);
|
||||
$result["decrypted_response"] = json_decode($decrypted_data, true);
|
||||
} catch (Exception $e) {
|
||||
echo "解密响应数据失败: {$e->getMessage()}\n";
|
||||
$result["decrypted_response"] = null;
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
|
||||
} catch (Exception $e) {
|
||||
echo "请求失败: {$e->getMessage()}\n";
|
||||
return array("success" => false, "message" => "请求失败: {$e->getMessage()}");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 主函数
|
||||
*/
|
||||
function main() {
|
||||
echo "===== 个人涉诉详版 =====\n";
|
||||
|
||||
// 直接设置手机号和姓名
|
||||
$name = "XXXXXXXX";
|
||||
$id_card = "XXXXXXXXXXXXX";
|
||||
$mobile_no = "XXXXXXXXXXXXXXXXXXXX";
|
||||
$auth_date = "20250318-20270318";
|
||||
|
||||
$result = callApi($name, $id_card, $mobile_no, $auth_date);
|
||||
|
||||
echo "\n===== 结果 =====\n";
|
||||
if ($result["success"]) {
|
||||
echo "请求成功!\n";
|
||||
if (isset($result["decrypted_response"])) {
|
||||
echo "解密后的响应: " . json_encode($result['decrypted_response'], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) . "\n";
|
||||
} else {
|
||||
echo "未能获取或解密响应数据\n";
|
||||
}
|
||||
} else {
|
||||
echo "请求失败: " . ($result['message'] ?? '未知错误') . "\n";
|
||||
}
|
||||
}
|
||||
|
||||
// 运行主函数
|
||||
main();
|
||||
?>
|
||||
Reference in New Issue
Block a user