• 1.背景
  • 2.策略
  • 3.实现
    • 1. 调用auth.getAccessToken,获取接口调用凭证
    • 2. 调用security.msgSecCheck检测文本内容
  • 4.遇到的问题
  • 5.工具类完整代码
  • 6.使用方式

1.背景

发布小程序的时候,没有通过审核,审核结果为

提示要完善内容审核机制。

2.策略

微信服务端内容安全模块提供了内容审核的接口
security.msgSecCheck
检查一段文本是否含有违法违规内容。

应用场景举例:

  1. 用户个人资料违规文字检测;
  2. 媒体新闻类用户发表文章,评论内容检测;
  3. 游戏类用户编辑上传的素材(如答题类小游戏用户上传的问题及答案)检测等。

频率限制
单个 appId 调用上限为 4000 次/分钟,2,000,000 次/天

调用方式:

  1. HTTPS 调用
  2. 云调用
  3. 增量调用(加强版)

这里我们使用HTTPS调用的方式。

3.实现

1. 调用auth.getAccessToken,获取接口调用凭证

详情可参考微信公众平台文档 《获取access_token》

使用map存储获取的access_token,建立定时任务,每个7000s更新一次,如果项目中引入了Redis,最好使用Redis存储。原本项目中没有引入Redis,这里就偷了个懒

import cn.hutool.http.HttpUtil;import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.Scheduled;import java.util.HashMap;
import java.util.Map;@Configuration
public class WeiXinUtil {@Value("${app.appid}")String APPID;@Value("${app.secret}")String SECRET;@Value("${app.grant_type}")String AUTHORIZATION_CODE;@AutowiredWxCryptUtils wxCryptUtils;public static Map<String, String> accessTokenMap;public static final String ACCESS_TOKEN_KEY="accessToken";static {accessTokenMap = new HashMap<String, String>(1);}/*** 功能描述: 获取access_token,每隔7000s获取一次* @author jiaoqianjin* Date: 2020/11/23 14:33*/@Scheduled(fixedDelay = 2*3000*1000)public void getAccessToken() {//利用hutool发送https请求Map<String, Object> paramMap = new HashMap<String, Object>(3);paramMap.put("appid", APPID);paramMap.put("secret", SECRET);paramMap.put("grant_type", AUTHORIZATION_CODE);// 利用Hutool工具包的HttpUtilObject result = HttpUtil.get("https://api.weixin.qq.com/cgi-bin/token?", paramMap);JSONObject jsonObject = JSONUtil.parseObj(result);WeiXinUtil.accessTokenMap.put(WeiXinUtil.ACCESS_TOKEN_KEY,jsonObject.getStr("access_token"));}
}

.yml

app:appid: wx23eb370840c******secret: 8a665bce9dcc74e6e30e1c849******grant_type: client_credential

启动类
添加注解@EnableScheduling,开启定时任务

@EnableScheduling
@SpringBootApplication
public class AppRun {public static void main( String[] args ) {SpringApplication.run(AppRun.class, args);}}

2. 调用security.msgSecCheck检测文本内容

