From 614a1c923ecc9a318a035003c420562a41c3789f Mon Sep 17 00:00:00 2001 From: liming1019 Date: Wed, 18 Aug 2021 10:52:16 +0800 Subject: [PATCH] =?UTF-8?q?:new:=20#2261=20=E3=80=90=E5=B0=8F=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E3=80=91=E5=A2=9E=E5=8A=A0=E5=86=85=E5=AE=B9=E5=AE=89?= =?UTF-8?q?=E5=85=A8=E6=8E=A5=E5=8F=A3=EF=BC=88=E5=85=BC=E5=AE=B92.0?= =?UTF-8?q?=E7=89=88=E6=9C=AC=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WxMinishopImageUploadCustomizeResult.java | 5 +- ...inishopUploadRequestCustomizeExecutor.java | 12 ++-- ...opMediaUploadRequestCustomizeExecutor.java | 5 +- ...opMediaUploadRequestCustomizeExecutor.java | 4 +- ...opMediaUploadRequestCustomizeExecutor.java | 4 +- .../wx/miniapp/api/WxMaSecCheckService.java | 13 ++++ .../wx/miniapp/api/WxMaShopImgService.java | 11 +++ .../api/impl/WxMaSecCheckServiceImpl.java | 16 +++++ .../api/impl/WxMaShopImgServiceImpl.java | 9 ++- .../wx/miniapp/bean/WxMaBaseResponse.java | 32 +++++++++ .../security/WxMaMsgSecCheckCheckRequest.java | 37 ++++++++++ .../WxMaMsgSecCheckCheckResponse.java | 72 +++++++++++++++++++ .../api/impl/WxMaSecCheckServiceImplTest.java | 14 ++++ .../api/impl/WxMaShopImgServiceImplTest.java | 7 ++ 14 files changed, 227 insertions(+), 14 deletions(-) create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaBaseResponse.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/security/WxMaMsgSecCheckCheckRequest.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/security/WxMaMsgSecCheckCheckResponse.java diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/result/WxMinishopImageUploadCustomizeResult.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/result/WxMinishopImageUploadCustomizeResult.java index e3077fd00..515189e46 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/result/WxMinishopImageUploadCustomizeResult.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/result/WxMinishopImageUploadCustomizeResult.java @@ -21,12 +21,13 @@ public class WxMinishopImageUploadCustomizeResult implements Serializable { if (result.getErrcode().equals("0")) { WxMinishopPicFileCustomizeResult picFileResult = new WxMinishopPicFileCustomizeResult(); JsonObject picObject = jsonObject.get("img_info").getAsJsonObject(); - picFileResult.setMediaId(picObject.get("media_id").getAsString()); + if (picObject.has("media_id")) { + picFileResult.setMediaId(picObject.get("media_id").getAsString()); + } if (picObject.has("temp_img_url")) { picFileResult.setTempImgUrl(picObject.get("temp_img_url").getAsString()); } result.setImgInfo(picFileResult); - } return result; } diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MinishopUploadRequestCustomizeExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MinishopUploadRequestCustomizeExecutor.java index d782466c3..23309202d 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MinishopUploadRequestCustomizeExecutor.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MinishopUploadRequestCustomizeExecutor.java @@ -12,9 +12,11 @@ import java.io.IOException; public abstract class MinishopUploadRequestCustomizeExecutor implements RequestExecutor { protected RequestHttp requestHttp; + protected String respType; - public MinishopUploadRequestCustomizeExecutor(RequestHttp requestHttp) { + public MinishopUploadRequestCustomizeExecutor(RequestHttp requestHttp, String respType) { this.requestHttp = requestHttp; + this.respType = respType; } @Override @@ -22,14 +24,14 @@ public abstract class MinishopUploadRequestCustomizeExecutor implements Re handler.handle(this.execute(uri, data, wxType)); } - public static RequestExecutor create(RequestHttp requestHttp) { + public static RequestExecutor create(RequestHttp requestHttp, String respType) { switch (requestHttp.getRequestType()) { case APACHE_HTTP: - return new ApacheMinishopMediaUploadRequestCustomizeExecutor(requestHttp); + return new ApacheMinishopMediaUploadRequestCustomizeExecutor(requestHttp, respType); case JODD_HTTP: - return new JoddHttpMinishopMediaUploadRequestCustomizeExecutor(requestHttp); + return new JoddHttpMinishopMediaUploadRequestCustomizeExecutor(requestHttp, respType); case OK_HTTP: - return new OkHttpMinishopMediaUploadRequestCustomizeExecutor(requestHttp); + return new OkHttpMinishopMediaUploadRequestCustomizeExecutor(requestHttp, respType); default: return null; } diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheMinishopMediaUploadRequestCustomizeExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheMinishopMediaUploadRequestCustomizeExecutor.java index dc38fbae5..64888c08d 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheMinishopMediaUploadRequestCustomizeExecutor.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheMinishopMediaUploadRequestCustomizeExecutor.java @@ -24,8 +24,8 @@ import java.io.IOException; */ @Slf4j public class ApacheMinishopMediaUploadRequestCustomizeExecutor extends MinishopUploadRequestCustomizeExecutor { - public ApacheMinishopMediaUploadRequestCustomizeExecutor(RequestHttp requestHttp) { - super(requestHttp); + public ApacheMinishopMediaUploadRequestCustomizeExecutor(RequestHttp requestHttp, String respType) { + super(requestHttp, respType); } @Override @@ -39,6 +39,7 @@ public class ApacheMinishopMediaUploadRequestCustomizeExecutor extends MinishopU HttpEntity entity = MultipartEntityBuilder .create() .addBinaryBody("media", file) + .addTextBody("resp_type", this.respType) .setMode(HttpMultipartMode.RFC6532) .build(); httpPost.setEntity(entity); diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/JoddHttpMinishopMediaUploadRequestCustomizeExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/JoddHttpMinishopMediaUploadRequestCustomizeExecutor.java index 8fa1de427..a79eb8eda 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/JoddHttpMinishopMediaUploadRequestCustomizeExecutor.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/JoddHttpMinishopMediaUploadRequestCustomizeExecutor.java @@ -22,8 +22,8 @@ import java.nio.charset.StandardCharsets; */ @Slf4j public class JoddHttpMinishopMediaUploadRequestCustomizeExecutor extends MinishopUploadRequestCustomizeExecutor { - public JoddHttpMinishopMediaUploadRequestCustomizeExecutor(RequestHttp requestHttp) { - super(requestHttp); + public JoddHttpMinishopMediaUploadRequestCustomizeExecutor(RequestHttp requestHttp, String respType) { + super(requestHttp, respType); } @Override diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpMinishopMediaUploadRequestCustomizeExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpMinishopMediaUploadRequestCustomizeExecutor.java index 8b2cdc7b6..45d112cd6 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpMinishopMediaUploadRequestCustomizeExecutor.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpMinishopMediaUploadRequestCustomizeExecutor.java @@ -18,8 +18,8 @@ import java.io.IOException; */ @Slf4j public class OkHttpMinishopMediaUploadRequestCustomizeExecutor extends MinishopUploadRequestCustomizeExecutor { - public OkHttpMinishopMediaUploadRequestCustomizeExecutor(RequestHttp requestHttp) { - super(requestHttp); + public OkHttpMinishopMediaUploadRequestCustomizeExecutor(RequestHttp requestHttp, String respType) { + super(requestHttp, respType); } @Override diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaSecCheckService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaSecCheckService.java index 50e03b30d..8b135adcd 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaSecCheckService.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaSecCheckService.java @@ -1,6 +1,8 @@ package cn.binarywang.wx.miniapp.api; import cn.binarywang.wx.miniapp.bean.WxMaMediaAsyncCheckResult; +import cn.binarywang.wx.miniapp.bean.security.WxMaMsgSecCheckCheckRequest; +import cn.binarywang.wx.miniapp.bean.security.WxMaMsgSecCheckCheckResponse; import me.chanjar.weixin.common.error.WxErrorException; import java.io.File; @@ -55,6 +57,17 @@ public interface WxMaSecCheckService { boolean checkMessage(String msgString) throws WxErrorException; + /** + *
+   * 检查一段文本是否含有违法违规内容(新版本接口,主要是request和response做了参数优化)
+   * 详情请见: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/sec-check/security.msgSecCheck.html
+   * 
+ * @param msgRequest + * @return WxMaMsgSecCheckCheckResponse + * @throws WxErrorException + */ + WxMaMsgSecCheckCheckResponse checkMessage(WxMaMsgSecCheckCheckRequest msgRequest) throws WxErrorException; + /** *
    * 异步校验图片/音频是否含有违法违规内容。
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaShopImgService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaShopImgService.java
index c44bc7df3..2cb9334fc 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaShopImgService.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaShopImgService.java
@@ -14,8 +14,19 @@ public interface WxMaShopImgService {
   /**
    * 上传图片
    *
+   * @param file
    * @return WxMinishopImageUploadCustomizeResult
    * @throws WxErrorException
    */
   WxMinishopImageUploadCustomizeResult uploadImg(File file) throws WxErrorException;
