使用背景描述
微信小程序很多需要展示出来的文本,图片,视频等,都需要接入微信内容安全api来做合法校验,如果这些相关功能没有接入微信内容安全api的话,那么小程序审核就会被打回。
解决方法
新建一个WeiXinSecurityUtil工具类,内容如下:
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
/**
* @Author: jiejie
* @Date: 2021/8/17 下午3:47
* @Desc: 微信安全工具类
* @Version 1.0
*/
public class WeiXinSecurityUtil {
private static final Logger log = LoggerFactory.getLogger(WeiXinSecurityUtil.class);
/**
* 图片检测接口路径
*/
private static String IMG_SEC_URL = "https://api.weixin.qq.com/wxa/img_sec_check?access_token=";
/**
* 内容安全检测接口路径
*/
private static String MSG_SEC_URL = "https://api.weixin.qq.com/wxa/msg_sec_check?access_token=";
/**
* 检测内容安全方法(返回0才是校验成功,其余都是失败)
*
* @param content
* @param accessToken
* @return
*/
public static Boolean checkMsg(String content, String accessToken) {
JSONObject jsonObject = new JSONObject();
jsonObject.putOpt("content", content);
Boolean result = false;
String response = "";
try {
response = HttpUtil.post(MSG_SEC_URL + accessToken, jsonObject.toString());
} catch (Exception e) {
log.error("调用微信内容安全检测接口失败" + e.getMessage());
}
if (StrUtil.isNotBlank(response)) {
//解析相应内容(转换成json对象)
JSONObject json = JSONUtil.parseObj(response);
//错误码(errcode),0表示内容正常
String errcode = String.valueOf(json.get("errcode"));
String errmsg = (String) json.get("errmsg");
if (!"0".equals(errcode)) {
log.warn("调用微信内容安全检测接口错误,错误码:{},错误信息:{}", errcode, errmsg);
} else {
result = true;
}
}
return result;
}
/**
* 检测图片安全方法
*
* @param file
* @param accessToken
* @return
*/
public static Boolean checkImg(MultipartFile file, String accessToken) throws IOException {
byte[] bytes = file.getBytes();
JSONObject jsonObject = new JSONObject();
jsonObject.putOpt("media", bytes);
Boolean result = false;
String response = "";
try {
response = HttpRequest.post(IMG_SEC_URL + accessToken)
.header("Content-Type", "application/octet-stream")
.form(jsonObject)
.timeout(20000)//超时,毫秒
.execute().body();
} catch (Exception e) {
log.error("调用微信图片安全检测接口失败" + e.getMessage());
}
if (StrUtil.isNotBlank(response)) {
//解析相应内容(转换成json对象)
JSONObject json = JSONUtil.parseObj(response);
//错误码(errcode),0表示内容正常
String errcode = String.valueOf(json.get("errcode"));
String errmsg = (String) json.get("errmsg");
if (!"0".equals(errcode)) {
log.warn("调用微信图片安全检测接口错误,错误码:{},错误信息:{}", errcode, errmsg);
} else {
result = true;
}
}
return result;
}
}
其实可以先看看微信官方微信内容安全api调用的文档,有个概念,然后再面向搜索引擎看看有没有已经封装好的方法可供参考,最后再自定义下符合项目规范的返参和日志,以上代码经过测试,可以生效。