必须通过HBuilderX图形化安装uni-sec-check公共模块并显式设置provider为mp-weixin,否则90%概率报Module not found或初始化失败;它不是npm包,需右键云函数目录→“管理公共模块依赖”安装,部署前加console.log(UniSecCheck?.version)验证。

直接上结论:不能用 npm install,必须通过 HBuilderX 图形化安装 uni-sec-check 公共模块,且 provider 必须显式设为 mp-weixin,否则 90% 情况下会报 Module not found 或初始化失败。
uni-sec-check 怎么装才不报 Module not found
这是最常卡住的第一步。uni-sec-check 不是 npm 包,它属于 uniCloud 的「公共模块」,路径和加载机制完全独立于 node_modules。
- 右键你的云函数目录(比如
uniCloud/cloudfunctions/check-content)→「管理公共模块依赖」 - 勾选
uni-sec-check→ 确认安装 - 安装后必须重新部署该云函数(旧缓存不会自动更新)
- 部署前加一行验证代码:
console.log(UniSecCheck?.version),输出为空就说明根本没加载成功 - 常见错误:
- 在前端项目或根目录右键安装(错位置)
- 装在了腾讯云环境但项目用的是阿里云(环境不匹配)
- 没同步配置中心(
uni-config-center),导致拿不到微信appid/appsecret,初始化直接 throw
textSecCheck 调用时 openid 和 scene 怎么填
微信 V2 版本接口强制要求传 openid,否则返回 errCode: 40013(invalid appid)。而 scene 决定审核策略宽松度,不是可选项。
-
openid必须来自当前用户(不能写死或空字符串):- 若走
uni-id-common,可用event.userInfo?.openid或调用uniID.getProviderUserInfo() - 若未接入 uni-id,需前端在调用云函数时显式传入(
uniCloud.callFunction({ data: { text, openid } }))
- 若走
-
scene推荐按场景填整数:-
1:用户资料(如昵称、简介,审核最严) -
2:评论/弹幕(默认推荐,平衡误杀与漏检) -
3:论坛发帖(略宽松) -
4:社交日志(如朋友圈文案,相对宽松)
-
-
version: 2必须显式指定,V1 已逐步停用,且不支持openid
为什么“预约”被标为色情?怎么降低误判率
这不是 bug,是微信接口的策略行为——它基于上下文 + 行业黑库动态打标,单字词无上下文时容易过检。
- 微信官方不公开敏感词库,也不允许开发者绕过或自定义规则
- 实测发现以下做法能小幅改善:
- 对长文本做分句处理,逐句调用
textSecCheck,再合并结果(避免一句带敏感词全盘否决) - 提前清洗干扰字符:去除多余空格、换行、emoji(
content.replace(/[\u{1F600}-\u{1F64F}]/gu, '')) - 控制长度:微信限制单次
content≤ 500KB,但实测超过 2000 字符后误判率明显上升,建议前端截断并提示“请分段提交”
- 对长文本做分句处理,逐句调用
- 注意:不要尝试用同音字、符号替换(如“预×约”),微信 V2 已支持语义还原,反而触发更高级别风控
云函数里怎么传 content 才不被截断或乱码
前端传参看似简单,但编码问题极易导致后端拿到空内容或 Buffer 解析失败。
- 前端必须用
uniCloud.callFunction,不能用uni.request直连云函数 URL(鉴权会失败) -
content应为纯字符串,不要 JSON.stringify 两遍 - 如果内容含中文,确保:
- HBuilderX 项目编码设为 UTF-8(右键项目 → 属性 → 文本编码)
- 云函数
index.js文件本身保存为 UTF-8(无 BOM)
- 特别注意:若从富文本组件(如
uni-app rich-text)取值,先用text.replace(/]+>/g, '')去 HTML 标签,否则标签字符可能超长或触发解析异常
实际中最容易被忽略的是:云函数部署后没点「同步云端 NPM」或「强制更新」,本地改了代码但线上还在跑旧版本,查半天发现是缓存问题。











