'20261101123045']; $wxResult = $parseTime($wxData); assert($wxResult === '2026-11-01 12:30:45', "微信时间解析不匹配: $wxResult"); // 支付宝格式 $aliData = ['gmt_payment' => '2026-11-01 12:30:45']; $aliResult = $parseTime($aliData); assert($aliResult === '2026-11-01 12:30:45', "支付宝时间解析不匹配: $aliResult"); // 缺少字段回退当前时间 $emptyData = []; $emptyResult = $parseTime($emptyData); assert(strlen($emptyResult) === 19, "回退当前时间格式不正确"); echo "[PASS] 测试 1 通过: 微信/支付宝通知时间解析完全兼容且防御健壮\n"; } /** * 测试 2: 内存中省市区树形高效组装与结构兼容性测试 */ public static function testAreaTreeAssembly() { // 模拟平铺的 Area 数据集 $mockAreas = [ ['id' => 1, 'value' => 1, 'label' => '北京市', 'pid' => 0, 'level' => 1], ['id' => 2, 'value' => 2, 'label' => '市辖区', 'pid' => 1, 'level' => 2], ['id' => 3, 'value' => 3, 'label' => '东城区', 'pid' => 2, 'level' => 3], ['id' => 4, 'value' => 4, 'label' => '西城区', 'pid' => 2, 'level' => 3], ]; $provinceList = []; $cityMap = []; $areaMap = []; foreach ($mockAreas as $item) { if ($item['level'] == 1) { $provinceList[] = $item; } elseif ($item['level'] == 2) { $cityMap[$item['pid']][] = $item; } elseif ($item['level'] == 3) { $areaMap[$item['pid']][] = $item; } } $provinceData = $provinceList; $cityData = []; $areaData = []; foreach ($provinceData as $k => $p) { $cities = $cityMap[$p['value']] ?? []; $cityData[$k] = $cities; foreach ($cities as $i => $c) { $areaData[$k][$i] = $areaMap[$c['value']] ?? []; } } assert(count($provinceData) === 1, "省级数量不符"); assert($provinceData[0]['label'] === '北京市', "省级名称不符"); assert(count($cityData[0]) === 1, "市级数量不符"); assert($cityData[0][0]['label'] === '市辖区', "市级名称不符"); assert(count($areaData[0][0]) === 2, "区县级数量不符"); assert($areaData[0][0][0]['label'] === '东城区', "区级名称不符"); echo "[PASS] 测试 2 通过: 内存单次查询树形组装算法与原生三层结构 100% 兼容\n"; } /** * 测试 3: 用户地址防御校验逻辑测试(防 IDOR 越权与防空指针) */ public static function testUserAddressDefenseLogic() { // 模拟检查逻辑:更新与删除必须带 user_id 严格归属匹配 $currentUserId = 10001; $mockDbAddresses = [ 10 => ['id' => 10, 'user_id' => 10001, 'name' => '张三'], 20 => ['id' => 20, 'user_id' => 10002, 'name' => '李四'], ]; // 尝试越权更新李四的地址(ID=20) $checkUpdate = function ($id, $userId) use ($mockDbAddresses) { $record = $mockDbAddresses[$id] ?? null; if (!$record || $record['user_id'] != $userId) { return false; // 拦截成功 } return true; }; assert($checkUpdate(10, $currentUserId) === true, "合法用户更新自己的地址应允许"); assert($checkUpdate(20, $currentUserId) === false, "用户尝试更新他人地址已被拦截"); assert($checkUpdate(99, $currentUserId) === false, "更新不存在的地址应被安全拦截"); echo "[PASS] 测试 3 通过: 用户收货地址防 IDOR 越权及空指针防御逻辑有效\n"; } } if (php_sapi_name() === 'cli' && basename(__FILE__) === basename($_SERVER['SCRIPT_FILENAME'] ?? '')) { StabilityFixTest::run(); }