From 36d26c70531604cb671a8a5349e4c11c470660b4 Mon Sep 17 00:00:00 2001 From: hawklin2017 <32898629+hawklin2017@users.noreply.github.com> Date: Tue, 7 Apr 2026 21:39:47 +0800 Subject: [PATCH] =?UTF-8?q?sn=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/phone_sn_api.sh | 104 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100755 scripts/phone_sn_api.sh diff --git a/scripts/phone_sn_api.sh b/scripts/phone_sn_api.sh new file mode 100755 index 000000000..2dd3c5760 --- /dev/null +++ b/scripts/phone_sn_api.sh @@ -0,0 +1,104 @@ +#!/usr/bin/env bash +set -euo pipefail + +# 测试 open-im-server 手机号 is_snd 接口(/phone/get_sn_info、/phone/set_sn_info) +# +# 用法: +# 查询(无需 token,已加入 GinParseToken 白名单): +# ./scripts/phone_sn_api.sh get +# +# 写入(需要用户 token): +# OPENIM_TOKEN="<用户 token>" ./scripts/phone_sn_api.sh set +# +# 环境变量(可覆盖): +# OPENIM_API_ADDR 默认 http://127.0.0.1:10002 +# OPENIM_TOKEN set 时必填(Header: token) +# OPERATION_ID 默认自动生成 + +OPENIM_API_ADDR="${OPENIM_API_ADDR:-http://127.0.0.1:10002}" +OPENIM_TOKEN="${OPENIM_TOKEN:-}" +OPERATION_ID="${OPERATION_ID:-phone_sn_$(date +%s)_$RANDOM}" + +ACTION="${1:-}" +PHONE="${2:-}" +USER_ID="${3:-}" +IS_SND_RAW="${4:-}" + +die() { + echo "ERROR: $*" >&2 + exit 1 +} + +usage() { + cat <<'EOF' +用法: + 查询(无需 token): + ./scripts/phone_sn_api.sh get + + 写入(需要 OPENIM_TOKEN): + OPENIM_TOKEN="<用户token>" ./scripts/phone_sn_api.sh set + +环境变量: + OPENIM_API_ADDR 默认 http://127.0.0.1:10002 + OPENIM_TOKEN set 时必填 + OPERATION_ID 可选,默认自动生成 +EOF +} + +curl_post() { + local path=$1 + local json_body=$2 + local with_token=${3:-0} + local -a hdrs=( + -H "Content-Type: application/json" + -H "operationID: ${OPERATION_ID}" + ) + if [[ "$with_token" == "1" ]]; then + [[ -n "$OPENIM_TOKEN" ]] || die "set 接口需要环境变量 OPENIM_TOKEN(用户 token)" + hdrs+=(-H "token: ${OPENIM_TOKEN}") + fi + curl -sS "${hdrs[@]}" -X POST "${OPENIM_API_ADDR}${path}" -d "${json_body}" +} + +pretty_json() { + if command -v jq >/dev/null 2>&1; then + jq . + else + cat + fi +} + +case "$ACTION" in + get) + [[ -n "$PHONE" ]] || die "用法: $0 get " + body=$(printf '{"phone":"%s"}' "$PHONE") + echo "==> POST ${OPENIM_API_ADDR}/phone/get_sn_info" + echo " body: ${body}" + resp=$(curl_post "/phone/get_sn_info" "$body" 0) + echo "$resp" | pretty_json + ;; + set) + [[ -n "$PHONE" && -n "$USER_ID" && -n "$IS_SND_RAW" ]] || die "用法: $0 set " + case "$IS_SND_RAW" in + 1|true|True|TRUE) is_snd=true ;; + 0|false|False|FALSE) is_snd=false ;; + *) die "is_snd 必须是 0、1、true 或 false" ;; + esac + # userID 必须为 JSON 数字 + if ! [[ "$USER_ID" =~ ^-?[0-9]+$ ]]; then + die "userID 必须为整数" + fi + body=$(printf '{"phone":"%s","userID":%s,"is_snd":%s}' "$PHONE" "$USER_ID" "$is_snd") + echo "==> POST ${OPENIM_API_ADDR}/phone/set_sn_info" + echo " body: ${body}" + resp=$(curl_post "/phone/set_sn_info" "$body" 1) + echo "$resp" | pretty_json + ;; + ""|-h|--help|help) + usage + exit 0 + ;; + *) + die "未知动作: $ACTION,使用 -h 查看帮助" + ;; +esac