#!/usr/bin/env bash set -euo pipefail # ====== 按需修改 ====== API_BASE="${API_BASE:-http://127.0.0.1:10002}" # 你的 open-im-api 地址 SELF_USER_ID="${SELF_USER_ID:-5694418935}" # 当前登录用户(拿 token 的用户) #FRIEND_USER_ID="${FRIEND_USER_ID:-1971806090}" # 要查询共同群的好友 FRIEND_USER_ID="${FRIEND_USER_ID:-1011009748}" # 要查询共同群的好友 PLATFORM_ID="${PLATFORM_ID:-2}" # 1=iOS, 2=Android, 3=Windows... ADMIN_USER_ID="${ADMIN_USER_ID:-imAdmin}" # 管理员账号(用于签发用户 token) ADMIN_SECRET="${ADMIN_SECRET:-openIM123}" # 配置中的 share.secret DEBUG="${DEBUG:-1}" # DEBUG=1 打印请求/响应明细 # RecordNotFoundError(errCode=1004)常见于 get_user_token: # 服务端会查用户是否存在(user RPC GetDesignateUsers);若 SELF_USER_ID 未注册, # 返回空列表后 rpcli.firstValue 会包装为 ErrRecordNotFound(errDlt: record not found)。 # 处理:先注册该用户,或 export SELF_USER_ID=已存在用户,或 export TOKEN=已有用户 token 跳过拉 token。 # # HTTP 404 + 响应体 "404 page not found"(Gin):当前连上的 API 进程路由表里没有该路径。 # 本仓库已注册 POST /group/get_common_groups_with_friend(见 internal/api/router.go)。 # 处理:用当前代码重新编译/替换镜像并重启 openim-api,或确认 API_BASE 指向的就是带该路由的实例(无错误路径前缀/反代截断)。 # ===================== debug_log() { if [[ "${DEBUG}" == "1" ]]; then echo "[DEBUG] $*" fi } print_json_safe() { local raw="${1:-}" if echo "${raw}" | jq -e . >/dev/null 2>&1; then echo "${raw}" | jq . else echo "${raw}" fi } # 1) 先拿 user token(如果你已有 token,可跳过这一步,直接 export TOKEN=xxx) if [[ -z "${TOKEN:-}" ]]; then if [[ -z "${ADMIN_SECRET}" ]]; then echo "缺少 ADMIN_SECRET,请先导出:export ADMIN_SECRET='你的share.secret'" exit 1 fi echo "获取管理员 token: ${ADMIN_USER_ID}" OP_ID_ADMIN="op_admin_$(date +%s)" debug_log "POST ${API_BASE}/auth/get_admin_token" debug_log "operationID: ${OP_ID_ADMIN}" debug_log "admin req body: {\"userID\":\"${ADMIN_USER_ID}\",\"secret\":\"***\"}" ADMIN_RESP=$( curl -sS -X POST "${API_BASE}/auth/get_admin_token" \ -H 'Content-Type: application/json' \ -H "operationID: ${OP_ID_ADMIN}" \ -d "$(cat <}" if [[ -z "${ADMIN_TOKEN}" ]]; then echo "获取管理员 token 失败,响应如下:" print_json_safe "${ADMIN_RESP}" exit 1 fi echo "获取用户 token: ${SELF_USER_ID}" OP_ID_USER="op_user_$(date +%s)" debug_log "POST ${API_BASE}/auth/get_user_token" debug_log "operationID: ${OP_ID_USER}" debug_log "user req body: {\"userID\":\"${SELF_USER_ID}\",\"platformID\":${PLATFORM_ID}}" USER_RESP=$( curl -sS -X POST "${API_BASE}/auth/get_user_token" \ -H 'Content-Type: application/json' \ -H "operationID: ${OP_ID_USER}" \ -H "token: ${ADMIN_TOKEN}" \ -d "$(cat <}" fi if [[ -z "${TOKEN}" ]]; then echo "获取用户 token 失败,响应如下:" print_json_safe "${USER_RESP:-}" USER_ERR_CODE="$(echo "${USER_RESP:-}" | jq -r '.errCode // empty')" if [[ "${USER_ERR_CODE}" == "1004" ]]; then echo "" echo "【排查】errCode 1004 (RecordNotFoundError):当前请求的 userID 在用户库中不存在。" echo " - 服务端路径:auth GetUserToken → user GetDesignateUsers → 未命中则空结果 → record not found" echo " - 请先将 SELF_USER_ID=${SELF_USER_ID} 注册进系统,或改用已存在用户,或: export TOKEN='你的用户token'" else echo "提示:请确认 SELF_USER_ID 已注册、ADMIN_SECRET 与部署一致,或手动 export TOKEN 后重试。" fi exit 1 fi OP_ID="op_$(date +%s)" # 2) 调共同群接口 echo "查询共同群: self=${SELF_USER_ID}, friend=${FRIEND_USER_ID}" REQ_BODY="$(cat <