+
+  /**
+   * 上传图片,带respType参数
+   *
+   * @param file
+   * @param respType
+   * @return WxMinishopImageUploadCustomizeResult
+   * @throws WxErrorException
+   */
+  WxMinishopImageUploadCustomizeResult uploadImg(File file, String respType) throws WxErrorException;
 }
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaSecCheckServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaSecCheckServiceImpl.java
index fbff2f320..332a47ad7 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaSecCheckServiceImpl.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaSecCheckServiceImpl.java
@@ -3,12 +3,17 @@ 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 cn.binarywang.wx.miniapp.bean.security.WxMaMsgSecCheckCheckRequest;
+import cn.binarywang.wx.miniapp.bean.security.WxMaMsgSecCheckCheckResponse;
+import cn.binarywang.wx.miniapp.json.WxMaGsonBuilder;
 import com.google.gson.JsonObject;
 import lombok.RequiredArgsConstructor;
 import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
+import me.chanjar.weixin.common.enums.WxType;
 import me.chanjar.weixin.common.error.WxError;
 import me.chanjar.weixin.common.error.WxErrorException;
 import me.chanjar.weixin.common.util.http.MediaUploadRequestExecutor;
+import me.chanjar.weixin.common.util.json.GsonParser;
 import org.apache.commons.io.FileUtils;
 
 import java.io.File;
