被下架的窘迫
上周三晚上下班回家,我像往常一样打开微信公众平台,看看小程序的今天又新增了几个用户,没注意到通知的信息,然后兴致勃勃的告诉室友我上线的微信小程序,然后他拿出手机没有搜索到小程序的那一刻就翻车了------被下架了。 当时想装一下,结果被啪啪打脸了...
翻遍微信的规则文档才明白:只要涉及用户输入文本、图片等内容,必须用官方接口做安全检测。自己写的关键词过滤根本不认,哪怕只有一条违规内容被举报,就可能触发下架。
从 0 到 1 接入微信内容检测
下架的 3 天里,我边掉头发边赶工,终于搞懂了整个流程。核心其实就 3 步:拿凭证、搭接口、联前端,全程用 Node 实现,会写前端也都没啥问题。
一、备好 "钥匙"
调用微信接口需要两个关键凭证,下架那天我手忙脚乱找了半天,【管理-开发管理-开发设置】 :
- AppID :小程序的 "身份证",长这样:
wx1234567110abcdef
- AppSecret:相当于 "密码",和 AppID 在同一页
二、前端获取凭证
拿微信的临时凭证(access_token),然后调用检测接口。注意把 appid 和 secret 换成你自己的:
ini
// app.js
const express = require('express');
const axios = require('axios');
const app = express();
app.use(express.json()); // 解析前端发来的JSON数据
// 小程序的账号信息,记得换成你自己的
const WX_CONFIG = {
appid: '你的小程序appid',
secret: '你的小程序secret'
};
// 第一步:获取微信接口的临时凭证(access_token)
async function getAccessToken() {
const url = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${WX_CONFIG.appid}&secret=${WX_CONFIG.secret}`;
const res = await axios.get(url);
return res.data.access_token;
}
三、后端调取微信官方内容检测api
javascript
// 第二步:写个接口给前端调用,用来检测内容
app.post('/check-content', async (req, res) => {
try {
const { content } = req.body; // 前端传过来的用户输入内容
const token = await getAccessToken(); // 拿临时凭证
// 调用微信官方的内容检测接口-核心
const requestData = {
content: content, // 要检测的内容
version: 2, //接口版本号,2.0版本为固定值2
scene: scene, //场景枚举值(1 资料;2 评论;3 论坛;4 社交日志)
openid: openid //用户的openid(用户需在近两小时访问过小程序)
};
const checkRes = await axios.post(
`https://api.weixin.qq.com/wxa/msg_sec_check?access_token=${token}`,
requestData
);
// 第三步:告诉前端结果
const result = response.data.result || {};
return {
success: true,
result: {
suggest: result.suggest || null,
label: result.label || null
},
};
});
四、小程序里加内容检测
然后在提交输入框的地方请求api:
php
// 页面里的提交方法
const nameCheckResult = await API.checkContentSilent(this.content);
// suggest :有risky、pass、review三种值,只有pass是通过,其他都是存在风险
if (nameCheckResult.suggest === 'risky') {
uni.showModal({
title: "内容安全提示",
content: "检测到输入内容疑似存在风险,请修改后重试。",
showCancel: false,
confirmText: "知道了"
});
return;
}
具体的风险类型可以参考微信官方文档: 微信文本内容安全识别
核心逻辑:小程序→你的 Node 服务→微信接口,全程只传文本,安全又简单。
上线后:从 "提心吊胆" 到 "踏实睡觉"
整改后重新上架,《墨鱼万能工具》的 "UGC输入" 功能多了层保障。后台数据显示,每天有大概 1% 的内容被检测为违规,大多是带敏感词的网络梗,如果没加这个功能,可能早就二次下架了。
这里再提醒几个细节:
- 免费额度:个人开发者每天 1000 次免费调用。
- 加个 loading 状态:微信接口偶尔会慢,前端加个加载提示,避免用户以为没反应。
- AppSecret:小程序的 secret 就像密码,绝对不能放在前端代码里,只能存在后端。