直接使用 uni-sec-check 进行内容安全检测,它已内置策略更新、token 自刷新和错误码映射;需通过 hbuilder x 图形化安装,初始化时显式传 provider: 'mp-weixin' 和 context.requestid,content 必须为纯字符串,scene 按场景设 1/2/3,version 固定为 2,suggestion 为 'review' 时应进人工复核,替换敏感词需先过滤高危内容再动态正则替换。

直接用 uni-sec-check 做检测,别自己写敏感词库或调微信原生接口——它已内置策略更新、token 自刷新、错误码映射,自己拼 msg_sec_check URL 或硬编码词库,90% 的误判和超时都出在这儿。
uni-sec-check 怎么装和初始化才不报 Module not found
云函数里 require('uni-sec-check') 报错,基本是没走对安装路径:
- 必须在 HBuilder X 里右键项目 →「管理公共模块依赖」→ 搜索
uni-sec-check→ 点击安装,不能npm install—— uniCloud 公共模块只认图形化引入 - provider 必须显式传
'mp-weixin',填'wx'、''或缺省都会初始化失败 - 云函数中初始化要带
context.requestId:const sec = new UniSecCheck({ provider: 'mp-weixin', requestId: context.requestId }) - 调试时先打印
UniSecCheck.version,输出undefined说明模块根本没加载成功
textSecCheck 返回 87014 怎么避免误判
errCode: 87014 不等于“内容违规”,而是“平台判定为违法违规”,但微信策略动态收紧,像“预约”“骨干”“领导”这类词常被误标:
-
content字段必须是纯字符串,不能含 HTML 标签、JSON 结构或富文本序列化结果,否则解析异常会触发兜底拦截 -
scene建议按实际场景设值:1(用户资料)、2(评论/帖子)、3(群聊),不同场景词库权重不同 -
version固定用2,version: 1已逐步停用,且不支持新版敏感词识别逻辑 - 如果返回
checkRes.result.suggestion === 'review',别直接拦截,应进人工复核队列——这是微信明确提示“不确定,需人工判断”
检测后怎么安全替换敏感词而不是简单删掉
微信接口只返回是否违规、风险类型(label)和置信度(score),不返回具体哪个词触发。所以「自动替换」必须分两步走:先用 uni-sec-check 过滤高危内容,再用本地规则做模糊替换:
- 高危内容(
suggestion === 'block')直接拒绝提交,不进入替换流程 - 待替换内容限定在
suggestion === 'pass'或'review'范围内,用轻量级正则匹配常见变体:str.replace(/你[妈爷]的?/g, '***') - 避免全量遍历敏感词数组做
slice匹配(性能差、易漏长词),推荐用new RegExp(sensitiveWord, 'g')动态构造,但注意特殊字符转义 - 替换符号建议用统一长度占位符(如
*或●),别用空格——否则可能破坏语义结构导致二次审核失败
真正难的不是替换动作本身,而是判断「什么时候该拦、什么时候该替、什么时候该放」——微信返回的 label 和 score 是连续值,不是布尔开关,业务侧得根据自身类目(比如社交 vs. 教育)设定分级阈值,这点容易被忽略。











