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

被下架的窘迫

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

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

从 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 就像密码,绝对不能放在前端代码里,只能存在后端。
相关推荐
有味道的男人8 分钟前
搜好货平台关键词商品搜索接口:分页容错与商品数据轻量化提取方案
服务器·前端·javascript
lovingsoft1 小时前
Chrome Lighthouse 详解
前端·chrome
Qlly1 小时前
全栈工程师怎么接需求?从一句「加个功能」聊到能开发、能验收
前端·后端
马可家的菠萝1 小时前
你的微信“文件传输助手”,是不是已经成了第二个网盘?
前端·后端·架构
略略略啦1 小时前
Vibe Coding 基于Spec DD和TDD的实践指南
前端
shmily麻瓜小菜鸡1 小时前
前端实现图片与PDF文字识别敏感信息打码方案
前端·pdf·状态模式
打工仔折腾 AI1 小时前
LangChain 工具调用实战:从 Tool 定义到 Agent 执行链路拆解
java·前端·人工智能·后端·python·langchain·ai agent 实战
汉堡大王95272 小时前
单次输出拉到100万Token:拆完 Gemini 4 Argon 的续写协议,才看懂谷歌这7个月在憋什么
前端·人工智能·后端
看浪的路人2 小时前
第9讲:大模型应用监控与可观测性——OpenTelemetry + Prometheus + Grafana 全链路追踪
java·前端·spring
内存过载2 小时前
用表格模拟甘特图:项目排期的土办法
前端·低代码