SpringBoot调用微信小程序敏感词拦截接口
获取接口调用凭据 | 微信开放文档 (qq.com)
在调用微信小程序安全识别接口时需要先拿到,小程序的token令牌,需要调用下面这个接口
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=SECRET
请求参数
返回参数
通过这个接口可以获得一个小程序的token,有效时间为两个小时。
文本内容安全识别 | 微信开放文档 (qq.com)
对接微信小程序文本内容安全识别接口,通过post调用下面这个接口
POST https://api.weixin.qq.com/wxa/msg_sec_check?access_token=ACCESS_TOKEN
请求参数
返回参数
代码如下:
@Component
public class EdZshFilter {@Autowiredprivate RedisUtil redisUtil;@Autowiredprivate SystemConfigService systemConfigService;//这个无关紧要//获得小程序tokenpublic String getToken(){//先从redis中读String appToken = redisUtil.get("appToken");//如果没有在去请求接口if (StringUtils.isEmpty(appToken)){//小程序的appIdString APPID = systemConfigService.getValueByKey(WeChatConstants.WECHAT_MINI_APPID);//小程序的秘钥String SECRET = systemConfigService.getValueByKey(WeChatConstants.WECHAT_MINI_APPSECRET);String GET_TOKEN = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+APPID+"&secret="+SECRET;RestTemplate restTemplate;restTemplate = new RestTemplate();String json = restTemplate.getForObject(GET_TOKEN, String.class);appToken = json.split("\"access_token\":\"")[1].split("\",\"")[0].trim();//保存到redis中redisUtil.set("appToken", appToken, 7000L, TimeUnit.SECONDS);}return appToken;}public String check( String content,String openId) throws ExecutionException,InterruptedException{String token = getToken();//最终返回的结果String resultMsg = "";String url = "https://api.weixin.qq.com/wxa/msg_sec_check?access_token=" + token;//创建客户端HttpClient httpclient = HttpClients.createDefault();//创建一个post请求HttpPost request = new HttpPost(url);//设置响应头request.setHeader("Content-Type", "application/json;charset=UTF-8");//通过fastJson设置json数据JSONObject postData = new JSONObject();//设置要检测的内容postData.put("version", "2"); //接口版本号,2.0版本为固定值2postData.put("openid", openId); //用户的openid(用户需在近两小时访问过小程序)postData.put("scene", "2"); //场景枚举值(1 资料;2 评论;3 论坛;4 社交日志)postData.put("content", content); //需检测的文本内容,文本字数的上限为2500字,需使用UTF-8编码String jsonString = postData.toString();request.setEntity(new StringEntity(jsonString,"utf-8"));try {HttpResponse response = httpclient.execute(request);// 从响应模型中获取响应实体HttpEntity entity = response.getEntity();//得到响应结果String result = EntityUtils.toString(entity,"utf-8");//打印检测结果System.out.println("检测结果:"+result);//将响应结果变成jsonJSONObject resultJsonObject = JSONObject.parseObject(result);String errcode =resultJsonObject.getString("errcode");if ("0".equals(errcode)) {String detail = resultJsonObject.getString("result");Map<String, Object> map = JSONObject.parseObject(detail, new TypeReference<Map<String, Object>>() {});Integer label =(Integer) map.get("label");switch (label) {case 100:resultMsg = "正常";break;case 10001:resultMsg = "广告";break;case 20001:resultMsg = "时政";break;case 20002:resultMsg = "色情";break;case 20003:resultMsg = "辱骂";break;case 20006:resultMsg = "违法犯罪";break;case 20008:resultMsg = "欺诈";break;case 20012:resultMsg = "低俗";break;case 20013:resultMsg = "版权";break;case 21000:resultMsg = "其他";break;}} else {redisUtil.delete("appToken");return "请重新提交";}} catch (IOException e) {e.printStackTrace();}return resultMsg;}
}