【v0.4.2】harmony-mcp:32 条审核规则全量扫描,再也不怕审核被拒了

17 阅读6分钟

上次发布后,收到最多的反馈是:「合规检测能不能再多查几项?我被拒了 3 次,都不知道问题出在哪。」

各位开发者好:

v0.4.0 的合规预检(15 条隐私 API 规则)发布后,社区反馈高度集中在一点:

「隐私 API 是查到了,但审核还是被拒。审核意见说『进入即弹窗』、『隐私描述不明确』、『虚拟支付违规』——这些你能查吗?」

v0.4.2 的回答是:能。全查。


🆕 v0.4.2 核心升级

升级项之前现在
合规规则数15 条(仅隐私 API)32 条(覆盖审核全场景)
工具总数20 个28 个(新增 8 个鸿蒙设备工具)
Linter 规则11 条14 条
安全防护命令注入防护 + 路径校验

🛡️ 重点:32 条审核规则,覆盖 2026 年最高频驳回场景

这些驳回理由,你遇到过吗?

驳回原因对应规则等级
「未配置隐私弹窗」CP001🔴 高危
「进入即弹窗,非使用时授权」CP002🔴 高危
「iOS 虚拟支付违规」CP004🔴 高危
「强制登录才能使用」CP005🔴 高危
「web-view 域名不在白名单」CP007🔴 高危
「页面路径不存在」CP008🔴 高危
「隐私描述不明确、不清晰」CP013🟡 建议
「请求使用 HTTP 明文」CP014🔴 高危
「诱导分享」CP003🟡 建议
「UGC 未接入内容安全」CP006🟡 建议

以上全部自动检测,每条规则都会给出具体文件、行号和修复方案。

实际效果演示

只需对 AI 说一句:「帮我检查这个项目能不能过审」

返回结果:

json

{
  "status": "HAS_ISSUES",
  "summary": "⚠️ 发现 3 个高危问题、2 个建议优化项(共检查 32 条规则)。",
  "issues": [
    {
      "ruleId": "CP001",
      "severity": "error",
      "message": "未检测到隐私协议弹窗组件。2023年10月起必须配置。"
    },
    {
      "ruleId": "CP002",
      "severity": "error",
      "file": "pages/index/index.js",
      "line": 8,
      "message": "在 onLoad 中直接调用 wx.authorize,属于「进入即弹窗」违规。"
    },
    {
      "ruleId": "CP013",
      "severity": "warning",
      "file": "privacy.json",
      "message": "隐私 API「wx.getLocation」的描述过于笼统(「用于提供服务」),审核大概率不通过。"
    }
  ]
}

AI 拿到结果后,会逐条帮你修复:移动授权调用位置、补全隐私描述、创建隐私弹窗组件。


🔍 新增规则详解(精选 5 条最实用的)

CP002:首次进入即弹授权

检测逻辑:  扫描 onLoad / onShow 生命周期中是否直接调用 wx.authorizewx.getUserProfilewx.getLocation

为什么被拒:  微信 2024 年起严格要求「授权必须在用户主动触发后调用」,页面加载时自动弹窗即构成违规。

修复建议:  将授权调用移至按钮的 bindtap 事件中。


CP004:虚拟支付检测(2026 新规加强版)

检测逻辑:  检测 wx.requestPayment 附近是否出现虚拟商品关键词(VIP/金币/会员/钻石),同时检查是否包含 iOS 平台判断逻辑。

2026 新规:  腾讯 2026 年 2 月 27 日公告要求,4 月 1 日前全终端接入虚拟支付组件,否则视为违规。

智能判断:

  • 有 platform === 'ios' 判断 → 降为 🟡 警告(提醒确认逻辑正确)
  • 无平台判断 → 🔴 高危(强烈建议添加)

CP005:强制登录拦截

检测逻辑:  检查首页 onLoad 中是否出现 wx.login + 跳转登录页的模式。

为什么被拒:  微信明确要求「小程序在未登录状态下也能正常浏览基本内容」。2024-2025 年,这一直是驳回量排名第一的原因。


CP013:隐私描述笼统检测

检测逻辑:  读取 privacy.json,检查每个 API 的 desc 字段是否过短(< 10 字),或包含万金油描述(如「用于提供服务」「为了更好的体验」)。

