Files
workphone-sdk/sdk/scripts/run_wechat_safe_batch_acceptance.sh

66 lines
2.4 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# 微信安全批量验收:仅对白名单测试联系人执行,默认 dry-run。
set -euo pipefail
DEVICE="${SDK_DEVICE_ID:-xgfe65eimrrofyws}"
BASE="${SDK_BASE_URL:-http://127.0.0.1:8899}"
TO_IDS_RAW="${WORKPHONE_TEST_TO_IDS:-}"
CONTENT="${WORKPHONE_TEST_CONTENT:-[工作手机白名单批量验收] $(date +%Y%m%d-%H%M%S)}"
INTERVAL="${WORKPHONE_BATCH_INTERVAL:-65}"
DRY_RUN="${WORKPHONE_DRY_RUN:-1}"
MAX_COUNT="${WORKPHONE_MAX_COUNT:-20}"
if [[ -z "${TO_IDS_RAW}" ]]; then
echo "缺少 WORKPHONE_TEST_TO_IDS。示例"
echo " WORKPHONE_TEST_TO_IDS='filehelper,wxid_test_1' WORKPHONE_DRY_RUN=1 bash sdk/scripts/run_wechat_safe_batch_acceptance.sh"
exit 2
fi
IFS=',' read -r -a TO_IDS <<< "${TO_IDS_RAW}"
if (( ${#TO_IDS[@]} > MAX_COUNT )); then
echo "白名单数量 ${#TO_IDS[@]} 超过上限 ${MAX_COUNT},拒绝执行。"
exit 3
fi
TS="$(date +%Y%m%d-%H%M%S)"
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
EVID_DIR="${ROOT}/开发文档/8、部署/05-测试验收/$(date +%Y%m%d)_微信安全批量验收"
mkdir -p "${EVID_DIR}"
REPORT="${EVID_DIR}/safe_batch_${TS}.jsonl"
probe="$(curl -sS --max-time 40 "${BASE}/api/v3/hook/probe/${DEVICE}")"
supports="$(echo "${probe}" | jq -r '.supports_hook // false' 2>/dev/null || echo false)"
if [[ "${supports}" != "true" ]]; then
echo "Hook 未就绪,拒绝批量验收。"
echo "${probe}" > "${EVID_DIR}/probe_${TS}.json"
exit 4
fi
echo "设备=${DEVICE} count=${#TO_IDS[@]} interval=${INTERVAL}s dry_run=${DRY_RUN}"
for to_id in "${TO_IDS[@]}"; do
to_id="$(echo "${to_id}" | xargs)"
[[ -z "${to_id}" ]] && continue
if [[ "${DRY_RUN}" == "1" ]]; then
row="$(jq -cn \
--arg to_id "$to_id" \
--arg content "$CONTENT" \
--argjson timestamp "$(date +%s)" \
'{dry_run:true,to_id:$to_id,content:$content,timestamp:$timestamp}')"
echo "$row" | tee -a "$REPORT"
continue
fi
resp="$(curl -sS --max-time 120 -X POST "${BASE}/api/v3/message/send" \
-H 'Content-Type: application/json' \
-d "{\"device_id\":\"${DEVICE}\",\"platform\":\"wechat\",\"to_id\":\"${to_id}\",\"content\":\"${CONTENT}\",\"msg_type\":\"text\",\"channel\":\"hook\"}")"
row="$(jq -cn \
--arg to_id "$to_id" \
--arg raw "$resp" \
--argjson timestamp "$(date +%s)" \
'{dry_run:false,to_id:$to_id,response:(try ($raw|fromjson) catch {raw:$raw}),timestamp:$timestamp}')"
echo "$row" | tee -a "$REPORT"
sleep "${INTERVAL}"
done
echo "报告: ${REPORT}"