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

被下架的窘迫

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

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

从 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 就像密码,绝对不能放在前端代码里,只能存在后端。
相关推荐
子兮曰2 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰2 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万2 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝2 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋2 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁2 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
李少兄2 天前
JavaScript 隐式全局变量解析
javascript
汉堡大王95272 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大2 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师2 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端