为什么被拒:  社区大量反馈「用户信息授权描述不明确、不清晰,审核失败」,反复修改仍不通过。根因正是描述太笼统。

修复建议:  具体化描述场景,例如「用于在地图上展示您附近 3 公里内的外卖商家」。


CP014:HTTP 明文请求

检测逻辑:  扫描 JS 文件中的 http:// URL(排除 localhost),确认是否处于网络请求上下文中。

为什么被拒:  微信正式版强制要求 HTTPS,HTTP 请求会被直接拦截。开发环境不报错,一旦上线就会出问题。


📋 完整 32 条规则清单

编号规则等级
15 条隐私 API 检测(位置/相机/相册/蓝牙/录音/支付等)🔴
CP001隐私协议弹窗缺失🔴
CP002首次进入即弹授权🔴
CP003诱导分享检测🟡
CP004虚拟支付检测(含 iOS 平台判断)🔴
CP005强制登录拦截🔴
CP006内容安全接口缺失 + UGC 类目提示🟡
CP007web-view 域名未配置🔴
CP008页面路径不存在🔴
CP009tabBar 配置异常🔴
CP010项目名称违规词🟡
CP011广告组件滥用🟡
CP012分享回调缺失🟡
CP013隐私协议描述笼统🟡
CP014HTTP 明文请求🔴
CP015空壳页面检测🟡
CP016sitemap 配置缺失🟡
CP017敏感信息硬编码(手机号/身份证/密钥)🟡

🤖 新增:8 个鸿蒙设备操作工具

v0.4.2 同时新增了鸿蒙 HarmonyOS 设备自动化能力(基于华为官方 HDC 命令行):

工具功能
harmony_list_devices列出已连接设备/模拟器
harmony_install安装 HAP 包
harmony_uninstall卸载应用
harmony_start启动 Ability
harmony_log查看设备日志
harmony_file_push推送文件到设备
harmony_file_pull从设备拉取文件
harmony_ready_check鸿蒙环境预检

注:鸿蒙工具需要本地安装 HDC 并连接设备/模拟器。微信小程序相关功能不受影响。


⚡ 30 秒部署

Kiro / Cursor

json

{
  "mcpServers": {
    "harmony-mcp": {
      "command": "npx",
      "args": ["-y", "@yujiamei/harmony-mcp"]
    }
  }
}

Claude Desktop

编辑 claude_desktop_config.json,添加同样的配置。

Windows 用户(npx 遇到问题时)

bash

npm install -g @yujiamei/harmony-mcp

然后将 command 改为 "harmony-mcp",args 改为 []


🔒 安全加固

v0.4.2 同时修复了一个潜在的命令注入风险:

  • CLI 参数构建函数新增 escapeShellArg 转义
  • wechat_init_project 新增路径安全校验(拒绝系统目录 + 目录非空检查)
  • 日志系统改为异步写入 + 5MB 自动轮转

📊 数据对比

指标v0.4.0v0.4.2
合规规则15 条32 条
工具总数20 个28 个
Linter 规则11 条14 条
单测数量86 个121 个
合规扫描耗时~15ms~20ms

🗺️ 下一步

  • MCP Tasks 异步化 — 大项目发版不再断线(等待 SDK 7 月底正式发布)
  • UniApp / Taro 深度适配 — 跨端框架编译产物的智能识别
  • 社区共建 — 欢迎提交自定义合规规则的 PR

32 条规则不是凭空想出来的,每一条都对应微信开放社区中真实的驳回案例

如果你:

  • 被「隐私描述不明确」折磨过 → CP013 帮你检查描述是否足够具体
  • 被「进入即弹窗」拒绝过 → CP002 帮你定位哪一行代码有问题
  • 做虚拟支付但不确认是否合规 → CP004 帮你检查 iOS 平台判断
  • 第一次提审心里没底 → 跑一遍 wechat_compliance_check,32 条规则全量扫描

审核前跑一遍,比审核后改五遍强。

🔗 GitHub:github.com/xiaoxuzhu30…
📦 NPM:npx -y @yujiamei/harmony-mcp
🏛️ MCP Registry:io.github.xiaoxuzhu303-prog/harmony-mcp
📖 Prompt 指令库:github.com/xiaoxuzhu30…