Files
jj2/utils/ApiBase.php
LL 0cfefbebd8 feat: 添加基金监控系统基础功能
添加基金监控系统相关文件,包括邮件发送功能、基金数据配置、测试脚本等。主要包含以下内容:

1. 添加PHPMailer库及相关语言文件
2. 添加基金配置数据文件(fund_config.json, fund_names.json等)
3. 添加邮件发送测试脚本(test_email.php, test_fund_email.php等)
4. 添加.gitignore文件忽略不必要的文件
5. 添加composer.json配置依赖

Signed-off-by: LL <LL>
2025-12-12 14:14:07 +08:00

144 lines
4.2 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* API基类
* 提供API请求处理的通用功能减少代码重复
*/
class ApiBase {
/**
* 解析请求参数
* @return array 包含action和其他参数的数组
*/
protected function parseRequest() {
$method = $_SERVER['REQUEST_METHOD'] ?? 'GET';
$params = [];
$action = '';
// 解析GET参数
$queryString = $_SERVER['QUERY_STRING'] ?? '';
parse_str($queryString, $params);
$action = $params['action'] ?? '';
// 解析POST数据
if ($method === 'POST') {
$input = file_get_contents('php://input');
$postData = json_decode($input, true);
// 如果POST数据是有效的JSON合并到params中
if (json_last_error() === JSON_ERROR_NONE && is_array($postData)) {
$params = array_merge($params, $postData);
$action = $postData['action'] ?? $action;
}
}
return [
'method' => $method,
'action' => $action,
'params' => $params
];
}
/**
* 发送JSON响应
* @param mixed $data 要发送的数据
* @param int $statusCode HTTP状态码默认200
*/
protected function sendResponse($data, $statusCode = 200) {
http_response_code($statusCode);
echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
}
/**
* 发送错误响应
* @param string $message 错误信息
* @param int $statusCode HTTP状态码默认400
*/
protected function sendError($message, $statusCode = 400) {
$this->sendResponse([
'success' => false,
'message' => $message
], $statusCode);
}
/**
* 发送成功响应
* @param mixed $data 响应数据(默认空数组)
* @param string $message 成功信息(默认空字符串)
*/
protected function sendSuccess($data = [], $message = '') {
$response = [
'success' => true
];
if (!empty($data)) {
$response['data'] = $data;
}
if (!empty($message)) {
$response['message'] = $message;
}
$this->sendResponse($response);
}
/**
* 处理OPTIONS请求
*/
protected function handleOptionsRequest() {
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
exit(0);
}
}
/**
* 记录操作日志
* @param string $action 操作类型
* @param array $data 操作数据
* @param string $logFile 日志文件路径
*/
protected function logOperation($action, $data = [], $logFile = 'data/operation_log.json') {
require_once 'FileManager.php';
// 加载现有日志
$logData = FileManager::loadJsonFile($logFile, ['operations' => []]);
// 添加新日志条目
$logEntry = [
'timestamp' => date('Y-m-d H:i:s'),
'action' => $action,
'data' => $data,
'ip' => $_SERVER['REMOTE_ADDR'] ?? 'unknown'
];
array_unshift($logData['operations'], $logEntry);
// 限制日志数量保留最新的500条
if (count($logData['operations']) > 500) {
$logData['operations'] = array_slice($logData['operations'], 0, 500);
}
// 保存日志
FileManager::saveJsonFile($logFile, $logData);
}
/**
* 获取操作日志
* @param int $limit 日志数量限制默认20
* @param string $logFile 日志文件路径
* @return array 日志数据
*/
protected function getOperationLog($limit = 20, $logFile = 'data/operation_log.json') {
require_once 'FileManager.php';
$logData = FileManager::loadJsonFile($logFile, ['operations' => []]);
$operations = $logData['operations'] ?? [];
// 限制返回的日志数量
if (count($operations) > $limit) {
$operations = array_slice($operations, 0, $limit);
}
return ['success' => true, 'operations' => $operations];
}
}
?>