浏览代码

#1217 小程序增加校验图片/音频是否含有违法违规内容的接口

* 添加 微信内容异步检测接口

* 消息route 增加 title 参数
master
Boris 5 年前
committed by Binary Wang
父节点
当前提交
8e97b778f3
共有 6 个文件被更改,包括 103 次插入10 次删除
  1. +24
    -1
      weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaSecCheckService.java
  2. +17
    -8
      weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaSecCheckServiceImpl.java
  3. +25
    -0
      weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaMediaAsyncCheckResult.java
  4. +16
    -0
      weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaConstants.java
  5. +19
    -0
      weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/message/WxMaMessageRouterRule.java
  6. +2
    -1
      weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaSecCheckServiceImplTest.java

+ 24
- 1
weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaSecCheckService.java 查看文件

@@ -1,5 +1,6 @@
package cn.binarywang.wx.miniapp.api;

import cn.binarywang.wx.miniapp.bean.WxMaMediaAsyncCheckResult;
import java.io.File;

import me.chanjar.weixin.common.error.WxErrorException;
@@ -18,6 +19,8 @@ public interface WxMaSecCheckService {

String MSG_SEC_CHECK_URL = "https://api.weixin.qq.com/wxa/msg_sec_check";

String MEDIA_CHECK_ASYNC_URL = "https://api.weixin.qq.com/wxa/media_check_async";

/**
* <pre>
* 校验一张图片是否含有违法违规内容.
@@ -39,5 +42,25 @@ public interface WxMaSecCheckService {
* 详情请见: https://developers.weixin.qq.com/miniprogram/dev/api/open-api/sec-check/msgSecCheck.html
* </pre>
*/
boolean checkMessage(String msgString);
boolean checkMessage(String msgString) throws WxErrorException;


/**
* <pre>
* 异步校验图片/音频是否含有违法违规内容。
* 应用场景举例:
* 语音风险识别:社交类用户发表的语音内容检测;
* 图片智能鉴黄:涉及拍照的工具类应用(如美拍,识图类应用)用户拍照上传检测;电商类商品上架图片检测;媒体类用户文章里的图片检测等;
* 敏感人脸识别:用户头像;媒体类用户文章里的图片检测;社交类用户上传的图片检测等。
* 频率限制:
* 单个 appId 调用上限为 2000 次/分钟,200,000 次/天;文件大小限制:单个文件大小不超过10M
* 详情请见:
* https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/sec-check/security.mediaCheckAsync.html
* </pre>
* @param mediaUrl 要检测的多媒体url
* @param mediaType 媒体类型,{@link cn.binarywang.wx.miniapp.constant.WxMaConstants.SecCheckMediaType}
* @return
*/
WxMaMediaAsyncCheckResult mediaCheckAsync(String mediaUrl,int mediaType) throws WxErrorException;

}

+ 17
- 8
weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaSecCheckServiceImpl.java 查看文件

@@ -2,14 +2,14 @@ package cn.binarywang.wx.miniapp.api.impl;

import cn.binarywang.wx.miniapp.api.WxMaSecCheckService;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaMediaAsyncCheckResult;
import com.google.gson.JsonObject;
import java.io.File;
import lombok.AllArgsConstructor;
import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.util.http.MediaUploadRequestExecutor;

import java.io.File;

/**
* <pre>
*
@@ -20,6 +20,7 @@ import java.io.File;
*/
@AllArgsConstructor
public class WxMaSecCheckServiceImpl implements WxMaSecCheckService {

private WxMaService service;

@Override
@@ -31,16 +32,24 @@ public class WxMaSecCheckServiceImpl implements WxMaSecCheckService {
}

@Override
public boolean checkMessage(String msgString) {
public boolean checkMessage(String msgString) throws WxErrorException {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("content", msgString);
try {
this.service.post(MSG_SEC_CHECK_URL, jsonObject.toString());
} catch (WxErrorException e) {
return false;
}

this.service.post(MSG_SEC_CHECK_URL, jsonObject.toString());

return true;
}

@Override
public WxMaMediaAsyncCheckResult mediaCheckAsync(String mediaUrl, int mediaType)
throws WxErrorException {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("media_url", mediaUrl);
jsonObject.addProperty("media_type", mediaType);

return WxMaMediaAsyncCheckResult
.fromJson(this.service.post(MEDIA_CHECK_ASYNC_URL, jsonObject.toString()));
}

}

+ 25
- 0
weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaMediaAsyncCheckResult.java 查看文件

@@ -0,0 +1,25 @@
package cn.binarywang.wx.miniapp.bean;

import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
import com.google.gson.annotations.SerializedName;
import java.io.Serializable;

public class WxMaMediaAsyncCheckResult implements Serializable {

private static final long serialVersionUID = 3928132365399916183L;

/**
* 任务id,用于匹配异步推送结果
*/
@SerializedName("trace_id")
private String traceId;


public static WxMaMediaAsyncCheckResult fromJson(String json) {
return WxMaGsonBuilder.create().fromJson(json, WxMaMediaAsyncCheckResult.class);
}

public String toJson() {
return WxMaGsonBuilder.create().toJson(this);
}
}

+ 16
- 0
weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaConstants.java 查看文件

@@ -69,4 +69,20 @@ public class WxMaConstants {
*/
public static final int ERR_40014 = 40014;
}

/**
* 内容安全检测的媒体类型
*/
public static final class SecCheckMediaType {

/**
* 音频
*/
public static final int VOICE = 1;

/**
* 图片
*/
public static final int IMAGE = 2;
}
}

+ 19
- 0
weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/message/WxMaMessageRouterRule.java 查看文件

@@ -32,6 +32,8 @@ public class WxMaMessageRouterRule {

private String rContent;

private String title;

private WxMaMessageMatcher matcher;

private boolean reEnter = false;
@@ -60,6 +62,16 @@ public class WxMaMessageRouterRule {
return this;
}

/**
* 标题,发送小程序页卡时有效
* @param title
* @return
*/
public WxMaMessageRouterRule title(String title){
this.title = title;
return this;
}

/**
* 如果event等于某值.
*/
@@ -100,6 +112,8 @@ public class WxMaMessageRouterRule {
return this;
}



/**
* 如果消息匹配某个matcher,用在用户需要自定义更复杂的匹配规则的时候.
*/
@@ -164,6 +178,8 @@ public class WxMaMessageRouterRule {
return end();
}



/**
* 将微信自定义的事件修正为不区分大小写.
* 比如框架定义的事件常量为click,但微信传递过来的却是CLICK
@@ -183,6 +199,9 @@ public class WxMaMessageRouterRule {
.matches(this.rContent, wxMessage.getContent() == null ? "" : wxMessage.getContent().trim()))
&&
(this.matcher == null || this.matcher.match(wxMessage))
&&
(this.title == null || this.title
.equals(wxMessage.getTitle() == null ? null : wxMessage.getTitle().trim()))
;
}



+ 2
- 1
weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaSecCheckServiceImplTest.java 查看文件

@@ -38,12 +38,13 @@ public class WxMaSecCheckServiceImplTest {
return new Object[][]{
{"特3456书yuuo莞6543李zxcz蒜7782法fgnv级", false},
{"完2347全dfji试3726测asad感3847知qwez到", false},
{"提现&下载&棋牌游戏&网页", false},
{"hello world!", true}
};
}

@Test(dataProvider = "secData")
public void testCheckMessage(String msg, boolean result) {
public void testCheckMessage(String msg, boolean result) throws WxErrorException {
assertThat(this.wxService.getSecCheckService()
.checkMessage(msg))
.isEqualTo(result);


正在加载...
取消
保存