72 lines
2.3 KiB
PHP
72 lines
2.3 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
header('Content-Type: application/json; charset=utf-8');
|
|
header('Cache-Control: no-store');
|
|
|
|
require __DIR__ . '/im_web_bootstrap.php';
|
|
|
|
$payload = readJsonPayload();
|
|
$userId = trim((string)($payload['userId'] ?? $_GET['userId'] ?? ''));
|
|
if ($userId === '') {
|
|
respond(400, '缺少用户ID');
|
|
}
|
|
|
|
try {
|
|
$friendResult = requireImSuccess(
|
|
imAdminPost('/admin/friend/list', ['userId' => $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() ?: '联系人服务暂不可用');
|
|
}
|