 /*** 功能描述:检查一段文本是否含有违法违规内容。** @param content 待检测文本* @author jiaoqianjin* Date: 2020/11/23 14:41*/public boolean msgCheck(String content) {String token = WeiXinUtil.accessTokenMap.get(WeiXinUtil.ACCESS_TOKEN_KEY);Map<String, Object> paramMap = new HashMap<String, Object>(1);paramMap.put("content", content);Object result = HttpUtil.post("https://api.weixin.qq.com/wxa/msg_sec_check?access_token=" + token, JparamMap);JSONObject jsonObject = JSONUtil.parseObj(result);System.out.println(jsonObject);boolean flag = false;//87014  内容含有违法违规内容int errCode = 87014;if (jsonObject.getInt("errcode") == errCode) {flag = true;}return flag;}

4.遇到的问题

{“errcode”:47001,“errmsg”:"data format error rid: *** "}
请求格式不正确

hutool给出的post请求例子

发现自己没有用错,但是请求格式就是不对,发现post请求参数,请发送前还是要转为JSON格式

 Map<String, Object> paramMap = new HashMap<String, Object>(1);paramMap.put("content", content);Object result = HttpUtil.post("https://api.weixin.qq.com/wxa/msg_sec_check?access_token=" + token, JSONUtil.toJsonPrettyStr(paramMap));

5.工具类完整代码

import cn.hutool.http.HttpUtil;import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.Scheduled;import java.util.HashMap;
import java.util.Map;@Configuration
public class WeiXinUtil {@Value("${app.appid}")String APPID;@Value("${app.secret}")String SECRET;@Value("${app.grant_type}")String AUTHORIZATION_CODE;@AutowiredWxCryptUtils wxCryptUtils;public static Map<String, String> accessTokenMap;public static final String ACCESS_TOKEN_KEY="accessToken";static {accessTokenMap = new HashMap<String, String>(1);}/*** 功能描述: 获取access_token,每隔7000s获取一次* @author jiaoqianjin* Date: 2020/11/23 14:33*/@Scheduled(fixedDelay = 2*3000*1000)public void getAccessToken() {//利用hutool发送https请求Map<String, Object> paramMap = new HashMap<String, Object>(3);paramMap.put("appid", APPID);paramMap.put("secret", SECRET);paramMap.put("grant_type", AUTHORIZATION_CODE);// 利用Hutool工具包的HttpUtilObject result = HttpUtil.get("https://api.weixin.qq.com/cgi-bin/token?", paramMap);JSONObject jsonObject = JSONUtil.parseObj(result);WeiXinUtil.accessTokenMap.put(WeiXinUtil.ACCESS_TOKEN_KEY,jsonObject.getStr("access_token"));}/*** 功能描述:检查一段文本是否含有违法违规内容。** @param content 待检测文本* @author jiaoqianjin* Date: 2020/11/23 14:41*/public boolean msgCheck(String content) {String token = WeiXinUtil.accessTokenMap.get(WeiXinUtil.ACCESS_TOKEN_KEY);Map<String, Object> paramMap = new HashMap<String, Object>(1);paramMap.put("content", content);Object result = HttpUtil.post("https://api.weixin.qq.com/wxa/msg_sec_check?access_token=" + token, JSONUtil.toJsonPrettyStr(paramMap));JSONObject jsonObject = JSONUtil.parseObj(result);System.out.println(jsonObject);boolean flag = false;//87014  内容含有违法违规内容int errCode = 87014;if (jsonObject.getInt("errcode") == errCode) {flag = true;}return flag;}
}

6.使用方式

 // 通知内容添加文本铭感词汇过滤boolean isSensitive = new WeiXinUtil().msgCheck(info.getContent());if (isSensitive) {log.error("【发布通知失败,含有违法违规内容】: objId: " + updateObjectDTO.getId());throw new BaseException(ResponseEnum.CONTENT_IS_SENSITIVE);}

Java实现微信小程序文本内容敏感词检查相关推荐

  1. Java实现微信小程序校验图片是否含有违法违规内容

    文章目录 1.Java实现微信小程序校验图片是否含有违法违规内容(security.imgSecCheck) 2.接口文档简述 3.Java实现对接接口 4.压缩图片(Thumbnails) 5.整合 ...

  2. 最全的java对接微信小程序客服功能实现(包含自动回复文本消息、图片消息,进入人工客服)

    java对接微信小程序客服功能实现(包含自动回复文本消息.图片消息,进入人工客服) 第一步:请求校验(确认请求来自微信服务器) 代码如下: @ApiOperation(value = " 微 ...

  3. java写微信小程序答辩问题_java微信小程序开发中加密解密算法总结

    详解java微信小程序开发中加密解密算法 一.概述 微信推出了小程序,很多公司的客户端应用不仅具有了APP.H5.还接入了小程序开发.但是,小程序中竟然没有提供Java版本的加密数据解密算法.这着实让 ...

  4. java与微信小程序通讯_java与微信小程序实现websocket长连接

    本文实例为大家分享了java与微信小程序实现websocket长连接的具体代码,供大家参考,具体内容如下 背景: 需要在小程序实现地图固定坐标下实时查看消息 java环境 :tomcat7 jdk1. ...

  5. java实现微信小程序加密数据解密的代码怎么写

    前言 微信小程序好坑啊!java明明是用户量最大的编程语言,可是都2021年了,他的小程序文档到现在都没有更新上java实现加密数据解密算法.... 微信小程序官方文档如下: 服务端获取开放数据 | ...

  6. java基于微信小程序的智能停车场管理系统+ssm+uinapp+Mysql+计算机毕业设计

    java基于微信小程序的智能停车场管理系统+ssm+uinapp+Mysql+计算机毕业设计 本智能停车场管理系统以ssm作为框架,b/s模式以及MySql作为后台运行的数据库,同时使用Tomcat用 ...

  7. 微信小程序文本查看更多和收起

    微信小程序文本查看更多和收起 微信小程序中,有时候文本需要实现这样的功能: 1.文本超过n行显示省略号 2.省略时,显示 展开/收起 按钮 3.文本不超过n行时,不显示省略号和展开/收起按钮 实现功能 ...

  8. java后端微信小程序登录与注册

    java后端微信小程序登录与注册&微信登录授权 分析: 微信小程序用户表 的字段来源于微信服务器 , 必须想办法去获取到对应的用户信息 找到微信开放平台: 微信开放平台 以下是微信开放平台给出 ...

  9. 【程序源代码】微信小程序商城管理系统(Java后台+微信小程序)最新版

    关键字:微信小程序 商城系统 02 - [技术框架] 微信小程序商城管理系统(Java后台+微信小程序) 基于Spring+Vue+Mysql+Redis主流技术开发框架集成开发的微信商场管理系统:其 ...

最新文章

  1. Spark 应用程序调优
  2. ffmpeg php win32,解决PHP5.3.x下ffmpeg安装配置问题
  3. 比较文件内容是否相同
  4. linux内核中的GPIO系统之(4):pinctrl驱动的理解和总结
  5. java开发爱恩斯坦棋,爱恩斯坦棋计算机博弈关键技术研究
  6. 大连理工18秋计算机应用基础,大连理工大学网络教育本科计算机应用基础入学考试模拟题...
  7. STM32 HAL 硬件IIC+DMA+简单图形库控制OLED
  8. “一键删除中国App”应用海外走红,下载量破500万!谷歌:我先把你删除了
  9. 小米6报价参数_对小米11系列你了解多少,你更看好小米11还是小米11pro
  10. Linux 命令 (tar,权限,管道)
  11. 两万字详解MongoDB从入门到精通
  12. java jsonarray 拷贝_JSONObject与JSONArray使用
  13. Android 登陆界面Edittext
  14. 疯狂的华尔街速度:千分之十三秒让高频交易员创造2千万美元
  15. 目前总结最新最系统的Java程序员未来职业规划路线,请收藏
  16. 阿里热修复方案Sophix
  17. 新型发明创造大赛计算机类,参加2019自主招生要具备什么条件?高校更青睐包括专利在内的七大类!...
  18. 为什么今天不写技术文章
  19. 力扣(15.18)补9.19
  20. 最新版NASA官方网站数据下载流程——以MODIS数据演示为例

热门文章

  1. 平衡二叉搜索树查找的时间复杂度为什么是O(log n)?
  2. CAE工程服务2022年全球行业分析报告
  3. 油气计量比较好的软件_您准备好使用计量互联网了吗?
  4. PAT_乙级1010
  5. 深度解析|农贸市场如何实现交易数字化转型升级
  6. mysql 备用字段_MySql 命令大全(转载备用)
  7. 浙大计算机学些什么,浙江大学首批招收人工智能专业 学什么,要怎么教?
  8. RHS和LRS查找区别
  9. python做一个【批量加密解密】软件,让你的文件有程序加密保护,在也不怕别人乱翻你的东西了
  10. NRF52832与NRF52840的性能区别