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

被下架的窘迫

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

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

从 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 就像密码,绝对不能放在前端代码里,只能存在后端。
相关推荐
WestWong2 小时前
基于 Web 技术栈的跨端开发模版
前端
小old弟2 小时前
小程序开发:原生 vs 跨平台框架全解析
前端
閞杺哋笨小孩2 小时前
Vue3 点击指令(防抖 / 节流)
前端·vue.js
加油吧zkf2 小时前
Python入门:从零开始的完整学习指南
开发语言·前端·python
柯南二号3 小时前
【大前端】 TypeScript vs JavaScript:全面对比与实践指南
前端·javascript·typescript
岁月宁静3 小时前
AI 语音合成技术实践:实现文本转语音实时流式播放
前端·vue.js·node.js
用户1908722824783 小时前
多段进度条解决方案
前端
閞杺哋笨小孩3 小时前
Vue3 可拖动指令(draggable)
前端·vue.js
鱼前带猫刺猬3 小时前
leafer-js实现简单图片裁剪(react)
前端