@@ -16,6 +21,7 @@ import java.io.IOException;
 import java.net.URL;
 
 import static cn.binarywang.wx.miniapp.constant.WxMaApiUrlConstants.SecCheck.*;
+import static cn.binarywang.wx.miniapp.constant.WxMaConstants.ERRCODE;
 
 /**
  * 
@@ -59,6 +65,16 @@ public class WxMaSecCheckServiceImpl implements WxMaSecCheckService {
     return true;
   }
 
+  @Override
+  public WxMaMsgSecCheckCheckResponse checkMessage(WxMaMsgSecCheckCheckRequest msgRequest) throws WxErrorException {
+    String response = this.service.post(MSG_SEC_CHECK_URL, msgRequest);
+    JsonObject jsonObject = GsonParser.parse(response);
+    if (jsonObject.get(ERRCODE).getAsInt() != 0) {
+      throw new WxErrorException(WxError.fromJson(response, WxType.MiniApp));
+    }
+    return WxMaGsonBuilder.create().fromJson(response, WxMaMsgSecCheckCheckResponse.class);
+  }
+
   @Override
   public WxMaMediaAsyncCheckResult mediaCheckAsync(String mediaUrl, int mediaType)
     throws WxErrorException {
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaShopImgServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaShopImgServiceImpl.java
index f253bca28..1c69f8dc8 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaShopImgServiceImpl.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaShopImgServiceImpl.java
@@ -23,7 +23,14 @@ public class WxMaShopImgServiceImpl implements WxMaShopImgService {
   @Override
   public WxMinishopImageUploadCustomizeResult uploadImg(File file) throws WxErrorException {
     WxMinishopImageUploadCustomizeResult result = this.service.execute(
-      MinishopUploadRequestCustomizeExecutor.create(this.service.getRequestHttp()), IMG_UPLOAD, file);
+      MinishopUploadRequestCustomizeExecutor.create(this.service.getRequestHttp(), "0"), IMG_UPLOAD, file);
+    return result;
+  }
+
+  @Override
+  public WxMinishopImageUploadCustomizeResult uploadImg(File file, String respType) throws WxErrorException {
+    WxMinishopImageUploadCustomizeResult result = this.service.execute(
+      MinishopUploadRequestCustomizeExecutor.create(this.service.getRequestHttp(), respType), IMG_UPLOAD, file);
     return result;
   }
 }
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaBaseResponse.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaBaseResponse.java
new file mode 100644
index 000000000..a0f524d32
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaBaseResponse.java
@@ -0,0 +1,32 @@
+package cn.binarywang.wx.miniapp.bean;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author liming1019
+ * @date 2021/8/17
+ */
+@Data
+public class WxMaBaseResponse implements Serializable {
+  private static final long serialVersionUID = 3932406255203539965L;
+  /**
+   * 错误码
+   * 
+   * 是否必填:
+   * 
+ */ + @SerializedName("errcode") + private Integer errcode; + + /** + * 错误信息 + *
+   * 是否必填:
+   * 
+ */ + @SerializedName("errmsg") + private String errmsg; +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/security/WxMaMsgSecCheckCheckRequest.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/security/WxMaMsgSecCheckCheckRequest.java new file mode 100644 index 000000000..2379f14b3 --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/security/WxMaMsgSecCheckCheckRequest.java @@ -0,0 +1,37 @@ +package cn.binarywang.wx.miniapp.bean.security; + +import com.google.gson.annotations.SerializedName; +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; + +/** + * @author liming1019 + */ +@Data +@Builder +public class WxMaMsgSecCheckCheckRequest implements Serializable { + private static final long serialVersionUID = 3233176903681625506L; + + @SerializedName("version") + private String version; + + @SerializedName("openid") + private String openid; + + @SerializedName("scene") + private Integer scene; + + @SerializedName("content") + private String content; + + @SerializedName("nickname") + private String nickname; + + @SerializedName("title") + private String title; + + @SerializedName("signature") + private String signature; +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/security/WxMaMsgSecCheckCheckResponse.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/security/WxMaMsgSecCheckCheckResponse.java new file mode 100644 index 000000000..6e6a93afe --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/security/WxMaMsgSecCheckCheckResponse.java @@ -0,0 +1,72 @@ +package cn.binarywang.wx.miniapp.bean.security; + +import cn.binarywang.wx.miniapp.bean.WxMaBaseResponse; +import com.google.gson.annotations.SerializedName; +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * @author liming1019 + */ +@Data +@Builder +public class WxMaMsgSecCheckCheckResponse extends WxMaBaseResponse implements Serializable { + private static final long serialVersionUID = 1903247824980080974L; + /** + * result : {"suggest":"risky","label":20001} + * detail : [{"strategy":"content_model","errcode":0,"suggest":"risky","label":20006,"prob":90},{"strategy":"keyword","errcode":0,"suggest":"pass","label":20006,"level":20,"keyword":"命中的关键词1"},{"strategy":"keyword","errcode":0,"suggest":"risky","label":20006,"level":90,"keyword":"命中的关键词2"}] + * trace_id : 60ae120f-371d5872-7941a05b + */ + @SerializedName("result") + private ResultBean result; + @SerializedName("trace_id") + private String traceId; + @SerializedName("detail") + private List detail; + + @Data + @Builder + public static class ResultBean implements Serializable { + /** + * suggest : risky + * label : 20001 + */ + + @SerializedName("suggest") + private String suggest; + @SerializedName("label") + private String label; + } + + @Data + @Builder + public static class DetailBean implements Serializable { + /** + * strategy : content_model + * errcode : 0 + * suggest : risky + * label : 20006 + * prob : 90 + * level : 20 + * keyword : 命中的关键词1 + */ + + @SerializedName("strategy") + private String strategy; + @SerializedName("errcode") + private Integer errcode; + @SerializedName("suggest") + private String suggest; + @SerializedName("label") + private String label; + @SerializedName("prob") + private Integer prob; + @SerializedName("level") + private String level; + @SerializedName("keyword") + private String keyword; + } +} diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaSecCheckServiceImplTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaSecCheckServiceImplTest.java index 19bca1ca4..f55ce9c48 100644 --- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaSecCheckServiceImplTest.java +++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaSecCheckServiceImplTest.java @@ -2,6 +2,8 @@ package cn.binarywang.wx.miniapp.api.impl; import java.io.File; +import cn.binarywang.wx.miniapp.bean.security.WxMaMsgSecCheckCheckRequest; +import cn.binarywang.wx.miniapp.bean.security.WxMaMsgSecCheckCheckResponse; import org.testng.annotations.*; import cn.binarywang.wx.miniapp.api.WxMaService; @@ -49,4 +51,16 @@ public class WxMaSecCheckServiceImplTest { .checkMessage(msg)) .isEqualTo(result); } + + @Test(dataProvider = "secData") + public void testCheckMessage2(String msg, boolean result) throws WxErrorException { + WxMaMsgSecCheckCheckRequest request = WxMaMsgSecCheckCheckRequest.builder() + .content(msg) + .scene(1) + .version("2") + .openid("xxx") + .build(); + WxMaMsgSecCheckCheckResponse response = this.wxService.getSecCheckService().checkMessage(request); + assertThat(response).isNotNull(); + } } diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaShopImgServiceImplTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaShopImgServiceImplTest.java index 191b42963..060896ab0 100644 --- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaShopImgServiceImplTest.java +++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaShopImgServiceImplTest.java @@ -28,4 +28,11 @@ public class WxMaShopImgServiceImplTest { WxMinishopImageUploadCustomizeResult result = wxService.getShopImgService().uploadImg(file); assertThat(result).isNotNull(); } + + @Test + public void testUploadImg2() throws WxErrorException { + File file = new File("/Users/liming/Desktop/test.jpeg"); + WxMinishopImageUploadCustomizeResult result = wxService.getShopImgService().uploadImg(file, "1"); + assertThat(result).isNotNull(); + } }