$userId]), '联系人加载失败' ); $friendIds = array_values(array_unique(array_filter(array_map(static function ($uid): string { return trim((string)$uid); }, $friendResult['list'] ?? [])))); if (!$friendIds) { respond(0, 'success', ['contacts' => []]); } $usersResult = requireImSuccess( imAdminPost('/admin/user/batch_get_infos', ['list' => $friendIds]), '联系人资料加载失败' ); try { ensureWebImAppTables(); $remarkMap = fetchWebUserRemarkMap(imAppDb(), $userId, $friendIds); } catch (Throwable) { $remarkMap = []; } $contactsByUid = []; foreach (array_values(array_filter($usersResult['userInfos'] ?? [], 'is_array')) as $user) { $uid = (string)($user['userId'] ?? ''); if ($uid === '' || isset($contactsByUid[$uid])) { continue; } $alias = ''; try { $aliasResult = requireImSuccess( imAdminPost('/admin/friend/get_alias', ['operator' => $userId, 'targetId' => $uid]), '联系人备注加载失败' ); $alias = trim((string)($aliasResult['alias'] ?? '')); } catch (Throwable $error) { $alias = ''; } if ($alias === '') { $alias = $remarkMap[$uid] ?? ''; } $contactsByUid[$uid] = [ 'uid' => $uid, 'name' => (string)($user['name'] ?? $uid), 'displayName' => (string)($user['displayName'] ?? $user['name'] ?? $uid), 'mobile' => (string)($user['mobile'] ?? ''), 'portrait' => (string)($user['portrait'] ?? ''), 'address' => (string)($user['address'] ?? ''), 'alias' => $alias, ]; } respond(0, 'success', ['contacts' => array_values($contactsByUid)]); } catch (Throwable $error) { respond(500, $error->getMessage() ?: '联系人服务暂不可用'); }