小程序被下架后,我连夜加了个 "安全接口"

被下架的窘迫

上周三晚上下班回家,我像往常一样打开微信公众平台,看看小程序的今天又新增了几个用户,没注意到通知的信息,然后兴致勃勃的告诉室友我上线的微信小程序,然后他拿出手机没有搜索到小程序的那一刻就翻车了------被下架了。 当时想装一下,结果被啪啪打脸了...

翻遍微信的规则文档才明白:只要涉及用户输入文本、图片等内容,必须用官方接口做安全检测。自己写的关键词过滤根本不认,哪怕只有一条违规内容被举报,就可能触发下架。

从 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% 的内容被检测为违规,大多是带敏感词的网络梗,如果没加这个功能,可能早就二次下架了。

这里再提醒几个细节:

  1. 免费额度:个人开发者每天 1000 次免费调用。
  2. 加个 loading 状态:微信接口偶尔会慢,前端加个加载提示,避免用户以为没反应。
  3. AppSecret:小程序的 secret 就像密码,绝对不能放在前端代码里,只能存在后端。
相关推荐
踢足球09297 小时前
寒假打卡:2026-2-7
java·开发语言·javascript
_果果然7 小时前
这 7 个免费 Lottie 动画网站,帮你省下一个设计师的工资
前端
QT.qtqtqtqtqt7 小时前
uni-app小程序前端开发笔记(更新中)
前端·笔记·小程序·uni-app
楚轩努力变强7 小时前
iOS 自动化环境配置指南 (Appium + WebDriverAgent)
javascript·学习·macos·ios·appium·自动化
Aliex_git7 小时前
跨域请求笔记
前端·网络·笔记·学习
John_ToDebug7 小时前
引擎深处的漫游者:构建浏览器JavaScript引擎的哲学与技艺
javascript·chrome·js
37方寸7 小时前
前端基础知识(Node.js)
前端·node.js
程序猿阿伟7 小时前
《TypeScript中Protobuf到运行时类型安全的转换指南》
javascript·安全·typescript
powerfulhell8 小时前
寒假python作业5
java·前端·python
木子啊8 小时前
前端组件化:模板继承拯救发际线
前端