You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现苹果产品查询API结果存库及最近搜索展示的方案咨询

PHP实现苹果设备查询缓存+最近搜索功能(开箱即用代码)

1. 先创建MySQL数据表

直接执行以下SQL建表,字段完全适配你给出的API返回结构:

CREATE TABLE `apple_device_records` (
  `id` int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  `serial_number` varchar(50) NOT NULL UNIQUE COMMENT '设备序列号',
  `model` varchar(255) NOT NULL COMMENT '设备型号',
  `activation_status` varchar(20) NOT NULL COMMENT '激活状态',
  `warranty_status` varchar(100) NOT NULL COMMENT '保修状态',
  `coverage_start_date` varchar(50) DEFAULT NULL COMMENT '保修开始日期',
  `estimated_purchase_date` varchar(50) DEFAULT NULL COMMENT '预估购买日期',
  `telephone_support_status` varchar(20) DEFAULT NULL COMMENT '电话技术支持状态',
  `repair_coverage_status` varchar(20) DEFAULT NULL COMMENT '维修服务状态',
  `repair_coverage_expire_date` varchar(50) DEFAULT NULL COMMENT '维修服务到期日期',
  `repair_coverage_expire_days` int DEFAULT NULL COMMENT '维修服务剩余天数',
  `applecare_eligible` varchar(10) DEFAULT NULL COMMENT '是否符合AppleCare资格',
  `valid_purchase_date` varchar(10) DEFAULT NULL COMMENT '购买日期是否有效',
  `registered_device` varchar(10) DEFAULT NULL COMMENT '是否为已注册设备',
  `replaced_by_apple` varchar(10) DEFAULT NULL COMMENT '是否为苹果替换设备',
  `is_loaner_device` varchar(10) DEFAULT NULL COMMENT '是否为借出设备',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '查询时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='苹果设备查询缓存表';

2. 核心PHP代码(原生写法,无框架依赖)

修改配置后即可直接使用,已经做了基础的SQL注入防护,避免重复调用付费API:

<?php
// 数据库配置,改成自己的实际信息
$dbHost = '127.0.0.1';
$dbName = '你的数据库名';
$dbUser = '数据库用户名';
$dbPass = '数据库密码';

// 初始化PDO数据库连接
try {
    $pdo = new PDO("mysql:host=$dbHost;dbname=$dbName;charset=utf8mb4", $dbUser, $dbPass);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("数据库连接失败:" . $e->getMessage());
}

/**
 * 从本地数据库查询设备信息
 * @param string $serial 序列号
 * @return array|false 查到返回设备数组,没查到返回false
 */
function getDeviceInfoFromDB(string $serial)
{
    global $pdo;
    $stmt = $pdo->prepare("SELECT * FROM apple_device_records WHERE serial_number = ?");
    $stmt->execute([$serial]);
    return $stmt->fetch(PDO::FETCH_ASSOC);
}

/**
 * 调用第三方付费API查询设备信息
 * @param string $serial 序列号
 * @return array|false 查询成功返回解析后的数组,失败返回false
 */
function getDeviceInfoFromApi(string $serial)
{
    // 这里替换成你自己的API请求代码,示例用curl请求
    $apiUrl = "你的API接口地址?serial=" . urlencode($serial);
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $apiUrl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $apiResult = curl_exec($ch);
    curl_close($ch);
    
    if (!$apiResult) return false;
    
    // 适配你给出的API返回格式,自动解析键值对
    $data = [];
    $lines = explode("\n", trim($apiResult));
    foreach ($lines as $line) {
        $line = trim($line);
        if (empty($line) || strpos($line, ':') === false) continue;
        list($key, $value) = explode(':', $line, 2);
        $data[trim($key)] = trim($value);
    }
    
    // 校验必要字段
    if (empty($data['Serial Number'])) return false;
    return $data;
}

/**
 * 把API返回的设备信息存入本地数据库
 * @param array $apiData 解析后的API返回数据
 * @return bool 存储成功返回true
 */
function saveDeviceInfoToDB(array $apiData)
{
    global $pdo;
    $stmt = $pdo->prepare("INSERT INTO apple_device_records (
        serial_number, model, activation_status, warranty_status, 
        coverage_start_date, estimated_purchase_date, telephone_support_status,
        repair_coverage_status, repair_coverage_expire_date, repair_coverage_expire_days,
        applecare_eligible, valid_purchase_date, registered_device, replaced_by_apple, is_loaner_device
    ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
    
    return $stmt->execute([
        $apiData['Serial Number'],
        $apiData['Model'] ?? '',
        $apiData['Activation Status'] ?? '',
        $apiData['Warranty Status'] ?? '',
        $apiData['Coverage Start Date'] ?? '',
        $apiData['Estimated Purchase Date'] ?? '',
        $apiData['Telephone Technical Support'] ?? '',
        $apiData['Repairs and Service Coverage'] ?? '',
        $apiData['Repairs and Service Expiration Date'] ?? '',
        intval($apiData['Repairs and Service Expires In'] ?? 0),
        $apiData['AppleCare Eligible'] ?? '',
        $apiData['Valid Purchase Date'] ?? '',
        $apiData['Registered Device'] ?? '',
        $apiData['Replaced by Apple'] ?? '',
        $apiData['Loaner Device'] ?? ''
    ]);
}

/**
 * 获取最近搜索记录
 * @param int $limit 最多返回条数
 * @return array 最近搜索列表
 */
function getRecentSearches(int $limit = 20)
{
    global $pdo;
    $stmt = $pdo->prepare("SELECT * FROM apple_device_records ORDER BY created_at DESC LIMIT ?");
    $stmt->bindValue(1, $limit, PDO::PARAM_INT);
    $stmt->execute();
    return $stmt->fetchAll(PDO::FETCH_ASSOC);
}

// -------------------------- 业务逻辑使用示例 --------------------------
// 处理前端提交的查询请求
if (!empty($_POST['serial'])) {
    $serial = trim($_POST['serial']);
    // 优先查本地缓存,避免重复调用付费API
    $deviceInfo = getDeviceInfoFromDB($serial);
    if (!$deviceInfo) {
        // 本地无缓存,调用API查询
        $apiData = getDeviceInfoFromApi($serial);
        if ($apiData) {
            saveDeviceInfoToDB($apiData);
            $deviceInfo = getDeviceInfoFromDB($serial);
        } else {
            echo "查询失败,请检查序列号是否正确";
            exit;
        }
    }
    // 此处输出设备信息到前端页面即可
    print_r($deviceInfo);
}

// 获取最近15条搜索记录,在「最近搜索」标签下输出即可
$recentSearchList = getRecentSearches(15);
// print_r($recentSearchList);
?>

3. 注意事项

  • 序列号加了唯一索引,同一个序列号只会调用一次API,不会重复扣费
  • 最近搜索默认按查询时间倒序排序,返回条数可以自行修改getRecentSearches的入参
  • 不需要额外依赖,PHP环境开启curl、pdo_mysql扩展即可正常运行

内容的提问来源于stack exchange,提问作者ghilliedup

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 06:57:02